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<TaskSections | null>(
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;