60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { DateTime } from 'luxon';
|
|
|
|
import { activeTabIdScopedState } from '@/ui/tab/states/activeTabIdScopedState';
|
|
import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState';
|
|
import { ActivityType, useGetActivitiesQuery } from '~/generated/graphql';
|
|
import { parseDate } from '~/utils/date-utils';
|
|
|
|
import { TasksContext } from '../states/TasksContext';
|
|
|
|
export function useTasks() {
|
|
const [activeTabId] = useRecoilScopedState(
|
|
activeTabIdScopedState,
|
|
TasksContext,
|
|
);
|
|
|
|
const { data: completeTasksData } = useGetActivitiesQuery({
|
|
variables: {
|
|
where: {
|
|
type: { equals: ActivityType.Task },
|
|
completedAt: { not: { equals: null } },
|
|
},
|
|
},
|
|
});
|
|
|
|
const { data: incompleteTaskData } = useGetActivitiesQuery({
|
|
variables: {
|
|
where: {
|
|
type: { equals: ActivityType.Task },
|
|
completedAt:
|
|
activeTabId === 'done' ? { not: { equals: null } } : { equals: null },
|
|
},
|
|
},
|
|
});
|
|
|
|
const data = activeTabId === 'done' ? completeTasksData : incompleteTaskData;
|
|
|
|
const todayOrPreviousTasks = data?.findManyActivities.filter((task) => {
|
|
if (!task.dueAt) {
|
|
return false;
|
|
}
|
|
const dueDate = parseDate(task.dueAt).toJSDate();
|
|
const today = DateTime.now().endOf('day').toJSDate();
|
|
return dueDate <= today;
|
|
});
|
|
|
|
const upcomingTasks = data?.findManyActivities.filter((task) => {
|
|
if (!task.dueAt) {
|
|
return false;
|
|
}
|
|
const dueDate = parseDate(task.dueAt).toJSDate();
|
|
const today = DateTime.now().endOf('day').toJSDate();
|
|
return dueDate > today;
|
|
});
|
|
|
|
return {
|
|
todayOrPreviousTasks,
|
|
upcomingTasks,
|
|
};
|
|
}
|