'use client'; import { useState } from 'react'; 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'; 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); async function handleSave() { setSaving(true); try { 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, }), }); onUpdate(); onOpenChange(false); } catch (error) { console.error('Failed to update task:', error); } finally { setSaving(false); } } async function handleDelete() { if (!confirm('Are you sure you want to delete this task?')) return; try { await fetch(`/api/tasks/${task.id}`, { method: 'DELETE' }); onUpdate(); onOpenChange(false); } catch (error) { console.error('Failed to delete task:', error); } } return ( Task Details
setTitle(e.target.value)} placeholder="Task title" />