import React, { useState } from 'react'; import { Task } from '../../entities/Task'; import { Project } from '../../entities/Project'; import TaskHeader from './TaskHeader'; import TaskModal from './TaskModal'; import { toggleTaskCompletion } from '../../utils/tasksService'; interface TaskItemProps { task: Task; onTaskUpdate: (task: Task) => void; onTaskDelete: (taskId: number) => void; projects: Project[]; hideProjectName?: boolean; } const TaskItem: React.FC = ({ task, onTaskUpdate, onTaskDelete, projects, hideProjectName = false, }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [projectList, setProjectList] = useState(projects); const handleTaskClick = () => { setIsModalOpen(true); }; const handleSave = (updatedTask: Task) => { onTaskUpdate(updatedTask); setIsModalOpen(false); }; const handleDelete = () => { if (task.id) { onTaskDelete(task.id); } }; const handleToggleCompletion = async () => { if (task.id) { try { const updatedTask = await toggleTaskCompletion(task.id); onTaskUpdate(updatedTask); } catch (error) { } } }; const handleCreateProject = async (name: string): Promise => { try { const response = await fetch('/api/project', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ name, active: true }), }); if (!response.ok) { throw new Error('Failed to create project'); } const newProject = await response.json(); setProjectList((prevProjects) => [...prevProjects, newProject]); return newProject; } catch (error) { throw error; } }; // Use the project from the task's included data if available, otherwise find from projectList const project = task.Project || projectList.find((p) => p.id === task.project_id); return (
setIsModalOpen(false)} task={task} onSave={handleSave} onDelete={handleDelete} projects={projectList} onCreateProject={handleCreateProject} />
); }; export default TaskItem;