File size: 2,154 Bytes
65d68f5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import { getTuitionProfileRemote, saveTuitionProfileRemote } from "@/lib/api/tuition-profile";
import { defaultTuitionSetup, normalizeTuitionSetup, TUITION_SETUP_STORAGE_KEY, type TuitionSetup } from "./tuitionModel";
type StoredTuitionState = {
setup?: Partial<TuitionSetup>;
selectedSourceId?: string | null;
completedTaskIds?: string[];
};
function parseStoredSetup(raw: string | null): Partial<TuitionSetup> | null {
if (!raw) return null;
try {
const parsed = JSON.parse(raw) as StoredTuitionState | Partial<TuitionSetup>;
if (parsed && typeof parsed === "object" && "setup" in parsed) {
return (parsed as StoredTuitionState).setup ?? null;
}
return parsed as Partial<TuitionSetup>;
} catch {
return null;
}
}
export function readLocalTuitionSetup(fallback: TuitionSetup = defaultTuitionSetup): TuitionSetup {
if (typeof window === "undefined") return normalizeTuitionSetup(null, fallback);
const stored = parseStoredSetup(window.localStorage.getItem(TUITION_SETUP_STORAGE_KEY));
return normalizeTuitionSetup(stored, fallback);
}
export function writeLocalTuitionSetup(setup: TuitionSetup): void {
if (typeof window === "undefined") return;
try {
const raw = window.localStorage.getItem(TUITION_SETUP_STORAGE_KEY);
const existing = raw ? (JSON.parse(raw) as StoredTuitionState | TuitionSetup) : null;
const next =
existing && typeof existing === "object" && "setup" in existing
? { ...existing, setup }
: { setup };
window.localStorage.setItem(TUITION_SETUP_STORAGE_KEY, JSON.stringify(next));
} catch {
window.localStorage.setItem(TUITION_SETUP_STORAGE_KEY, JSON.stringify({ setup }));
}
}
export async function hydrateTuitionSetup(fallback: TuitionSetup = defaultTuitionSetup): Promise<TuitionSetup> {
const local = readLocalTuitionSetup(fallback);
const remote = await getTuitionProfileRemote();
const setup = remote ?? local;
writeLocalTuitionSetup(setup);
return setup;
}
export async function persistTuitionSetup(setup: TuitionSetup): Promise<boolean> {
writeLocalTuitionSetup(setup);
return saveTuitionProfileRemote(setup);
}
|