6.3.4: Сброс на current при рестарте PWA
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m8s

This commit is contained in:
poignatov
2026-03-08 12:41:25 +03:00
parent f54a0fff14
commit e1b6fcb918
4 changed files with 28 additions and 20 deletions

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"claudeCode.allowDangerouslySkipPermissions": true
}

View File

@@ -1 +1 @@
6.3.3 6.3.4

View File

@@ -1,6 +1,6 @@
{ {
"name": "play-life-web", "name": "play-life-web",
"version": "6.3.3", "version": "6.3.4",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -242,8 +242,8 @@ function AppContent() {
const tabFromUrl = urlParams.get('tab') const tabFromUrl = urlParams.get('tab')
const validTabs = ['current', 'priorities', 'full', 'words', 'add-words', 'dictionaries', 'test', 'tasks', 'task-form', 'wishlist', 'wishlist-form', 'wishlist-detail', 'board-form', 'board-join', 'profile', 'todoist-integration', 'telegram-integration', 'fitbit-integration', 'tracking', 'tracking-access', 'tracking-invite'] const validTabs = ['current', 'priorities', 'full', 'words', 'add-words', 'dictionaries', 'test', 'tasks', 'task-form', 'wishlist', 'wishlist-form', 'wishlist-detail', 'board-form', 'board-join', 'profile', 'todoist-integration', 'telegram-integration', 'fitbit-integration', 'tracking', 'tracking-access', 'tracking-invite']
if (tabFromUrl && validTabs.includes(tabFromUrl) && deepTabs.includes(tabFromUrl)) { if (tabFromUrl && validTabs.includes(tabFromUrl) && deepTabs.includes(tabFromUrl) && window.history.length > 1) {
// Восстанавливаем параметры из URL // Восстанавливаем глубокий таб из URL только если есть история (не рестарт PWA)
const params = {} const params = {}
urlParams.forEach((value, key) => { urlParams.forEach((value, key) => {
if (key !== 'tab') { if (key !== 'tab') {
@@ -256,20 +256,24 @@ function AppContent() {
}) })
const deepTabUrl = window.location.pathname + window.location.search const deepTabUrl = window.location.pathname + window.location.search
ensureBaseHistory(tabFromUrl, params, deepTabUrl) ensureBaseHistory(tabFromUrl, params, deepTabUrl)
// Если в URL есть глубокий таб, восстанавливаем его
setActiveTab(tabFromUrl) setActiveTab(tabFromUrl)
setLoadedTabs(prev => ({ ...prev, [tabFromUrl]: true })) setLoadedTabs(prev => ({ ...prev, [tabFromUrl]: true }))
if (Object.keys(params).length > 0) { if (Object.keys(params).length > 0) {
setTabParams(params) setTabParams(params)
// Если это экран full с selectedProject, восстанавливаем его
if (tabFromUrl === 'full' && params.selectedProject) { if (tabFromUrl === 'full' && params.selectedProject) {
setSelectedProject(params.selectedProject) setSelectedProject(params.selectedProject)
} }
} }
} else { } else {
// Если в URL нет глубокого таба, проверяем localStorage для основного таба // При рестарте PWA (history.length <= 1) с deep tab в URL — сбрасываем на current
if (tabFromUrl && deepTabs.includes(tabFromUrl) && window.history.length <= 1) {
window.history.replaceState({ tab: 'current' }, '', '/')
setActiveTab('current')
setLoadedTabs(prev => ({ ...prev, 'current': true }))
} else {
// Проверяем localStorage для основного таба
const savedTab = window.localStorage?.getItem('activeTab') const savedTab = window.localStorage?.getItem('activeTab')
if (savedTab && validTabs.includes(savedTab)) { if (savedTab && validTabs.includes(savedTab) && mainTabs.includes(savedTab)) {
setActiveTab(savedTab) setActiveTab(savedTab)
setLoadedTabs(prev => ({ ...prev, [savedTab]: true })) setLoadedTabs(prev => ({ ...prev, [savedTab]: true }))
} }
@@ -283,6 +287,7 @@ function AppContent() {
window.history.replaceState({}, '', url) window.history.replaceState({}, '', url)
} }
} }
}
setIsInitialized(true) setIsInitialized(true)
} catch (err) { } catch (err) {
console.warn('Не удалось прочитать активный таб', err) console.warn('Не удалось прочитать активный таб', err)