diff --git a/VERSION b/VERSION index 902f6a6..59af327 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -6.19.6 +6.19.7 diff --git a/play-life-web/package.json b/play-life-web/package.json index a9290fd..0f32759 100644 --- a/play-life-web/package.json +++ b/play-life-web/package.json @@ -1,6 +1,6 @@ { "name": "play-life-web", - "version": "6.19.6", + "version": "6.19.7", "type": "module", "scripts": { "dev": "vite", diff --git a/play-life-web/src/App.jsx b/play-life-web/src/App.jsx index 960356e..f5416b4 100644 --- a/play-life-web/src/App.jsx +++ b/play-life-web/src/App.jsx @@ -677,6 +677,8 @@ function AppContent() { // Refs для отслеживания активного таба const prevActiveTabRef = useRef(null) const lastLoadedTabRef = useRef(null) // Отслеживаем последний загруженный таб, чтобы избежать двойной загрузки + const fullStatisticsScrollRef = useRef(null) + const lastFullProjectRef = useRef(selectedProject) // Обновляем ref при изменении данных useEffect(() => { @@ -1102,11 +1104,15 @@ function AppContent() { lastLoadedTabRef.current = tabKey const projectName = activeTab === 'full' ? selectedProject : null loadTabData(activeTab, false, projectName) + if (activeTab === 'full') lastFullProjectRef.current = selectedProject } else if (isReturningToTab) { - // Возврат на таб - фоновая загрузка + // Возврат на таб lastLoadedTabRef.current = tabKey const projectName = activeTab === 'full' ? selectedProject : null - loadTabData(activeTab, true, projectName) + // Если проект изменился - загрузка с индикатором, иначе фоновая + const isBackground = activeTab === 'full' && lastFullProjectRef.current !== selectedProject ? false : true + loadTabData(activeTab, isBackground, projectName) + if (activeTab === 'full') lastFullProjectRef.current = selectedProject } prevActiveTabRef.current = activeTab @@ -1128,6 +1134,13 @@ function AppContent() { const isAnyLoading = currentWeekLoading || fullStatisticsLoading || prioritiesLoading || isRefreshing const hasAnyError = currentWeekError || fullStatisticsError || prioritiesError + // Сбрасываем скролл экрана статистики при его открытии + useEffect(() => { + if (activeTab === 'full' && fullStatisticsScrollRef.current) { + fullStatisticsScrollRef.current.scrollTop = 0 + } + }, [activeTab]) + // Сохраняем выбранный таб, чтобы восстановить его после перезагрузки useEffect(() => { try { @@ -1238,7 +1251,7 @@ function AppContent() { )} {loadedTabs.full && ( -
+
new Date()) @@ -99,23 +101,39 @@ function FullStatistics({ selectedProject, onClearSelection, data, loading, erro // Когда компонент открывается (activeTab становится 'full'), помечаем это if (activeTab === 'full' && prevActiveTabRef.current !== 'full') { componentJustOpenedRef.current = true + // Проверяем, изменился ли проект с прошлого открытия + if (lastActiveProjectRef.current !== selectedProject) { + setProjectChanged(true) + } + } + // Запоминаем текущий проект при закрытии экрана + if (prevActiveTabRef.current === 'full' && activeTab !== 'full') { + lastActiveProjectRef.current = selectedProject } prevActiveTabRef.current = activeTab - }, [activeTab]) + }, [activeTab, selectedProject]) // Загружаем данные при открытии экрана, при изменении selectedDate или selectedProject useEffect(() => { if (activeTab === 'full' && selectedDate && fetchTodayEntries) { - // Если компонент только что открылся - используем фоновую загрузку + // Если компонент только что открылся if (componentJustOpenedRef.current) { componentJustOpenedRef.current = false - fetchTodayEntries(true, selectedProject, selectedDate) + // Если проект изменился - показываем загрузку (не фоновую) + if (projectChanged) { + setProjectChanged(false) + lastActiveProjectRef.current = selectedProject + fetchTodayEntries(false, selectedProject, selectedDate) + } else { + // Тот же проект - фоновая загрузка + fetchTodayEntries(true, selectedProject, selectedDate) + } } else { // При изменении даты или проекта - используем обычную загрузку (не фоновую) fetchTodayEntries(false, selectedProject, selectedDate) } } - }, [activeTab, selectedDate, selectedProject, fetchTodayEntries]) + }, [activeTab, selectedDate, selectedProject, fetchTodayEntries, projectChanged]) // Обработчик выбора дня const handleDaySelect = useCallback((date) => {