import { getOperationName } from '@apollo/client/utilities'; import { IconCheckbox, IconNotes, IconTrash } from '@tabler/icons-react'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; import { useOpenCreateActivityDrawerForSelectedRowIds } from '@/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds'; import { ActivityTargetableEntityType } from '@/activities/types/ActivityTargetableEntity'; import { ContextMenuEntry } from '@/ui/context-menu/components/ContextMenuEntry'; import { useResetTableRowSelection } from '@/ui/table/hooks/useResetTableRowSelection'; import { contextMenuEntriesState } from '@/ui/table/states/ContextMenuEntriesState'; import { selectedRowIdsSelector } from '@/ui/table/states/selectedRowIdsSelector'; import { tableRowIdsState } from '@/ui/table/states/tableRowIdsState'; import { ActivityType, useDeleteManyPersonMutation } from '~/generated/graphql'; import { GET_PEOPLE } from '../queries'; export function useOpenContextMenu() { const setContextMenuEntries = useSetRecoilState(contextMenuEntriesState); const openCreateActivityRightDrawer = useOpenCreateActivityDrawerForSelectedRowIds(); async function handleActivityClick(type: ActivityType) { openCreateActivityRightDrawer(type, ActivityTargetableEntityType.Person); } const selectedRowIds = useRecoilValue(selectedRowIdsSelector); const [tableRowIds, setTableRowIds] = useRecoilState(tableRowIdsState); const resetRowSelection = useResetTableRowSelection(); const [deleteManyPerson] = useDeleteManyPersonMutation({ refetchQueries: [getOperationName(GET_PEOPLE) ?? ''], }); async function handleDeleteClick() { const rowIdsToDelete = selectedRowIds; resetRowSelection(); await deleteManyPerson({ variables: { ids: rowIdsToDelete, }, optimisticResponse: { __typename: 'Mutation', deleteManyPerson: { count: rowIdsToDelete.length, }, }, update: () => { setTableRowIds( tableRowIds.filter((id) => !rowIdsToDelete.includes(id)), ); }, }); } return () => { setContextMenuEntries([ } onClick={() => handleActivityClick(ActivityType.Note)} />, } onClick={() => handleActivityClick(ActivityType.Task)} />, } type="danger" onClick={handleDeleteClick} />, ]); }; }