import { useMemo, useState, type FC } from "react"; import AddNewColumn from "./components/AddNewColumn"; import Column from "./components/Column"; import HeaderWorkspace from "./components/HeaderWorkspace"; import TaskDetailModal from "./components/task-detail/TaskDetailModal"; import tasksData from "./data/tasks.json"; import type { Task, WorkspaceData } from "./types"; import { reorderColumns } from "./utils/reorderColumns"; import { reorderTasks } from "./utils/reorderTasks"; const Workspace: FC = () => { const [columns, setColumns] = useState( (tasksData as WorkspaceData).columns, ); const [tasks, setTasks] = useState(tasksData.tasks as Task[]); const [draggedTaskId, setDraggedTaskId] = useState(null); const [draggedColumnId, setDraggedColumnId] = useState(null); const [selectedTask, setSelectedTask] = useState(null); const tasksByColumn = useMemo(() => { return columns.reduce>((acc, column) => { acc[column.id] = tasks .filter((task) => task.columnId === column.id) .sort((a, b) => a.order - b.order); return acc; }, {}); }, [columns, tasks]); const handleDragStart = (taskId: string) => { setDraggedTaskId(taskId); }; const handleDragEnd = () => { setDraggedTaskId(null); }; const handleDrop = (columnId: string, index: number) => { if (!draggedTaskId) return; setTasks((prev) => reorderTasks(prev, draggedTaskId, columnId, index)); setDraggedTaskId(null); }; const handleColumnDragStart = (columnId: string) => { setDraggedColumnId(columnId); }; const handleColumnDragEnd = () => { setDraggedColumnId(null); }; const handleColumnDrop = (overColumnId: string) => { if (!draggedColumnId || draggedColumnId === overColumnId) return; setColumns((prev) => reorderColumns(prev, draggedColumnId, overColumnId)); setDraggedColumnId(null); }; const selectedTaskColumn = selectedTask ? columns.find((column) => column.id === selectedTask.columnId) : null; return (
{columns.map((column) => ( ))}
setSelectedTask(null)} />
); }; export default Workspace;