'use client' import { useOptimistic, useTransition } from 'react' import { toast } from 'sonner' import { toggleActivityTaskAction } from '@/app/(campaign)/campanha/(app)/atividades/[slug]/taskActions' import { Checkbox } from '@/components/ui/Checkbox' import { formatBahiaDateTimeLabel } from '@/lib/campaignTime' import type { ActivityTaskViewModel } from '@/utilities/activityViewModels' type ActivityTaskChecklistProps = { activityId: number tasks: ActivityTaskViewModel[] } export const ActivityTaskChecklist = ({ activityId, tasks }: ActivityTaskChecklistProps) => { 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 toggleActivityTaskAction(activityId, 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 (