테마 설정 local storage 설정하도록 수정

This commit is contained in:
Macbook
2026-06-03 11:24:38 +09:00
parent f6ae4e6c6d
commit 5ced979212
4 changed files with 69 additions and 17 deletions
+41
View File
@@ -0,0 +1,41 @@
import type { Theme } from '../types';
const STORAGE_KEY = 'gc_local_theme';
const VALID: readonly Theme[] = ['dark', 'light', 'blue'];
function isTheme(v: unknown): v is Theme {
return typeof v === 'string' && (VALID as readonly string[]).includes(v);
}
/** 이 브라우저(기기)에 저장된 UI 테마. 계정·DB와 무관 */
export function loadLocalTheme(): Theme {
try {
const raw = localStorage.getItem(STORAGE_KEY);
if (isTheme(raw)) return raw;
} catch {
/* private mode 등 */
}
return 'dark';
}
export function saveLocalTheme(theme: Theme): void {
try {
localStorage.setItem(STORAGE_KEY, theme);
} catch {
/* quota / private mode */
}
}
/** localStorage에 없을 때만 DB defaultTheme을 이 기기에 1회 복사 */
export function migrateDbThemeToLocalIfNeeded(dbTheme: string | undefined): Theme {
try {
const existing = localStorage.getItem(STORAGE_KEY);
if (isTheme(existing)) return existing;
} catch {
/* ignore */
}
const theme: Theme = isTheme(dbTheme) ? dbTheme : 'dark';
saveLocalTheme(theme);
return theme;
}