Spaces:
Runtime error
Runtime error
File size: 1,814 Bytes
cd6f98e |
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 64 65 66 67 68 69 70 |
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());
|