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.ts57
1 files changed, 56 insertions, 1 deletions
diff --git a/fe/src/stores/auth.ts b/fe/src/stores/auth.ts
index 7e70cda..10e6bd3 100644
--- a/fe/src/stores/auth.ts
+++ b/fe/src/stores/auth.ts
@@ -1,4 +1,5 @@
1import type { Invalidator, Subscriber, Unsubscriber } from 'svelte/store'; 1import type { Invalidator, Subscriber, Unsubscriber } from 'svelte/store';
2import type { Preference } from '../types';
2import { writable, derived } from 'svelte/store'; 3import { writable, derived } from 'svelte/store';
3 4
4type Nullable<T> = T | null; 5type Nullable<T> = T | null;
@@ -14,6 +15,18 @@ interface TokenStore {
14 unauthenticate: () => void 15 unauthenticate: () => void
15} 16}
16 17
18
19interface UserStore {
20 subscribe: (run: Subscriber<Nullable<User>>, invalidate: Invalidator<Nullable<User>>) => Unsubscriber,
21 setUser: (user: User) => void,
22 reset: () => void
23}
24
25interface PreferenceStore {
26 subscribe: (run: Subscriber<Nullable<Preference>>, invalidate: Invalidator<Nullable<Preference>>) => Unsubscriber,
27 set: (this: void, value: Nullable<Preference>) => void
28}
29
17function createTokenStore(): TokenStore { 30function createTokenStore(): TokenStore {
18 const storedToken = localStorage.getItem("token"); 31 const storedToken = localStorage.getItem("token");
19 const { subscribe, set } = writable<string | null>(storedToken); 32 const { subscribe, set } = writable<string | null>(storedToken);
@@ -43,6 +56,48 @@ function onTokenChange ($token: Nullable<string>): boolean {
43 return $token ? true : false; 56 return $token ? true : false;
44} 57}
45 58
59function createUserStore(): UserStore {
60 const user = localStorage.getItem('user');
61 const userObj: Nullable<User> = user ? JSON.parse(user) : null;
62 const { subscribe, set } = writable<User | null>(userObj);
63
64 const setUser = (user: User) => {
65 localStorage.setItem('user', JSON.stringify(user));
66 set(user);
67 }
68
69 const reset = () => {
70 localStorage.removeItem('user');
71 set(null);
72 }
73
74 return {
75 subscribe,
76 setUser,
77 reset
78 }
79}
80
81
82function createPreferenceStore(): PreferenceStore {
83 const preferences = localStorage.getItem('preferences');
84 const preferenceObj: Preference = preferences ? JSON.parse(preferences) : {
85 color: "#FF0000",
86 size: {
87 size: 16,
88 unit: 'oz'
89 }
90 };
91
92 const { subscribe, set } = writable<Nullable<Preference>>(preferenceObj);
93
94 return {
95 subscribe,
96 set
97 }
98}
99
46export const token = createTokenStore(); 100export const token = createTokenStore();
47export const authenticated = derived(token, onTokenChange); 101export const authenticated = derived(token, onTokenChange);
48export const user = writable<User | null>(null); 102export const user = createUserStore();
103export const preferences = createPreferenceStore();