repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
Projectflow
stars
latest
clone command
git clone gitlawb://did:key:z6Mkfh4Y...QBEi/projectflowgit clone gitlawb://did:key:z6Mkfh4Y.../projectflowb3cded1async from playground1d ago| #1 | import { StateCreator } from "zustand"; |
| #2 | import type { Project } from "../../../domain/entities"; |
| #3 | import { projects as initialProjects } from "../../../infrastructure/mock-data/projects"; |
| #4 | import { generateId } from "../../../infrastructure/helpers"; |
| #5 | import type { StoreState } from "../store.types"; |
| #6 | |
| #7 | export interface ProjectSlice { |
| #8 | projects: Project[]; |
| #9 | currentProject: Project | null; |
| #10 | setCurrentProject: (id: string) => void; |
| #11 | createProject: (project: Omit<Project, "id">) => Project; |
| #12 | updateProject: (id: string, updates: Partial<Project>) => void; |
| #13 | deleteProject: (id: string) => void; |
| #14 | } |
| #15 | |
| #16 | export const createProjectSlice: StateCreator< |
| #17 | StoreState, |
| #18 | [], |
| #19 | [], |
| #20 | ProjectSlice |
| #21 | > = (set, get) => ({ |
| #22 | projects: initialProjects, |
| #23 | currentProject: initialProjects[0], |
| #24 | setCurrentProject: (id: string) => { |
| #25 | const p = get().projects.find((proj) => proj.id === id); |
| #26 | if (p) set({ currentProject: p }); |
| #27 | }, |
| #28 | createProject: (project) => { |
| #29 | const newProject = { ...project, id: generateId() }; |
| #30 | set((s) => ({ projects: [...s.projects, newProject] })); |
| #31 | return newProject; |
| #32 | }, |
| #33 | updateProject: (id, updates) => { |
| #34 | set((s) => ({ |
| #35 | projects: s.projects.map((p) => |
| #36 | p.id === id ? { ...p, ...updates } : p |
| #37 | ), |
| #38 | currentProject: |
| #39 | s.currentProject?.id === id |
| #40 | ? { ...s.currentProject, ...updates } |
| #41 | : s.currentProject, |
| #42 | })); |
| #43 | }, |
| #44 | deleteProject: (id) => { |
| #45 | set((s) => ({ |
| #46 | projects: s.projects.filter((p) => p.id !== id), |
| #47 | issues: s.issues.filter((i) => i.projectId !== id), |
| #48 | sprints: s.sprints.filter((sp) => sp.projectId !== id), |
| #49 | currentProject: |
| #50 | s.currentProject?.id === id ? s.projects[0] : s.currentProject, |
| #51 | })); |
| #52 | }, |
| #53 | }); |
| #54 |