Allow updating task status.
This commit is contained in:
parent
4552c347c6
commit
a41611a86f
2 changed files with 171 additions and 7 deletions
|
|
@ -1,5 +1,10 @@
|
|||
import { useState, useCallback, useEffect } from 'react'
|
||||
import type { Task, CreateTaskRequest, ApiError } from '~/types/task'
|
||||
import type {
|
||||
Task,
|
||||
CreateTaskRequest,
|
||||
UpdateTaskRequest,
|
||||
ApiError,
|
||||
} from '~/types/task'
|
||||
import { TaskStatus } from '~/types/task'
|
||||
import { apiClient } from '~/services/api'
|
||||
|
||||
|
|
@ -13,6 +18,7 @@ interface UseTasksState {
|
|||
interface UseTasksActions {
|
||||
fetchTasks: () => Promise<void>
|
||||
createTask: (data: CreateTaskRequest) => Promise<Task | null>
|
||||
updateTask: (id: string, data: UpdateTaskRequest) => Promise<Task | null>
|
||||
deleteTask: (id: string) => Promise<boolean>
|
||||
refreshTasks: () => Promise<void>
|
||||
clearError: () => void
|
||||
|
|
@ -91,6 +97,30 @@ export function useTasks(
|
|||
[]
|
||||
)
|
||||
|
||||
const updateTask = useCallback(
|
||||
async (id: string, data: UpdateTaskRequest): Promise<Task | null> => {
|
||||
try {
|
||||
const updatedTask = await apiClient.updateTask(id, data)
|
||||
|
||||
// Update the task in the local state immediately
|
||||
setState(prev => ({
|
||||
...prev,
|
||||
tasks: prev.tasks.map(task => (task.id === id ? updatedTask : task)),
|
||||
}))
|
||||
|
||||
return updatedTask
|
||||
} catch (error) {
|
||||
const apiError = error as ApiError
|
||||
setState(prev => ({
|
||||
...prev,
|
||||
error: apiError.message,
|
||||
}))
|
||||
return null
|
||||
}
|
||||
},
|
||||
[]
|
||||
)
|
||||
|
||||
const deleteTask = useCallback(async (id: string): Promise<boolean> => {
|
||||
try {
|
||||
await apiClient.deleteTask(id)
|
||||
|
|
@ -176,6 +206,7 @@ export function useTasks(
|
|||
...state,
|
||||
fetchTasks,
|
||||
createTask,
|
||||
updateTask,
|
||||
deleteTask,
|
||||
refreshTasks,
|
||||
clearError,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue