47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { DateTime } from 'luxon';
|
|
import { useRecoilState } from 'recoil';
|
|
|
|
import { currentUserState } from '@/auth/states/currentUserState';
|
|
import { turnFilterIntoWhereClause } from '@/ui/object/object-filter-dropdown/utils/turnFilterIntoWhereClause';
|
|
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
|
|
import { ActivityType, useGetActivitiesQuery } from '~/generated/graphql';
|
|
import { parseDate } from '~/utils/date-utils';
|
|
|
|
export const useCurrentUserTaskCount = () => {
|
|
const [currentUser] = useRecoilState(currentUserState);
|
|
|
|
const { data } = useGetActivitiesQuery({
|
|
variables: {
|
|
where: {
|
|
type: { equals: ActivityType.Task },
|
|
completedAt: { equals: null },
|
|
...(currentUser
|
|
? turnFilterIntoWhereClause({
|
|
fieldMetadataId: 'assigneeId',
|
|
value: currentUser.id,
|
|
operand: ViewFilterOperand.Is,
|
|
displayValue: currentUser.displayName,
|
|
displayAvatarUrl: currentUser.avatarUrl ?? undefined,
|
|
definition: {
|
|
type: 'ENTITY',
|
|
},
|
|
})
|
|
: {}),
|
|
},
|
|
},
|
|
});
|
|
|
|
const currentUserDueTaskCount = 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;
|
|
}).length;
|
|
|
|
return {
|
|
currentUserDueTaskCount,
|
|
};
|
|
};
|