'use client' import { useOptimistic, useTransition } from 'react' import { toast } from 'sonner' import { toggleActionPlanTaskAction } from '@/app/(campaign)/campanha/(app)/planos/[slug]/taskActions' import { Checkbox } from '@/components/ui/Checkbox' import { formatBahiaDateTimeLabel } from '@/utilities/campaignTime' import type { ActionPlanTaskViewModel } from '@/utilities/actionPlanViewModels' type ActionPlanTaskChecklistProps = { planId: number tasks: ActionPlanTaskViewModel[] } export const ActionPlanTaskChecklist = ({ planId, tasks }: ActionPlanTaskChecklistProps) => { const [isPending, startTransition] = useTransition() const [optimisticTasks, setOptimisticDone] = useOptimistic( tasks, (currentTasks, { taskId, done }: { taskId: string; done: boolean }) => currentTasks.map((task) => (task.id === taskId ? { ...task, done } : task)), ) const toggle = (taskId: string | null, done: boolean) => { if (!taskId) return startTransition(async () => { setOptimisticDone({ taskId, done }) const result = await toggleActionPlanTaskAction(planId, taskId, done) // On failure the optimistic state rolls back automatically when the // transition ends (the action does not revalidate on error). if (!result.ok) toast.error(result.message) }) } if (!optimisticTasks.length) { return
Nenhuma tarefa cadastrada.
} return (