import React, { useState, useEffect } from 'react'; import { Task } from '../../entities/Task'; import { Project } from '../../entities/Project'; import TaskHeader from './TaskHeader'; import TaskModal from './TaskModal'; interface TaskItemProps { task: Task; onTaskUpdate: (task: Task) => void; onTaskDelete: (taskId: number) => void; projects: Project[]; } const TaskItem: React.FC = ({ task, onTaskUpdate, onTaskDelete, projects, }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [projectList, setProjectList] = useState(projects); // Keep track of projects const handleTaskClick = () => { setIsModalOpen(true); // Open the modal when task title is clicked }; const handleSave = (updatedTask: Task) => { onTaskUpdate(updatedTask); // Save the updated task setIsModalOpen(false); // Close the modal after saving }; const handleDelete = () => { if (task.id) { onTaskDelete(task.id); // Delete the task } }; // Function to create a new project 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(); // Update local project list setProjectList((prevProjects) => [...prevProjects, newProject]); return newProject; } catch (error) { console.error('Error creating project:', error); throw error; } }; // Find the project associated with this task const project = projectList.find((p) => p.id === task.project_id); return (
{/* Task Modal for editing */} setIsModalOpen(false)} task={task} onSave={handleSave} onDelete={onTaskDelete} projects={projectList} // Pass updated project list to modal onCreateProject={handleCreateProject} // Pass project creation function />
); }; export default TaskItem;