From 0ee689151ea4ae0d0f19c8f8b90e03e1a94bafb9 Mon Sep 17 00:00:00 2001 From: poignatov Date: Thu, 5 Feb 2026 12:40:44 +0300 Subject: [PATCH] =?UTF-8?q?4.20.4:=20=D0=A4=D0=BE=D0=BD=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BF=D1=80=D0=BE=D0=B3?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D1=81=D0=B0=20=D0=BD=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION | 2 +- play-life-web/package.json | 2 +- play-life-web/src/App.jsx | 19 +++++++++++-- .../src/components/FullStatistics.jsx | 28 +++++++++++-------- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/VERSION b/VERSION index 94a7e5e..ba8acfe 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.20.3 +4.20.4 diff --git a/play-life-web/package.json b/play-life-web/package.json index d454a42..0ab08ea 100644 --- a/play-life-web/package.json +++ b/play-life-web/package.json @@ -1,6 +1,6 @@ { "name": "play-life-web", - "version": "4.20.3", + "version": "4.20.4", "type": "module", "scripts": { "dev": "vite", diff --git a/play-life-web/src/App.jsx b/play-life-web/src/App.jsx index 1681cdb..e148c57 100644 --- a/play-life-web/src/App.jsx +++ b/play-life-web/src/App.jsx @@ -514,17 +514,32 @@ function AppContent() { // Если нет кеша и это не первая загрузка - ничего не делаем (данные уже загружаются) } else if (tab === 'full') { const hasCache = cacheRef.current.full !== null + const hasCurrentWeekCache = cacheRef.current.current !== null const isInitialized = tabsInitializedRef.current.full if (!isInitialized) { - // Первая загрузка таба - загружаем с индикатором - fetchFullStatisticsData(false) + // Первая загрузка таба + if (hasCache) { + // Если есть кеш - используем фоновую загрузку, показываем старые данные + fetchFullStatisticsData(true) + } else { + // Если кеша нет - загружаем с индикатором + fetchFullStatisticsData(false) + } + // Также запускаем фоновую загрузку currentWeekData, если его нет + if (!hasCurrentWeekCache) { + fetchCurrentWeekData(true) + } // todayEntries будет загружен в FullStatistics компоненте при выборе дня tabsInitializedRef.current.full = true setTabsInitialized(prev => ({ ...prev, full: true })) } else if (hasCache && isBackground) { // Возврат на таб с кешем - фоновая загрузка fetchFullStatisticsData(true) + // Также запускаем фоновую загрузку currentWeekData, если его нет + if (!hasCurrentWeekCache) { + fetchCurrentWeekData(true) + } // todayEntries будет загружен в FullStatistics компоненте при выборе дня } } else if (tab === 'priorities') { diff --git a/play-life-web/src/components/FullStatistics.jsx b/play-life-web/src/components/FullStatistics.jsx index e93984d..e4fc365 100644 --- a/play-life-web/src/components/FullStatistics.jsx +++ b/play-life-web/src/components/FullStatistics.jsx @@ -40,6 +40,7 @@ const dayNames = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'] function FullStatistics({ selectedProject, onClearSelection, data, loading, error, onRetry, currentWeekData, onNavigate, todayEntries, todayEntriesLoading, todayEntriesError, onRetryTodayEntries, fetchTodayEntries, activeTab }) { const [selectedDate, setSelectedDate] = useState(null) const prevActiveTabRef = React.useRef(activeTab) + const componentJustOpenedRef = React.useRef(false) // Получаем даты текущей недели const weekDates = getCurrentWeekDates() @@ -67,7 +68,6 @@ function FullStatistics({ selectedProject, onClearSelection, data, loading, erro if (prevActiveTabRef.current === 'full' && activeTab !== 'full') { setSelectedDate(todayDateStr) } - prevActiveTabRef.current = activeTab }, [activeTab, todayDateStr]) // Инициализируем выбранную дату текущим днем при первом рендере @@ -85,20 +85,26 @@ function FullStatistics({ selectedProject, onClearSelection, data, loading, erro } }, [selectedDate, todayDateStr, pastDays]) - // Отслеживаем открытие компонента и загружаем данные для selectedDate + // Отслеживаем открытие компонента useEffect(() => { - // Этот эффект срабатывает при каждом рендере, но мы проверяем, нужно ли загружать данные - if (selectedDate && fetchTodayEntries) { - // Всегда загружаем данные для selectedDate при его изменении - // Это гарантирует, что данные соответствуют выбранному чипсу - fetchTodayEntries(false, selectedProject, selectedDate) + // Когда компонент открывается (activeTab становится 'full'), помечаем это + if (activeTab === 'full' && prevActiveTabRef.current !== 'full') { + componentJustOpenedRef.current = true } - }, [selectedDate, selectedProject, fetchTodayEntries]) + prevActiveTabRef.current = activeTab + }, [activeTab]) // Загружаем данные при изменении selectedDate или selectedProject useEffect(() => { if (selectedDate && fetchTodayEntries) { - fetchTodayEntries(false, selectedProject, selectedDate) + // Если компонент только что открылся - используем фоновую загрузку + if (componentJustOpenedRef.current) { + componentJustOpenedRef.current = false + fetchTodayEntries(true, selectedProject, selectedDate) + } else { + // При изменении даты или проекта - используем обычную загрузку (не фоновую) + fetchTodayEntries(false, selectedProject, selectedDate) + } } }, [selectedDate, selectedProject, fetchTodayEntries]) @@ -129,14 +135,14 @@ function FullStatistics({ selectedProject, onClearSelection, data, loading, erro ✕ )} - {loading && (!data || data.length === 0) ? ( + {loading && (!data || data.length === 0) && (!todayEntries || (Array.isArray(todayEntries) && todayEntries.length === 0)) ? (
Загрузка...
- ) : (!data || data.length === 0) ? ( + ) : (!data || data.length === 0) && !todayEntries ? (
Нет данных для отображения