fix: 恢复成功后整体替换待写队列,修首屏自愈抢跑写空
This commit is contained in:
@@ -1433,7 +1433,9 @@ function WorktableSection(props: any) {
|
||||
useEffect(() => {
|
||||
let cancelled = false
|
||||
void (async () => {
|
||||
const res = await loadHostState()
|
||||
let localAt = 0
|
||||
try { localAt = Number(localStorage.getItem(SAVED_AT_KEY) ?? '0') || 0 } catch {}
|
||||
const res = await loadHostState(localAt)
|
||||
if (cancelled) return
|
||||
if (!res.reachable) {
|
||||
// 读不到就不写:宁可本次只在本地,也不拿空状态覆盖宿主镜像
|
||||
@@ -1442,15 +1444,16 @@ function WorktableSection(props: any) {
|
||||
return
|
||||
}
|
||||
const host = res.state
|
||||
let localAt = 0
|
||||
try { localAt = Number(localStorage.getItem(SAVED_AT_KEY) ?? '0') || 0 } catch {}
|
||||
const hostAt = typeof host?.updatedAt === 'number' ? host.updatedAt : 0
|
||||
if (host && hostAt > localAt) {
|
||||
if (host.projects) persistProjects(normalizeProjects(host.projects))
|
||||
if (host.view) persistView(normalizeView(host.view))
|
||||
// 以宿主为准:作废首屏自愈等早于恢复的待写内容,避免半截空值回写
|
||||
markHydrated({ projects: host.projects, view: host.view })
|
||||
} else {
|
||||
// 本地更新或宿主还没有镜像:什么都不发,等用户真的改动再写
|
||||
markHydrated(null)
|
||||
}
|
||||
markHydrated(host ? { projects: host.projects, view: host.view } : {})
|
||||
if (hostAt <= localAt) flushHostSave()
|
||||
})()
|
||||
const flush = () => flushHostSave()
|
||||
window.addEventListener('pagehide', flush)
|
||||
|
||||
Reference in New Issue
Block a user