import { useEffect, useState } from 'react' import { v4 as uuidv4 } from 'uuid' import { Check } from 'lucide-react' import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetFooter } from '@/components/ui/sheet' import { Label } from '@/components/ui/label' import { Input } from '@/components/ui/input' import { Button } from '@/components/ui/button' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { RESOURCE_TYPE_LABELS } from './resource-types' import type { Resource, ResourceType } from '@/domain/types' interface ResourceFormState { name: string type: ResourceType costPerHour: string } const EMPTY_FORM: ResourceFormState = { name: '', type: 'role', costPerHour: '' } interface ResourceFormSheetProps { open: boolean onOpenChange: (open: boolean) => void resource?: Resource onSave: (resource: Resource) => Promise } export function ResourceFormSheet({ open, onOpenChange, resource, onSave }: ResourceFormSheetProps) { const [form, setForm] = useState(EMPTY_FORM) const [saving, setSaving] = useState(false) useEffect(() => { if (open) { setForm( resource ? { name: resource.name, type: resource.type, costPerHour: resource.costPerHour.toString() } : EMPTY_FORM ) } }, [open, resource]) async function handleSubmit() { if (!form.name.trim()) return setSaving(true) try { await onSave({ id: resource?.id ?? uuidv4(), name: form.name.trim(), type: form.type, costPerHour: parseFloat(form.costPerHour) || 0, }) onOpenChange(false) } finally { setSaving(false) } } return ( {resource ? 'Editar recurso' : 'Nuevo recurso'}
setForm((f) => ({ ...f, name: e.target.value }))} />
setForm((f) => ({ ...f, costPerHour: e.target.value }))} className="font-mono" />
) }