import type { Preference, TokenStore, Nullable, UserStore, User, PreferenceStore } from "../types"; import { writable, derived } from "svelte/store"; function createTokenStore(): TokenStore { const storedToken = localStorage.getItem("token"); const { subscribe, set } = writable(storedToken); function authenticate(newToken: string): void { try { localStorage.setItem("token", newToken); set(newToken); } catch (e) { console.error("error", e); } } function unauthenticate(): void { localStorage.removeItem("token"); set(null); } return { subscribe, authenticate, unauthenticate }; } function onTokenChange($token: Nullable): boolean { return $token ? true : false; } function createUserStore(): UserStore { const user = localStorage.getItem("user"); const userObj: Nullable = user ? JSON.parse(user) : null; const { subscribe, set } = writable(userObj); const setUser = (user: User) => { localStorage.setItem("user", JSON.stringify(user)); set(user); }; const reset = () => { localStorage.removeItem("user"); set(null); }; return { subscribe, setUser, reset }; } function createPreferenceStore(): PreferenceStore { const preferences = localStorage.getItem("preferences"); const preferenceObj: Preference = preferences ? JSON.parse(preferences) : { id: 0, color: "#FF0000", size_id: 0, user_id: 0 }; const { subscribe, set, update } = writable>(preferenceObj); const setPreference = (preference: Preference) => { localStorage.setItem("preference", JSON.stringify(preference)); set(preference); }; const reset = () => { localStorage.removeItem("preference"); set(null); }; return { set, subscribe, reset, update, setPreference, }; } export const token = createTokenStore(); export const authenticated = derived(token, onTokenChange); export const user = createUserStore(); export const preferences = createPreferenceStore();