Allow updating task status on the task list pagel (#20)
Some checks failed
Check / Backend (push) Successful in 22m23s
Check / Frontend (push) Successful in 2m6s
Docker Build / Build and Push Frontend Image (push) Failing after -14s
Docker Build / Build and Push Backend Image (push) Failing after 11m18s

Reviewed-on: #20
Co-authored-by: Drew Galbraith <drew@tiramisu.one>
Co-committed-by: Drew Galbraith <drew@tiramisu.one>
This commit is contained in:
Drew 2025-10-28 05:01:46 +00:00 committed by Drew
parent 4552c347c6
commit 15fabd126e
2 changed files with 171 additions and 7 deletions

View file

@ -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,