DocDoeAI / src /components /tuition /tuitionSetupPersistence.ts
asnannp's picture
deploy: sync backend to Space root (learn-lesson HF cache fix)
65d68f5
Raw History Blame Contribute Delete
2.15 kB
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);
}