6.3.4: Сброс на current при рестарте PWA
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m8s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m8s
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"claudeCode.allowDangerouslySkipPermissions": true
|
||||||
|
}
|
||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user