Initial LinkedSign platform

This commit is contained in:
2026-04-06 20:33:59 -05:00
commit 1074c7c9d2
159 changed files with 19072 additions and 0 deletions
+58
View File
@@ -0,0 +1,58 @@
import { createContext, useContext, useState, useEffect, useCallback } from 'react';
import { login as apiLogin, logout as apiLogout, getMe } from '../api/auth';
import { updateSignatureAppearancePreference as apiUpdateSignatureAppearancePreference } from '../api/users';
const AuthContext = createContext(null);
export function AuthProvider({ children }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const token = localStorage.getItem('accessToken');
if (token) {
getMe()
.then(({ data }) => setUser(data.data.user))
.catch(() => {
localStorage.removeItem('accessToken');
localStorage.removeItem('refreshToken');
})
.finally(() => setLoading(false));
} else {
setLoading(false);
}
}, []);
const login = useCallback(async (email, password) => {
const { data } = await apiLogin({ email, password });
const { accessToken, refreshToken, user: userData } = data.data;
localStorage.setItem('accessToken', accessToken);
localStorage.setItem('refreshToken', refreshToken);
setUser(userData);
return userData;
}, []);
const logout = useCallback(async () => {
const refreshToken = localStorage.getItem('refreshToken');
try { await apiLogout(refreshToken); } catch { /* ignore */ }
localStorage.removeItem('accessToken');
localStorage.removeItem('refreshToken');
setUser(null);
}, []);
const updateSignatureAppearancePreference = useCallback(async (signaturePreferences) => {
const { data } = await apiUpdateSignatureAppearancePreference(signaturePreferences);
setUser((currentUser) => currentUser
? { ...currentUser, signaturePreferences: data.data.signaturePreferences }
: currentUser);
return data.data.signaturePreferences;
}, []);
return (
<AuthContext.Provider value={{ user, loading, login, logout, updateSignatureAppearancePreference }}>
{children}
</AuthContext.Provider>
);
}
export const useAuth = () => useContext(AuthContext);