aboutsummaryrefslogtreecommitdiff
path: root/fe/src/stores/auth.ts
diff options
context:
space:
mode:
Diffstat (limited to 'fe/src/stores/auth.ts')
-rw-r--r--fe/src/stores/auth.ts90
1 files changed, 90 insertions, 0 deletions
diff --git a/fe/src/stores/auth.ts b/fe/src/stores/auth.ts
new file mode 100644
index 0000000..63f027e
--- /dev/null
+++ b/fe/src/stores/auth.ts
@@ -0,0 +1,90 @@
1import type { Preference, TokenStore, Nullable, UserStore, User, PreferenceStore } from "../types";
2import { writable, derived } from "svelte/store";
3
4
5function createTokenStore(): TokenStore {
6 const storedToken = localStorage.getItem("token");
7 const { subscribe, set } = writable<string | null>(storedToken);
8
9 function authenticate(newToken: string): void {
10 try {
11 localStorage.setItem("token", newToken);
12 set(newToken);
13 } catch (e) {
14 console.error("error", e);
15 }
16 }
17
18 function unauthenticate(): void {
19 localStorage.removeItem("token");
20 set(null);
21 }
22
23 return {
24 subscribe,
25 authenticate,
26 unauthenticate
27 };
28}
29
30function onTokenChange($token: Nullable<string>): boolean {
31 return $token ? true : false;
32}
33
34function createUserStore(): UserStore {
35 const user = localStorage.getItem("user");
36 const userObj: Nullable<User> = user ? JSON.parse(user) : null;
37 const { subscribe, set } = writable<User | null>(userObj);
38
39 const setUser = (user: User) => {
40 localStorage.setItem("user", JSON.stringify(user));
41 set(user);
42 };
43
44 const reset = () => {
45 localStorage.removeItem("user");
46 set(null);
47 };
48
49 return {
50 subscribe,
51 setUser,
52 reset
53 };
54}
55
56
57function createPreferenceStore(): PreferenceStore {
58 const preferences = localStorage.getItem("preferences");
59 const preferenceObj: Preference = preferences ? JSON.parse(preferences) : {
60 id: 0,
61 color: "#FF0000",
62 size_id: 0,
63 user_id: 0
64 };
65
66 const { subscribe, set, update } = writable<Nullable<Preference>>(preferenceObj);
67
68 const setPreference = (preference: Preference) => {
69 localStorage.setItem("preference", JSON.stringify(preference));
70 set(preference);
71 };
72
73 const reset = () => {
74 localStorage.removeItem("preference");
75 set(null);
76 };
77
78 return {
79 set,
80 subscribe,
81 reset,
82 update,
83 setPreference,
84 };
85}
86
87export const token = createTokenStore();
88export const authenticated = derived(token, onTokenChange);
89export const user = createUserStore();
90export const preferences = createPreferenceStore();