-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstore.tsx
More file actions
117 lines (104 loc) · 3.35 KB
/
store.tsx
File metadata and controls
117 lines (104 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { Store, registerInDevtools } from "pullstate";
import {
onAuthStateChanged,
signInWithEmailAndPassword,
createUserWithEmailAndPassword,
signOut,
updateProfile,
User,
AuthError,
} from "firebase/auth";
import { app, auth } from "@/services/firebaseconfig";
interface AuthStoreType {
isLoggedIn: boolean;
initialized: boolean;
user: User | null;
}
export const AuthStore = new Store<AuthStoreType>({
isLoggedIn: false,
initialized: false,
user: null,
});
const unsub = onAuthStateChanged(auth, (user: User | null) => {
console.log("onAuthStateChange", user);
AuthStore.update((store) => {
store.user = user;
store.isLoggedIn = !!user;
store.initialized = true;
});
});
export const appSignIn = async (email: string, password: string): Promise<{ user: User | null; error?: AuthError }> => {
try {
const resp = await signInWithEmailAndPassword(auth, email, password);
AuthStore.update((store) => {
store.user = resp.user;
store.isLoggedIn = !!resp.user;
});
return { user: auth.currentUser };
} catch (e) {
return { user: null, error: e as AuthError }; // Include user: null here
}
};
export const appSignOut = async (): Promise<{ user: null; error?: AuthError }> => {
try {
await signOut(auth);
AuthStore.update((store) => {
store.user = null;
store.isLoggedIn = false;
});
return { user: null };
} catch (e) {
return { user: null, error: e as AuthError }; // Include user: null here
}
};
export const appSignUp = async (email: string, password: string, displayName: string): Promise<{ user: User | null; error?: AuthError }> => {
try {
const resp = await createUserWithEmailAndPassword(auth, email, password);
await updateProfile(resp.user, { displayName });
AuthStore.update((store) => {
store.user = auth.currentUser;
store.isLoggedIn = true;
});
return { user: auth.currentUser };
} catch (e) {
return { user: null, error: e as AuthError };
}
};
// export const appSignIn = async (email: string, password: string): Promise<{ user: User | null; error?: AuthError }> => {
// try {
// const resp = await signInWithEmailAndPassword(auth, email, password);
// AuthStore.update((store) => {
// store.user = resp.user;
// store.isLoggedIn = !!resp.user;
// });
// return { user: auth.currentUser };
// } catch (e) {
// return { error: e as AuthError };
// }
// };
// export const appSignOut = async (): Promise<{ user: null; error?: AuthError }> => {
// try {
// await signOut(auth);
// AuthStore.update((store) => {
// store.user = null;
// store.isLoggedIn = false;
// });
// return { user: null };
// } catch (e) {
// return { error: e as AuthError };
// }
// };
// export const appSignUp = async (email: string, password: string, displayName: string): Promise<{ user: User | null; error?: AuthError }> => {
// try {
// const resp = await createUserWithEmailAndPassword(auth, email, password);
// await updateProfile(resp.user, { displayName });
// AuthStore.update((store) => {
// store.user = auth.currentUser;
// store.isLoggedIn = true;
// });
// return { user: auth.currentUser };
// } catch (e) {
// return { error: e as AuthError };
// }
// };
registerInDevtools({ AuthStore });