Add kanban board view, project creation, and task assignment
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
import { create } from 'zustand';
|
||||
import type { Task, TaskCreate, TaskUpdate, Project, Label } from '@/types';
|
||||
import type { Task, TaskCreate, TaskUpdate, Project, Label, User } from '@/types';
|
||||
import { api } from '@/lib/api';
|
||||
|
||||
interface TasksState {
|
||||
tasks: Task[];
|
||||
projects: Project[];
|
||||
labels: Label[];
|
||||
users: User[];
|
||||
isLoading: boolean;
|
||||
|
||||
// Selected items
|
||||
@@ -17,11 +18,13 @@ interface TasksState {
|
||||
fetchTasks: (params?: Parameters<typeof api.getTasks>[0]) => Promise<void>;
|
||||
fetchProjects: () => Promise<void>;
|
||||
fetchLabels: () => Promise<void>;
|
||||
fetchUsers: () => Promise<void>;
|
||||
|
||||
createTask: (data: TaskCreate) => Promise<Task>;
|
||||
updateTask: (id: string, data: TaskUpdate) => Promise<void>;
|
||||
deleteTask: (id: string) => Promise<void>;
|
||||
toggleComplete: (id: string) => Promise<void>;
|
||||
createProject: (data: { name: string; color?: string; icon?: string }) => Promise<Project>;
|
||||
|
||||
setSelectedTask: (task: Task | null) => void;
|
||||
setActiveProject: (projectId: string | null) => void;
|
||||
@@ -32,6 +35,7 @@ export const useTasksStore = create<TasksState>((set, get) => ({
|
||||
tasks: [],
|
||||
projects: [],
|
||||
labels: [],
|
||||
users: [],
|
||||
isLoading: false,
|
||||
selectedTask: null,
|
||||
activeProjectId: null,
|
||||
@@ -66,6 +70,15 @@ export const useTasksStore = create<TasksState>((set, get) => ({
|
||||
}
|
||||
},
|
||||
|
||||
fetchUsers: async () => {
|
||||
try {
|
||||
const users = await api.getUsers();
|
||||
set({ users });
|
||||
} catch (error) {
|
||||
console.error('Failed to fetch users:', error);
|
||||
}
|
||||
},
|
||||
|
||||
createTask: async (data) => {
|
||||
const task = await api.createTask(data);
|
||||
set((state) => ({ tasks: [task, ...state.tasks] }));
|
||||
@@ -90,6 +103,12 @@ export const useTasksStore = create<TasksState>((set, get) => ({
|
||||
}));
|
||||
},
|
||||
|
||||
createProject: async (data) => {
|
||||
const project = await api.createProject(data);
|
||||
set((state) => ({ projects: [...state.projects, project] }));
|
||||
return project;
|
||||
},
|
||||
|
||||
toggleComplete: async (id) => {
|
||||
const task = get().tasks.find((t) => t.id === id);
|
||||
if (!task) return;
|
||||
|
||||
Reference in New Issue
Block a user