'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { TaskCreate, TaskUpdate, Project } from '@/lib/types'; import { createTask, updateTask, getProjects } from '@/lib/api'; import { motion } from 'framer-motion'; import { Calendar, Tag, Type, AlignLeft, CheckCircle2, X } from 'lucide-react'; interface TaskFormProps { initialTask?: any; isEditing?: boolean; onCancel?: () => void; onSuccess?: (task: any) => void; } export function TaskForm({ initialTask, isEditing = false, onCancel, onSuccess }: TaskFormProps) { const [title, setTitle] = useState(initialTask?.title || ''); const [description, setDescription] = useState(initialTask?.description || ''); const [completed, setCompleted] = useState(initialTask?.completed || false); const [projectId, setProjectId] = useState(initialTask?.project_id || ''); const [dueDate, setDueDate] = useState(initialTask?.due_date || ''); const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const router = useRouter(); const getUserId = () => { if (typeof window !== 'undefined') { const userStr = localStorage.getItem('user'); if (userStr) { try { const user = JSON.parse(userStr); return user.id; } catch (e) { return null; } } } return null; }; useEffect(() => { const fetchProjects = async () => { try { const userId = getUserId(); if (!userId) return; const projectsData = await getProjects(userId); setProjects(projectsData); } catch (err) { console.error('Error fetching projects:', err); } }; fetchProjects(); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!title.trim()) { setError('Task title is required'); return; } const userId = getUserId(); if (!userId) return; setLoading(true); try { let task; if (isEditing && initialTask) { const taskData: TaskUpdate = { title: title.trim(), description: description.trim() || undefined, completed, project_id: projectId || undefined, due_date: dueDate || undefined }; task = await updateTask(userId, initialTask.id, taskData); } else { const taskData: any = { title: title.trim(), description: description.trim() || undefined, completed: false, project_id: projectId || undefined, due_date: dueDate || undefined, is_ai_generated: false }; task = await createTask(userId, taskData); } if (onSuccess) { onSuccess(task); const { showToast } = await import('@/lib/toast'); showToast.success(isEditing ? 'Task updated successfully' : 'Task created successfully'); } } catch (err: any) { setError(err.message || 'Action failed'); } finally { setLoading(false); } }; return (
{error && ( {error} )}
{/* Title Input */}
setTitle(e.target.value)} placeholder="Specify objective..." className="w-full bg-white/[0.03] border border-white/5 rounded-2xl p-4 text-white placeholder-white/20 focus:outline-none focus:border-indigo-500/50 transition-all font-bold" />
{/* Description */}