fyp/webpage/src/routes/UserStore.svelte.ts

56 lines
1.3 KiB
TypeScript

import { goto } from "$app/navigation";
type User = {
token: string,
id: string,
user_type: number,
username: string,
email: string,
};
export function createUserStore() {
let user = $state<User | undefined>(undefined);
function getValue() {
if (user == undefined) {
let storage = localStorage.getItem('user');
if (storage) {
try {
user = JSON.parse(storage);
} catch {
user = undefined;
}
}
}
return user;
}
return {
get user() {
return getValue();
},
set user(value: User | undefined) {
if (value) {
localStorage.setItem('user', JSON.stringify(value));
} else {
localStorage.removeItem('user');
}
user = value;
},
checkUser(pathOnFail: string, level?: number) {
if (user && user.level > (level ?? 2) ) {
goto(pathOnFail);
return true;
}
return false;
},
isLogin() {
if (getValue()) return true;
return false;
}
}
}
export const userStore = createUserStore();