'use client'; import { useState } from 'react'; import { toast } from 'sonner'; import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '@/components/ui/alert-dialog'; interface Task { id: string; title: string; description?: string; status: 'todo' | 'in_progress' | 'done'; priority: 'low' | 'medium' | 'high' | 'urgent'; domain: string; due_date?: string; project_id?: string; tags: string[]; } interface TaskDetailPanelProps { task: Task; open: boolean; onOpenChange: (open: boolean) => void; onUpdate: () => void; } export function TaskDetailPanel({ task, open, onOpenChange, onUpdate }: TaskDetailPanelProps) { const [title, setTitle] = useState(task.title); const [description, setDescription] = useState(task.description || ''); const [status, setStatus] = useState(task.status); const [priority, setPriority] = useState(task.priority); const [domain, setDomain] = useState(task.domain); const [dueDate, setDueDate] = useState(task.due_date || ''); const [saving, setSaving] = useState(false); const [deleteOpen, setDeleteOpen] = useState(false); const [deleting, setDeleting] = useState(false); async function handleSave() { setSaving(true); try { const response = await fetch(`/api/tasks/${task.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ title, description, status, priority, domain, due_date: dueDate || null }) }); if (!response.ok) throw new Error('Unable to save task'); onUpdate(); onOpenChange(false); toast.success('Task saved'); } catch (error) { console.error('Failed to update task:', error); toast.error('Unable to save task'); } finally { setSaving(false); } } async function handleDelete() { setDeleting(true); try { const response = await fetch(`/api/tasks/${task.id}`, { method: 'DELETE' }); if (!response.ok) throw new Error('Unable to delete task'); onUpdate(); setDeleteOpen(false); onOpenChange(false); toast.success('Task deleted'); } catch (error) { console.error('Failed to delete task:', error); toast.error('Unable to delete task'); } finally { setDeleting(false); } } return ( Task Details
setTitle(e.target.value)} placeholder="Task title" />