import React, { useEffect } from "react"; import { format } from "date-fns"; import { ClipboardDocumentListIcon, ArrowPathIcon, CalendarDaysIcon, ClockIcon, } from "@heroicons/react/24/outline"; import { fetchTasks, updateTask, deleteTask } from "../../utils/tasksService"; import { fetchProjects } from "../../utils/projectsService"; import { Task } from "../../entities/Task"; import { useStore } from "../../store/useStore"; import TaskList from "./TaskList"; import { Metrics } from "../../entities/Metrics"; const TasksToday: React.FC = () => { const { tasks, setTasks, setLoading: setTasksLoading, setError: setTasksError, } = useStore((state) => state.tasksStore); const { projects, setProjects, setLoading: setProjectsLoading, setError: setProjectsError, } = useStore((state) => state.projectsStore); const [metrics, setMetrics] = React.useState({ total_open_tasks: 0, tasks_pending_over_month: 0, tasks_in_progress_count: 0, tasks_in_progress: [], tasks_due_today: [], suggested_tasks: [], }); useEffect(() => { const loadData = async () => { try { // setProjectsLoading(true); const projectsData = await fetchProjects(); setProjects(projectsData); const { tasks: fetchedTasks, metrics } = await fetchTasks("?type=today"); setTasks(fetchedTasks); setMetrics(metrics); } catch (error) { console.error("Error loading data:", error); setProjectsError(true); setTasksError(true); } finally { // setProjectsLoading(false); // setTasksLoading(false); } }; loadData(); }, [setProjects, setProjectsLoading, setProjectsError, setTasks, setTasksLoading, setTasksError]); const handleTaskUpdate = async (updatedTask: Task): Promise => { if (!updatedTask.id) return; try { setTasksLoading(true); await updateTask(updatedTask.id, updatedTask); const { tasks: updatedTasks, metrics } = await fetchTasks("?type=today"); setTasks(updatedTasks); setMetrics(metrics); } catch (error) { console.error("Error updating task:", error); setTasksError(true); } finally { setTasksLoading(false); } }; const handleTaskDelete = async (taskId: number): Promise => { try { setTasksLoading(true); await deleteTask(taskId); const { tasks: updatedTasks, metrics } = await fetchTasks("?type=today"); setTasks(updatedTasks); setMetrics(metrics); } catch (error) { console.error("Error deleting task:", error); setTasksError(true); } finally { setTasksLoading(false); } }; const todayDate = format(new Date(), "yyyy-MM-dd"); return (

Today

{format(new Date(), "EEEE, MMMM d, yyyy")}

Backlog

{metrics.total_open_tasks}

In Progress

{metrics.tasks_in_progress_count}

Due Today

{metrics.tasks_due_today.length}

Stale

{metrics.tasks_pending_over_month}

{metrics.tasks_due_today.length > 0 && ( <>

Due Today

)} {metrics.tasks_in_progress.length > 0 && ( <>

In Progress

)} {metrics.suggested_tasks.length > 0 && ( <>

Suggested

)} {tasks.length === 0 && (

No tasks available for today.

)}
); }; export default TasksToday;