import { ReactNode } from "@tanstack/react-router"; import { createContext, useState } from "react"; interface AuthContextType { user: { id: string; name: string; permissions: string[]; role: string; } | null; accessToken: string | null; saveAuthData: ( userData: { id: string; name: string; permissions: string[]; role: string }, accessToken?: string ) => void; clearAuthData: () => void; checkPermission: (permission: string) => boolean; isAuthenticated: boolean; } export const AuthContext = createContext( undefined ); export function AuthProvider({ children }: { children: ReactNode }) { const [userId, setUserId] = useState(null); const [userName, setUserName] = useState(null); const [permissions, setPermissions] = useState(null); const [role, setRole] = useState(null); const [accessToken, setAccessToken] = useState( localStorage.getItem("accessToken") ); const saveAuthData = ( userData: NonNullable, accessToken?: NonNullable ) => { setUserId(userData.id); setUserName(userData.name); setPermissions(userData.permissions); setRole(userData.role); if (accessToken) { setAccessToken(accessToken); localStorage.setItem("accessToken", accessToken); } }; const clearAuthData = () => { setUserId(null); setUserName(null); setPermissions(null); setRole(null); setAccessToken(null); localStorage.removeItem("accessToken"); }; const checkPermission = (permission: string) => { return permissions?.includes(permission) ?? false; }; const isAuthenticated = Boolean(accessToken); return ( {children} ); }