fix: 状态镜像防冲掉——服务端按 key 合并,客户端读不到宿主就不写
This commit is contained in:
@@ -12,7 +12,7 @@ import { previewFromEvents, previewFromNodes, readSessionPreview, presetApiOf, m
|
||||
import { photoStore, kindOf } from './photoStore'
|
||||
import { DEFAULT_BG_SVG, b64ToBlob } from './defaultBg'
|
||||
import { WAVE_BG_B64 } from './waveBg'
|
||||
import { loadHostState, queueHostSave, markHydrated, flushHostSave } from './hostState'
|
||||
import { loadHostState, queueHostSave, markHydrated, staysReadOnly, flushHostSave } from './hostState'
|
||||
|
||||
/**
|
||||
* dsh-worktable 客户端(v2):侧边栏底部「工作台」区块。
|
||||
@@ -1433,8 +1433,15 @@ function WorktableSection(props: any) {
|
||||
useEffect(() => {
|
||||
let cancelled = false
|
||||
void (async () => {
|
||||
const host = await loadHostState()
|
||||
const res = await loadHostState()
|
||||
if (cancelled) return
|
||||
if (!res.reachable) {
|
||||
// 读不到就不写:宁可本次只在本地,也不拿空状态覆盖宿主镜像
|
||||
staysReadOnly()
|
||||
console.warn('[dsh-worktable] 宿主状态暂不可读,本次会话不写镜像')
|
||||
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
|
||||
@@ -1442,7 +1449,7 @@ function WorktableSection(props: any) {
|
||||
if (host.projects) persistProjects(normalizeProjects(host.projects))
|
||||
if (host.view) persistView(normalizeView(host.view))
|
||||
}
|
||||
markHydrated()
|
||||
markHydrated(host ? { projects: host.projects, view: host.view } : {})
|
||||
if (hostAt <= localAt) flushHostSave()
|
||||
})()
|
||||
const flush = () => flushHostSave()
|
||||
|
||||
Reference in New Issue
Block a user