Files
local/frontend/lib/data-store.tsx
2025-12-01 02:29:08 +01:00

77 lines
2.4 KiB
TypeScript

"use client"
import { createContext, useContext, useState, type ReactNode } from "react"
import type { Project, StackCategory } from "./types"
import { mockProjects, mockStackCategories } from "./mock-data"
interface DataStore {
projects: Project[]
stackCategories: StackCategory[]
// Project CRUD
addProject: (project: Omit<Project, "id">) => void
updateProject: (id: string, project: Partial<Project>) => void
deleteProject: (id: string) => void
// Stack CRUD
addStackCategory: (category: Omit<StackCategory, "id">) => void
updateStackCategory: (id: string, category: Partial<StackCategory>) => void
deleteStackCategory: (id: string) => void
}
const DataStoreContext = createContext<DataStore | null>(null)
export function DataStoreProvider({ children }: { children: ReactNode }) {
const [projects, setProjects] = useState<Project[]>(mockProjects)
const [stackCategories, setStackCategories] = useState<StackCategory[]>(mockStackCategories)
const addProject = (project: Omit<Project, "id">) => {
const newProject = { ...project, id: crypto.randomUUID() }
setProjects((prev) => [...prev, newProject])
}
const updateProject = (id: string, updates: Partial<Project>) => {
setProjects((prev) => prev.map((p) => (p.id === id ? { ...p, ...updates } : p)))
}
const deleteProject = (id: string) => {
setProjects((prev) => prev.filter((p) => p.id !== id))
}
const addStackCategory = (category: Omit<StackCategory, "id">) => {
const newCategory = { ...category, id: crypto.randomUUID() }
setStackCategories((prev) => [...prev, newCategory])
}
const updateStackCategory = (id: string, updates: Partial<StackCategory>) => {
setStackCategories((prev) => prev.map((c) => (c.id === id ? { ...c, ...updates } : c)))
}
const deleteStackCategory = (id: string) => {
setStackCategories((prev) => prev.filter((c) => c.id !== id))
}
return (
<DataStoreContext.Provider
value={{
projects,
stackCategories,
addProject,
updateProject,
deleteProject,
addStackCategory,
updateStackCategory,
deleteStackCategory,
}}
>
{children}
</DataStoreContext.Provider>
)
}
export function useDataStore() {
const context = useContext(DataStoreContext)
if (!context) {
throw new Error("useDataStore must be used within a DataStoreProvider")
}
return context
}