diff options
Diffstat (limited to 'fe/src/stores/auth.ts')
-rw-r--r-- | fe/src/stores/auth.ts | 57 |
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 @@ | |||
1 | import type { Invalidator, Subscriber, Unsubscriber } from 'svelte/store'; | 1 | import type { Invalidator, Subscriber, Unsubscriber } from 'svelte/store'; |
2 | import type { Preference } from '../types'; | ||
2 | import { writable, derived } from 'svelte/store'; | 3 | import { writable, derived } from 'svelte/store'; |
3 | 4 | ||
4 | type Nullable<T> = T | null; | 5 | type Nullable<T> = T | null; |
@@ -14,6 +15,18 @@ interface TokenStore { | |||
14 | unauthenticate: () => void | 15 | unauthenticate: () => void |
15 | } | 16 | } |
16 | 17 | ||
18 | |||
19 | interface UserStore { | ||
20 | subscribe: (run: Subscriber<Nullable<User>>, invalidate: Invalidator<Nullable<User>>) => Unsubscriber, | ||
21 | setUser: (user: User) => void, | ||
22 | reset: () => void | ||
23 | } | ||
24 | |||
25 | interface PreferenceStore { | ||
26 | subscribe: (run: Subscriber<Nullable<Preference>>, invalidate: Invalidator<Nullable<Preference>>) => Unsubscriber, | ||
27 | set: (this: void, value: Nullable<Preference>) => void | ||
28 | } | ||
29 | |||
17 | function createTokenStore(): TokenStore { | 30 | function 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 | ||
59 | function 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 | |||
82 | function 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 | |||
46 | export const token = createTokenStore(); | 100 | export const token = createTokenStore(); |
47 | export const authenticated = derived(token, onTokenChange); | 101 | export const authenticated = derived(token, onTokenChange); |
48 | export const user = writable<User | null>(null); | 102 | export const user = createUserStore(); |
103 | export const preferences = createPreferenceStore(); | ||