258685467b
* Added Overview page * Revised Getting Started page * Minor revision * Edited readme, minor modifications to docs * Removed sweep.yaml, .devcontainer, .ergomake * Moved security.md to .github, added contributing.md * changes as per code review * updated contributing.md * fixed broken links & added missing links in doc, improved structure * fixed link in wsl setup * fixed server link, added https cloning in yarn-setup * removed package-lock.json * added doc card, admonitions * removed underline from nav buttons * refactoring modules/ui * refactoring modules/ui * Change folder case * Fix theme location * Fix case 2 * Fix storybook --------- Co-authored-by: Nimra Ahmed <nimra1408@gmail.com> Co-authored-by: Nimra Ahmed <50912134+nimraahmed@users.noreply.github.com>
94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
import { DateTime } from 'luxon';
|
|
|
|
import { TasksRecoilScopeContext } from '@/activities/states/recoil-scope-contexts/TasksRecoilScopeContext';
|
|
import { ActivityTargetableEntity } from '@/activities/types/ActivityTargetableEntity';
|
|
import { filtersScopedState } from '@/ui/data/view-bar/states/filtersScopedState';
|
|
import { turnFilterIntoWhereClause } from '@/ui/data/view-bar/utils/turnFilterIntoWhereClause';
|
|
import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState';
|
|
import { ActivityType, useGetActivitiesQuery } from '~/generated/graphql';
|
|
import { parseDate } from '~/utils/date-utils';
|
|
|
|
export const useTasks = (entity?: ActivityTargetableEntity) => {
|
|
const [filters] = useRecoilScopedState(
|
|
filtersScopedState,
|
|
TasksRecoilScopeContext,
|
|
);
|
|
|
|
const whereFilters = entity
|
|
? {
|
|
activityTargets: {
|
|
some: {
|
|
OR: [
|
|
{ companyId: { equals: entity.id } },
|
|
{ personId: { equals: entity.id } },
|
|
],
|
|
},
|
|
},
|
|
}
|
|
: Object.assign(
|
|
{},
|
|
...filters.map((filter) => {
|
|
return turnFilterIntoWhereClause(filter);
|
|
}),
|
|
);
|
|
|
|
const { data: completeTasksData } = useGetActivitiesQuery({
|
|
variables: {
|
|
where: {
|
|
type: { equals: ActivityType.Task },
|
|
completedAt: { not: { equals: null } },
|
|
...whereFilters,
|
|
},
|
|
},
|
|
skip: !entity && filters.length === 0,
|
|
});
|
|
|
|
const { data: incompleteTaskData } = useGetActivitiesQuery({
|
|
variables: {
|
|
where: {
|
|
type: { equals: ActivityType.Task },
|
|
completedAt: { equals: null },
|
|
...whereFilters,
|
|
},
|
|
},
|
|
skip: !entity && filters.length === 0,
|
|
});
|
|
|
|
const todayOrPreviousTasks = incompleteTaskData?.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 = incompleteTaskData?.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 unscheduledTasks = incompleteTaskData?.findManyActivities.filter(
|
|
(task) => {
|
|
return !task.dueAt;
|
|
},
|
|
);
|
|
|
|
const completedTasks = completeTasksData?.findManyActivities;
|
|
|
|
return {
|
|
todayOrPreviousTasks: todayOrPreviousTasks ?? [],
|
|
upcomingTasks: upcomingTasks ?? [],
|
|
unscheduledTasks: unscheduledTasks ?? [],
|
|
completedTasks: completedTasks ?? [],
|
|
};
|
|
};
|