mirror of
https://github.com/ForFarmTeam/ForFarm.git
synced 2025-12-19 22:14:08 +01:00
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
"use client";
|
|
|
|
import React, { createContext, useContext, useState, useEffect, ReactNode } from "react";
|
|
|
|
interface SessionContextType {
|
|
token: string | null;
|
|
user: any | null;
|
|
setToken: (token: string | null) => void;
|
|
setUser: (user: any | null) => void;
|
|
}
|
|
|
|
const SessionContext = createContext<SessionContextType | undefined>(undefined);
|
|
|
|
interface SessionProviderProps {
|
|
children: ReactNode;
|
|
}
|
|
|
|
export function SessionProvider({ children }: SessionProviderProps) {
|
|
const [token, setTokenState] = useState<string | null>(null);
|
|
const [user, setUserState] = useState<any | null>(null);
|
|
|
|
const setToken = (newToken: string | null) => {
|
|
if (newToken) {
|
|
localStorage.setItem("token", newToken);
|
|
} else {
|
|
localStorage.removeItem("token");
|
|
}
|
|
setTokenState(newToken);
|
|
};
|
|
|
|
const setUser = (newUser: any | null) => {
|
|
if (newUser) {
|
|
localStorage.setItem("user", JSON.stringify(newUser));
|
|
} else {
|
|
localStorage.removeItem("user");
|
|
}
|
|
setUserState(newUser);
|
|
};
|
|
|
|
useEffect(() => {
|
|
const storedToken = localStorage.getItem("token");
|
|
const storedUser = localStorage.getItem("user");
|
|
if (storedToken) {
|
|
setTokenState(storedToken);
|
|
}
|
|
if (storedUser) {
|
|
try {
|
|
setUserState(JSON.parse(storedUser));
|
|
} catch (error) {
|
|
console.error("Failed to parse stored user.", error);
|
|
}
|
|
}
|
|
}, []);
|
|
|
|
return <SessionContext.Provider value={{ token, user, setToken, setUser }}>{children}</SessionContext.Provider>;
|
|
}
|