// ✅ src/pages/TaskPage.js import React, { useEffect, useState, useCallback } from "react"; import TodoForm from "../components/Todo/TodoForm"; import TodoList from "../components/Todo/TodoList"; import TodoDetail from "../components/Todo/TodoDetail"; import todoApi from "../api/todoApi"; const FILTERS = [ { label: "오늘 할 일", value: "today" }, { label: "중요", value: "important" }, { label: "계획된 일정", value: "scheduled" }, { label: "전체", value: "all" }, { label: "완료된 작업", value: "completed" }, // ✅ 추가됨 ]; const TaskPage = () => { const [tasks, setTasks] = useState([]); const [selectedFilter, setSelectedFilter] = useState("all"); const [selectedTag, setSelectedTag] = useState(null); const [selectedTask, setSelectedTask] = useState(null); const fetchTasks = useCallback(async () => { try { const res = await todoApi.get("/api/todo/tasks/"); setTasks(res.data); } catch (err) { console.error("목록 불러오기 실패:", err); } }, []); useEffect(() => { fetchTasks(); }, [fetchTasks]); const closeDetail = () => setSelectedTask(null); const filteredTasks = tasks.filter((task) => { if (selectedTag) return task.tags?.includes(selectedTag); if (selectedFilter === "today") { const today = new Date().toISOString().split("T")[0]; return task.due_date === today; } else if (selectedFilter === "important") { return task.tags?.includes("중요"); } else if (selectedFilter === "scheduled") { return !!task.due_date; } else if (selectedFilter === "completed") { return task.is_completed; } return true; // 전체 }); const allTags = [...new Set(tasks.flatMap((task) => task.tags || []))]; const toggleComplete = async (taskId, is_completed) => { try { await todoApi.patch(`/api/todo/tasks/${taskId}/`, { is_completed: !is_completed, }); fetchTasks(); } catch (err) { console.error("완료 상태 변경 실패:", err); } }; const deleteTask = async (taskId) => { if (!window.confirm("정말로 이 작업을 삭제하시겠습니까?")) return; try { await todoApi.delete(`/api/todo/tasks/${taskId}/`); if (selectedTask?.id === taskId) setSelectedTask(null); fetchTasks(); } catch (err) { console.error("삭제 실패:", err); alert("삭제에 실패했습니다."); } }; return (
{/* ✅ 왼쪽 사이드바 - 목록 + 태그 */} {/* 가운데 메인 영역 */}

📋{" "} {(selectedTag && `태그: ${selectedTag}`) || FILTERS.find((f) => f.value === selectedFilter)?.label || "할 일"}

{ setSelectedTag(tag); setSelectedFilter(null); }} onDelete={deleteTask} />
{/* 오른쪽 상세 Drawer */}
{selectedTask && (
{ fetchTasks(); // 목록 갱신 setSelectedTask(null); // 상세 창 닫기 (필요에 따라 유지 가능) }} />
)}
{selectedTask && (
)}
); }; export default TaskPage;