From 4b4e37d4fd596f33b6e04370fbc7aa0af841b461 Mon Sep 17 00:00:00 2001 From: Supra4E8C Date: Mon, 30 Mar 2026 13:19:57 +0800 Subject: [PATCH] fix(auth-files): persist auth files UI state in localStorage --- src/features/authFiles/uiState.ts | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/features/authFiles/uiState.ts b/src/features/authFiles/uiState.ts index 5631fae..403b00d 100644 --- a/src/features/authFiles/uiState.ts +++ b/src/features/authFiles/uiState.ts @@ -21,13 +21,23 @@ const AUTH_FILES_SORT_MODE_SET = new Set(AUTH_FILES_SORT_MODE export const isAuthFilesSortMode = (value: unknown): value is AuthFilesSortMode => typeof value === 'string' && AUTH_FILES_SORT_MODE_SET.has(value as AuthFilesSortMode); +const readAuthFilesUiStateFromStorage = ( + storage: Pick | null | undefined +): AuthFilesUiState | null => { + if (!storage) return null; + const raw = storage.getItem(AUTH_FILES_UI_STATE_KEY); + if (!raw) return null; + const parsed = JSON.parse(raw) as AuthFilesUiState; + return parsed && typeof parsed === 'object' ? parsed : null; +}; + export const readAuthFilesUiState = (): AuthFilesUiState | null => { if (typeof window === 'undefined') return null; try { - const raw = window.sessionStorage.getItem(AUTH_FILES_UI_STATE_KEY); - if (!raw) return null; - const parsed = JSON.parse(raw) as AuthFilesUiState; - return parsed && typeof parsed === 'object' ? parsed : null; + return ( + readAuthFilesUiStateFromStorage(window.localStorage) ?? + readAuthFilesUiStateFromStorage(window.sessionStorage) + ); } catch { return null; } @@ -36,7 +46,12 @@ export const readAuthFilesUiState = (): AuthFilesUiState | null => { export const writeAuthFilesUiState = (state: AuthFilesUiState) => { if (typeof window === 'undefined') return; try { - window.sessionStorage.setItem(AUTH_FILES_UI_STATE_KEY, JSON.stringify(state)); + window.localStorage.setItem(AUTH_FILES_UI_STATE_KEY, JSON.stringify(state)); + } catch { + // ignore + } + try { + window.sessionStorage.removeItem(AUTH_FILES_UI_STATE_KEY); } catch { // ignore }