Spaces:
Runtime error
Runtime error
import type { StateCreator } from "zustand"; | |
import { create } from "zustand"; | |
import { createSelectors } from "./helpers"; | |
import type { Message } from "../types/message"; | |
import type { Task } from "../types/task"; | |
import { isTask, TASK_STATUS_COMPLETED, TASK_STATUS_EXECUTING } from "../types/task"; | |
export const isExistingTask = (message: Message): boolean => | |
isTask(message) && | |
(message.status === TASK_STATUS_EXECUTING || message.status === TASK_STATUS_COMPLETED); | |
const resetters: (() => void)[] = []; | |
const initialTaskState = { | |
tasks: [], | |
}; | |
export interface TaskSlice { | |
tasks: Task[]; | |
addTask: (newTask: Task) => void; | |
updateTask: (updatedTask: Task) => void; | |
deleteTask: (taskId: string) => void; | |
} | |
export const createTaskSlice: StateCreator<TaskSlice, [], [], TaskSlice> = (set) => { | |
resetters.push(() => set(initialTaskState)); | |
return { | |
...initialTaskState, | |
addTask: (newTask) => { | |
set((state) => ({ | |
...state, | |
tasks: [...state.tasks, { ...newTask }], | |
})); | |
}, | |
updateTask: (updatedTask) => { | |
set((state) => { | |
const updatedTasks = state.tasks.map((task) => { | |
if (task.id === updatedTask.id && task.taskId == updatedTask.taskId) { | |
return { | |
...updatedTask, | |
}; | |
} | |
return task; | |
}); | |
return { | |
...state, | |
tasks: updatedTasks, | |
}; | |
}); | |
}, | |
deleteTask: (taskId) => { | |
set((state) => ({ | |
...state, | |
tasks: state.tasks.filter((task) => task.taskId !== taskId), | |
})); | |
}, | |
}; | |
}; | |
export const useTaskStore = createSelectors( | |
create<TaskSlice>()((...a) => ({ | |
...createTaskSlice(...a), | |
})) | |
); | |
export const resetAllTaskSlices = () => resetters.forEach((resetter) => resetter()); | |