🐛 fix(store): 修复启动最大化设置未及时持久化的问题

- 为 startupFullscreen 增加即时持久化补写
- 避免用户修改设置后立即退出导致下次启动仍按旧窗口状态恢复
- 补充回归测试覆盖立即重启场景
This commit is contained in:
Syngnat
2026-06-03 20:22:38 +08:00
parent 82cac0b12e
commit cbe4645bc6
3 changed files with 49 additions and 2 deletions

View File

@@ -1 +1 @@
0295a42fd931778d85157816d79d29e5
d0464f9da25e9356e61652e638c99ffe

View File

@@ -1062,6 +1062,19 @@ describe('store appearance persistence', () => {
});
});
it('persists startup fullscreen immediately so next launch does not miss maximize preference', async () => {
const { useStore } = await importStore();
useStore.getState().setStartupFullscreen(true);
const persisted = JSON.parse(storage.getItem('lite-db-storage') || '{}');
expect(persisted.state.startupFullscreen).toBe(true);
vi.resetModules();
const reloaded = await importStore();
expect(reloaded.useStore.getState().startupFullscreen).toBe(true);
});
it('falls back to Enter when persisted AI chat send shortcut is invalid', async () => {
storage.setItem('lite-db-storage', JSON.stringify({
state: {

View File

@@ -225,6 +225,36 @@ const createDebouncedPersistStorage = <S>(
};
};
const writePersistedStatePatch = (
patch: Record<string, unknown>,
): void => {
if (typeof localStorage === "undefined") {
return;
}
try {
const payload = localStorage.getItem(PERSIST_STORAGE_KEY);
const raw =
payload && payload.trim() !== ""
? (JSON.parse(payload) as Record<string, unknown>)
: {};
const state = unwrapPersistedAppState(raw);
localStorage.setItem(
PERSIST_STORAGE_KEY,
JSON.stringify({
...raw,
state: {
...state,
...patch,
},
version:
typeof raw.version === "number" ? raw.version : PERSIST_VERSION,
}),
);
} catch {
// ignore
}
};
const resolveOceanBaseProtocol = (
raw: Record<string, unknown>,
normalizedConnectionParams: string,
@@ -2654,7 +2684,11 @@ export const useStore = create<AppState>()(
})),
setUiScale: (scale) => set({ uiScale: sanitizeUiScale(scale) }),
setFontSize: (size) => set({ fontSize: sanitizeFontSize(size) }),
setStartupFullscreen: (enabled) => set({ startupFullscreen: !!enabled }),
setStartupFullscreen: (enabled) => {
const nextValue = !!enabled;
set({ startupFullscreen: nextValue });
writePersistedStatePatch({ startupFullscreen: nextValue });
},
setGlobalProxy: (proxy) =>
set((state) => ({
globalProxy: sanitizeGlobalProxy({ ...state.globalProxy, ...proxy }),