Spaces:
Sleeping
Sleeping
File size: 2,057 Bytes
3c4a809 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | import { createContext, useContext, useState, useEffect, useCallback } from 'react'
const ProjectContext = createContext(null)
export function ProjectProvider({ children }) {
const [projects, setProjects] = useState([])
const [activeProject, setActiveProject] = useState(null)
const [loading, setLoading] = useState(true)
const base = import.meta.env.DEV ? '/api' : ''
const fetchProjects = useCallback(async () => {
const token = localStorage.getItem('leadgen_token')
if (!token) { setLoading(false); return }
try {
const res = await fetch(`${base}/projects`, { headers: { Authorization: `Bearer ${token}` } })
if (res.ok) {
const data = await res.json()
setProjects(data)
// Restore last active project from localStorage
const savedId = localStorage.getItem('activeProjectId')
if (savedId) {
const found = data.find(p => p.id === parseInt(savedId))
if (found) setActiveProject(found)
}
}
} catch {}
setLoading(false)
}, [base])
useEffect(() => { fetchProjects() }, [fetchProjects])
const selectProject = (project) => {
setActiveProject(project)
if (project) localStorage.setItem('activeProjectId', project.id)
else localStorage.removeItem('activeProjectId')
}
const addProject = (project) => {
setProjects(prev => [project, ...prev])
}
const updateProject = (updated) => {
setProjects(prev => prev.map(p => p.id === updated.id ? updated : p))
if (activeProject?.id === updated.id) setActiveProject(updated)
}
const removeProject = (id) => {
setProjects(prev => prev.filter(p => p.id !== id))
if (activeProject?.id === id) { setActiveProject(null); localStorage.removeItem('activeProjectId') }
}
return (
<ProjectContext.Provider value={{ projects, activeProject, loading, selectProject, addProject, updateProject, removeProject, fetchProjects }}>
{children}
</ProjectContext.Provider>
)
}
export function useProject() {
return useContext(ProjectContext)
}
|