"use client"; import { useState } from "react"; import { Group, Task } from "@/lib/api"; interface TaskFormProps { groups: Group[]; initial?: Partial; onSubmit: (data: Partial) => Promise; onCancel: () => void; submitLabel?: string; } const STATUSES = [ { value: "pending", label: "\u010Cek\u00e1" }, { value: "in_progress", label: "Prob\u00edh\u00e1" }, { value: "done", label: "Hotovo" }, { value: "cancelled", label: "Zru\u0161eno" }, ]; const PRIORITIES = [ { value: "low", label: "N\u00edzk\u00e1" }, { value: "medium", label: "St\u0159edn\u00ed" }, { value: "high", label: "Vysok\u00e1" }, { value: "urgent", label: "Urgentn\u00ed" }, ]; export default function TaskForm({ groups, initial, onSubmit, onCancel, submitLabel = "Ulo\u017eit", }: TaskFormProps) { const [title, setTitle] = useState(initial?.title || ""); const [description, setDescription] = useState(initial?.description || ""); const [status, setStatus] = useState(initial?.status || "pending"); const [priority, setPriority] = useState(initial?.priority || "medium"); const [groupId, setGroupId] = useState(initial?.group_id || ""); const [dueAt, setDueAt] = useState( initial?.due_at ? initial.due_at.slice(0, 16) : "" ); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!title.trim()) { setError("N\u00e1zev je povinn\u00fd"); return; } setLoading(true); setError(""); try { await onSubmit({ title: title.trim(), description: description.trim(), status: status as Task["status"], priority: priority as Task["priority"], group_id: groupId || null, due_at: dueAt ? new Date(dueAt).toISOString() : null, }); } catch (err) { setError( err instanceof Error ? err.message : "Chyba p\u0159i ukl\u00e1d\u00e1n\u00ed" ); } finally { setLoading(false); } } return (
{error && (
{error}
)}
setTitle(e.target.value)} className="w-full px-3 py-2.5 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition-shadow" placeholder="Co je t\u0159eba ud\u011blat..." autoFocus />