hippofish/packages/client/src/theme-store.ts

46 lines
1.1 KiB
TypeScript
Raw Normal View History

2024-03-30 17:30:50 +01:00
import type { Theme } from "./scripts/theme";
2024-03-16 16:49:12 +01:00
import { isSignedIn, me } from "@/me";
import { api } from "@/os";
2024-04-22 04:32:41 +02:00
const lsCacheKey = isSignedIn(me) ? `themes:${me.id}` : "";
export function getThemes(): Theme[] {
2023-01-13 05:40:33 +01:00
return JSON.parse(localStorage.getItem(lsCacheKey) || "[]");
}
export async function fetchThemes(): Promise<void> {
2024-04-22 04:32:41 +02:00
if (!isSignedIn(me)) return;
try {
2023-01-13 05:40:33 +01:00
const themes = await api("i/registry/get", {
scope: ["client"],
key: "themes",
});
localStorage.setItem(lsCacheKey, JSON.stringify(themes));
} catch (err) {
2023-01-13 05:40:33 +01:00
if (err.code === "NO_SUCH_KEY") return;
throw err;
}
}
export async function addTheme(theme: Theme): Promise<void> {
await fetchThemes();
const themes = getThemes().concat(theme);
2023-01-13 05:40:33 +01:00
await api("i/registry/set", {
scope: ["client"],
key: "themes",
value: themes,
});
localStorage.setItem(lsCacheKey, JSON.stringify(themes));
}
export async function removeTheme(theme: Theme): Promise<void> {
2023-01-13 05:40:33 +01:00
const themes = getThemes().filter((t) => t.id !== theme.id);
await api("i/registry/set", {
scope: ["client"],
key: "themes",
value: themes,
});
localStorage.setItem(lsCacheKey, JSON.stringify(themes));
}