import { TasksByDate } from "@/server/task/domain/models"; import { TaskSections } from "@/types"; import moment from "moment"; import { useEffect, useState } from "react"; function getNextWeek() { const today = moment().startOf("day"); const nextMonday = today.clone().startOf("isoWeek").add(1, "week"); const sixDaysLater = nextMonday.clone().add(6, "days").toISOString(); // Seis días después del próximo lunes return { startNextWeek: new Date(nextMonday.toISOString()), endNextWeek: new Date(sixDaysLater), }; } const useGroupTasks = (tasks: TasksByDate[] | undefined) => { const [rearrangedTaks, setRearrangedTaks] = useState( null ); const todayDate = moment().startOf("day").toDate(); const tomorrow = moment(todayDate, "YYYY-MM-DD") .add(1, "days") .startOf("day") .toDate(); const { startNextWeek, endNextWeek } = getNextWeek(); useEffect(() => { if (!tasks) return; const tasksData: TaskSections = tasks?.reduce( (acc: any, task) => { const taskDate = moment(task.startDate, "YYYY-MM-DD").toDate(); const updatedDate = new Date(task.tasks[0].updatedAt!); const createdAt = new Date(task.tasks[0].createdAt!); if (updatedDate >= todayDate || createdAt >= todayDate) { acc.recently.list.push(...task.tasks); } if (todayDate >= taskDate && taskDate <= tomorrow) { acc.today.list.push(...task.tasks); } else if (startNextWeek >= taskDate && taskDate <= endNextWeek) { acc.thisWeek.list.push(...task.tasks); } else { acc.later.list.push(...task.tasks); } return acc; }, { recently: { label: "Recientes", list: [] }, today: { label: "Hoy", list: [] }, thisWeek: { label: "Esta semana", list: [] }, later: { label: "Mas tarde", list: [] }, } ); setRearrangedTaks(tasksData); }, [tasks]); // eslint-disable-next-line react-hooks/exhaustive-deps return { rearrangedTaks, }; }; export default useGroupTasks;