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,31 +256,36 @@ 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
const savedTab = window.localStorage?.getItem('activeTab') if (tabFromUrl && deepTabs.includes(tabFromUrl) && window.history.length <= 1) {
if (savedTab && validTabs.includes(savedTab)) { window.history.replaceState({ tab: 'current' }, '', '/')
setActiveTab(savedTab) setActiveTab('current')
setLoadedTabs(prev => ({ ...prev, [savedTab]: true })) setLoadedTabs(prev => ({ ...prev, 'current': true }))
} } else {
// Очищаем URL от параметров таба, если это основной таб // Проверяем localStorage для основного таба
if (tabFromUrl && mainTabs.includes(tabFromUrl)) { const savedTab = window.localStorage?.getItem('activeTab')
const url = new URL(window.location) if (savedTab && validTabs.includes(savedTab) && mainTabs.includes(savedTab)) {
url.searchParams.delete('tab') setActiveTab(savedTab)
url.searchParams.forEach((value, key) => { setLoadedTabs(prev => ({ ...prev, [savedTab]: true }))
url.searchParams.delete(key) }
}) // Очищаем URL от параметров таба, если это основной таб
window.history.replaceState({}, '', url) if (tabFromUrl && mainTabs.includes(tabFromUrl)) {
const url = new URL(window.location)
url.searchParams.delete('tab')
url.searchParams.forEach((value, key) => {
url.searchParams.delete(key)
})
window.history.replaceState({}, '', url)
}
} }
} }
setIsInitialized(true) setIsInitialized(true)