56 lines
1.3 KiB
TypeScript
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();
|