Skip to content

Commit c0ea5bf

Browse files
authored
Merge pull request #38 from sustech-cs304/frontend
Merge current frontend steps
2 parents d323a90 + 762c8ba commit c0ea5bf

File tree

13 files changed

+551
-62
lines changed

13 files changed

+551
-62
lines changed

peachide/package-lock.json

Lines changed: 0 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

peachide/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
"next-themes": "^0.4.6",
3636
"object-hash": "^3.0.0",
3737
"react": "^19.0.0",
38-
"react-day-picker": "^8.10.1",
3938
"react-dom": "^19.0.0",
4039
"react-pdf": "^9.2.1",
4140
"react-resizable-panels": "^2.1.7",
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
"use client";
2+
import React, { createContext, useContext, useState, useEffect } from 'react';
3+
4+
interface UserContextType {
5+
token: string | null;
6+
userId: string | null;
7+
isAuthenticated: boolean;
8+
login: (token: string, userId: string) => void;
9+
logout: () => void;
10+
}
11+
12+
const UserContext = createContext<UserContextType>({
13+
token: null,
14+
userId: null,
15+
isAuthenticated: false,
16+
login: () => {},
17+
logout: () => {}
18+
});
19+
20+
export const useUserContext = () => useContext(UserContext);
21+
22+
export const UserProvider = ({ children }: { children: React.ReactNode }) => {
23+
const [token, setToken] = useState<string | null>(null);
24+
const [userId, setUserId] = useState<string | null>(null);
25+
26+
// Initialize from localStorage on client-side
27+
useEffect(() => {
28+
const storedToken = localStorage.getItem('token');
29+
const storedUserId = localStorage.getItem('userId');
30+
31+
if (storedToken && storedUserId) {
32+
setToken(storedToken);
33+
setUserId(storedUserId);
34+
}
35+
}, []);
36+
37+
const login = (newToken: string, newUserId: string) => {
38+
setToken(newToken);
39+
setUserId(newUserId);
40+
// Store in localStorage for persistence
41+
localStorage.setItem('token', newToken);
42+
localStorage.setItem('userId', newUserId);
43+
};
44+
45+
const logout = () => {
46+
setToken(null);
47+
setUserId(null);
48+
localStorage.removeItem('token');
49+
localStorage.removeItem('userId');
50+
};
51+
52+
return (
53+
<UserContext.Provider
54+
value={{
55+
token,
56+
userId,
57+
isAuthenticated: !!token,
58+
login,
59+
logout
60+
}}
61+
>
62+
{children}
63+
</UserContext.Provider>
64+
);
65+
};

0 commit comments

Comments
 (0)