'use client' import { useState, useEffect } from 'react' import { Task } from '@prisma/client' import { Button, Input, TextArea, Select } from '@/components/ui' import { formatDateInput } from '@/lib/utils' import toast from 'react-hot-toast' interface TaskFormProps { task?: Task | null defaultStatus?: string onSubmit: (data: TaskFormData) => Promise onCancel: () => void } export interface TaskFormData { title: string description: string status: string deadline: string } const statusOptions = [ { value: 'TODO', label: 'Chưa làm' }, { value: 'IN_PROGRESS', label: 'Đang làm' }, { value: 'DONE', label: 'Hoàn thành' }, ] export function TaskForm({ task, defaultStatus = 'TODO', onSubmit, onCancel }: TaskFormProps) { const [formData, setFormData] = useState({ title: '', description: '', status: defaultStatus, deadline: '', }) const [loading, setLoading] = useState(false) const [errors, setErrors] = useState>({}) useEffect(() => { if (task) { setFormData({ title: task.title, description: task.description || '', status: task.status, deadline: formatDateInput(task.deadline), }) } else { setFormData(prev => ({ ...prev, status: defaultStatus })) } }, [task, defaultStatus]) const validate = (): boolean => { const newErrors: Record = {} if (!formData.title.trim()) { newErrors.title = 'Tiêu đề không được để trống' } else if (formData.title.length > 200) { newErrors.title = 'Tiêu đề tối đa 200 ký tự' } if (formData.description.length > 1000) { newErrors.description = 'Mô tả tối đa 1000 ký tự' } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!validate()) return setLoading(true) try { await onSubmit(formData) } catch (error) { toast.error('Đã có lỗi xảy ra') } finally { setLoading(false) } } return (
setFormData({ ...formData, title: e.target.value })} error={errors.title} disabled={loading} />