From efc45f8663afe54a0aa05c3b2d1b2397f741bf6c Mon Sep 17 00:00:00 2001 From: brendanlaschke Date: Sat, 16 Sep 2023 22:05:55 +0300 Subject: [PATCH] Add company relation for person table (#1612) * - add company relation for person table * - also for context menu * - fix yarn.lock * - fix newline missing * - fixed tab * fix --- ...enCreateActivityDrawerForSelectedRowIds.ts | 12 ++++- .../hooks/useCreateActivityForPeople.ts | 44 +++++++++++++++++++ .../usePeopleTableContextMenuEntries.tsx | 15 +++---- .../hooks/usePersonTableActionBarEntries.tsx | 19 +++----- 4 files changed, 65 insertions(+), 25 deletions(-) create mode 100644 front/src/modules/people/hooks/useCreateActivityForPeople.ts diff --git a/front/src/modules/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds.ts b/front/src/modules/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds.ts index 8e9eab757..a9ad2b9e9 100644 --- a/front/src/modules/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds.ts +++ b/front/src/modules/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds.ts @@ -15,12 +15,20 @@ export const useOpenCreateActivityDrawerForSelectedRowIds = () => { const openCreateActivityDrawer = useOpenCreateActivityDrawer(); - return (type: ActivityType, entityType: ActivityTargetableEntityType) => { - const activityTargetableEntityArray: ActivityTargetableEntity[] = + return ( + type: ActivityType, + entityType: ActivityTargetableEntityType, + relatedEntities?: ActivityTargetableEntity[], + ) => { + let activityTargetableEntityArray: ActivityTargetableEntity[] = selectedRowIds.map((id) => ({ type: entityType, id, })); + if (relatedEntities) { + activityTargetableEntityArray = + activityTargetableEntityArray.concat(relatedEntities); + } openCreateActivityDrawer({ type, targetableEntities: activityTargetableEntityArray, diff --git a/front/src/modules/people/hooks/useCreateActivityForPeople.ts b/front/src/modules/people/hooks/useCreateActivityForPeople.ts new file mode 100644 index 000000000..2e61dd05a --- /dev/null +++ b/front/src/modules/people/hooks/useCreateActivityForPeople.ts @@ -0,0 +1,44 @@ +import { useRecoilCallback, useRecoilValue } from 'recoil'; + +import { useOpenCreateActivityDrawerForSelectedRowIds } from '@/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds'; +import { + ActivityTargetableEntity, + ActivityTargetableEntityType, +} from '@/activities/types/ActivityTargetableEntity'; +import { selectedRowIdsSelector } from '@/ui/table/states/selectors/selectedRowIdsSelector'; +import { tableEntitiesFamilyState } from '@/ui/table/states/tableEntitiesFamilyState'; +import { ActivityType, Person } from '~/generated/graphql'; + +export const useCreateActivityForPeople = () => { + const openCreateActivityRightDrawer = + useOpenCreateActivityDrawerForSelectedRowIds(); + const selectedRowIds = useRecoilValue(selectedRowIdsSelector); + + return useRecoilCallback( + ({ snapshot }) => + (type: ActivityType) => { + const relatedEntites: ActivityTargetableEntity[] = []; + for (const id of selectedRowIds) { + const person = snapshot + .getLoadable(tableEntitiesFamilyState(id)) + .getValue() as Person; + if ( + person?.company?.id && + !relatedEntites.find((x) => x.id === person?.company?.id) + ) { + relatedEntites.push({ + id: person.company.id, + type: ActivityTargetableEntityType.Company, + }); + } + } + + openCreateActivityRightDrawer( + type, + ActivityTargetableEntityType.Person, + relatedEntites, + ); + }, + [selectedRowIds, openCreateActivityRightDrawer], + ); +}; diff --git a/front/src/modules/people/hooks/usePeopleTableContextMenuEntries.tsx b/front/src/modules/people/hooks/usePeopleTableContextMenuEntries.tsx index 6b2e6ba5b..803547fc2 100644 --- a/front/src/modules/people/hooks/usePeopleTableContextMenuEntries.tsx +++ b/front/src/modules/people/hooks/usePeopleTableContextMenuEntries.tsx @@ -1,8 +1,6 @@ import { getOperationName } from '@apollo/client/utilities'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -import { useOpenCreateActivityDrawerForSelectedRowIds } from '@/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds'; -import { ActivityTargetableEntityType } from '@/activities/types/ActivityTargetableEntity'; import { contextMenuEntriesState } from '@/ui/context-menu/states/contextMenuEntriesState'; import { IconCheckbox, IconNotes, IconTrash } from '@/ui/icon'; import { useResetTableRowSelection } from '@/ui/table/hooks/useResetTableRowSelection'; @@ -12,15 +10,12 @@ import { ActivityType, useDeleteManyPersonMutation } from '~/generated/graphql'; import { GET_PEOPLE } from '../graphql/queries/getPeople'; +import { useCreateActivityForPeople } from './useCreateActivityForPeople'; + export const usePersonTableContextMenuEntries = () => { const setContextMenuEntries = useSetRecoilState(contextMenuEntriesState); - const openCreateActivityRightDrawer = - useOpenCreateActivityDrawerForSelectedRowIds(); - - const handleActivityClick = async (type: ActivityType) => { - openCreateActivityRightDrawer(type, ActivityTargetableEntityType.Person); - }; + const createActivityForPeople = useCreateActivityForPeople(); const selectedRowIds = useRecoilValue(selectedRowIdsSelector); const [tableRowIds, setTableRowIds] = useRecoilState(tableRowIdsState); @@ -60,12 +55,12 @@ export const usePersonTableContextMenuEntries = () => { { label: 'Note', Icon: IconNotes, - onClick: () => handleActivityClick(ActivityType.Note), + onClick: () => createActivityForPeople(ActivityType.Note), }, { label: 'Task', Icon: IconCheckbox, - onClick: () => handleActivityClick(ActivityType.Task), + onClick: () => createActivityForPeople(ActivityType.Task), }, { label: 'Delete', diff --git a/front/src/modules/people/hooks/usePersonTableActionBarEntries.tsx b/front/src/modules/people/hooks/usePersonTableActionBarEntries.tsx index ab1044b07..e03b7eccb 100644 --- a/front/src/modules/people/hooks/usePersonTableActionBarEntries.tsx +++ b/front/src/modules/people/hooks/usePersonTableActionBarEntries.tsx @@ -1,8 +1,6 @@ import { getOperationName } from '@apollo/client/utilities'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -import { useOpenCreateActivityDrawerForSelectedRowIds } from '@/activities/hooks/useOpenCreateActivityDrawerForSelectedRowIds'; -import { ActivityTargetableEntityType } from '@/activities/types/ActivityTargetableEntity'; import { actionBarEntriesState } from '@/ui/action-bar/states/actionBarEntriesState'; import { IconCheckbox, IconNotes, IconTrash } from '@/ui/icon'; import { useResetTableRowSelection } from '@/ui/table/hooks/useResetTableRowSelection'; @@ -12,18 +10,13 @@ import { ActivityType, useDeleteManyPersonMutation } from '~/generated/graphql'; import { GET_PEOPLE } from '../graphql/queries/getPeople'; +import { useCreateActivityForPeople } from './useCreateActivityForPeople'; + export const usePersonTableActionBarEntries = () => { - const setActionBarEntries = useSetRecoilState(actionBarEntriesState); - - const openCreateActivityRightDrawer = - useOpenCreateActivityDrawerForSelectedRowIds(); - - const handleActivityClick = async (type: ActivityType) => { - openCreateActivityRightDrawer(type, ActivityTargetableEntityType.Person); - }; - const selectedRowIds = useRecoilValue(selectedRowIdsSelector); const [tableRowIds, setTableRowIds] = useRecoilState(tableRowIdsState); + const setActionBarEntries = useSetRecoilState(actionBarEntriesState); + const createActivityForPeople = useCreateActivityForPeople(); const resetRowSelection = useResetTableRowSelection(); @@ -64,12 +57,12 @@ export const usePersonTableActionBarEntries = () => { { label: 'Note', Icon: IconNotes, - onClick: () => handleActivityClick(ActivityType.Note), + onClick: () => createActivityForPeople(ActivityType.Note), }, { label: 'Task', Icon: IconCheckbox, - onClick: () => handleActivityClick(ActivityType.Task), + onClick: () => createActivityForPeople(ActivityType.Task), }, { label: 'Delete',