Spaces:
Sleeping
Sleeping
| import React, { createContext, useContext, useState, ReactNode } from 'react'; | |
| import { User, UserRole, users } from '@/data/dummyData'; | |
| interface AuthContextType { | |
| user: User | null; | |
| login: (email: string, password: string) => boolean; | |
| logout: () => void; | |
| isAuthenticated: boolean; | |
| } | |
| const AuthContext = createContext<AuthContextType | undefined>(undefined); | |
| export function AuthProvider({ children }: { children: ReactNode }) { | |
| const [user, setUser] = useState<User | null>(() => { | |
| const saved = localStorage.getItem('shaphari_user'); | |
| return saved ? JSON.parse(saved) : null; | |
| }); | |
| const login = (email: string, password: string): boolean => { | |
| // Dummy authentication - in production, this would validate against a backend | |
| const foundUser = users.find(u => u.email.toLowerCase() === email.toLowerCase()); | |
| if (foundUser) { | |
| setUser(foundUser); | |
| localStorage.setItem('shaphari_user', JSON.stringify(foundUser)); | |
| return true; | |
| } | |
| return false; | |
| }; | |
| const logout = () => { | |
| setUser(null); | |
| localStorage.removeItem('shaphari_user'); | |
| }; | |
| return ( | |
| <AuthContext.Provider value={{ user, login, logout, isAuthenticated: !!user }}> | |
| {children} | |
| </AuthContext.Provider> | |
| ); | |
| } | |
| export function useAuth() { | |
| const context = useContext(AuthContext); | |
| if (context === undefined) { | |
| throw new Error('useAuth must be used within an AuthProvider'); | |
| } | |
| return context; | |
| } | |