From 4348bc8e2259da804adc2c4def10488a98fabe8c Mon Sep 17 00:00:00 2001 From: brendanlaschke Date: Thu, 7 Sep 2023 22:38:01 +0200 Subject: [PATCH] Add relation for Company on people show page note creation (#1418) * - added additional entity(company) for people * - moved getRelationData to util function * - remove recursion * typo --- .../hooks/useOpenCreateActivityDrawer.ts | 22 ++-------- .../types/ActivityTargetableEntity.ts | 1 + .../activities/utils/getRelationData.ts | 43 +++++++++++++++++++ front/src/pages/people/PersonShow.tsx | 16 +++++++ 4 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 front/src/modules/activities/utils/getRelationData.ts diff --git a/front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts b/front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts index 26ecc523c..8b0057b8e 100644 --- a/front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts +++ b/front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts @@ -16,10 +16,8 @@ import { GET_ACTIVITIES_BY_TARGETS } from '../graphql/queries/getActivitiesByTar import { GET_ACTIVITY } from '../graphql/queries/getActivity'; import { activityTargetableEntityArrayState } from '../states/activityTargetableEntityArrayState'; import { viewableActivityIdState } from '../states/viewableActivityIdState'; -import { - ActivityTargetableEntity, - ActivityTargetableEntityType, -} from '../types/ActivityTargetableEntity'; +import { ActivityTargetableEntity } from '../types/ActivityTargetableEntity'; +import { getRelationData } from '../utils/getRelationData'; export function useOpenCreateActivityDrawer() { const { openRightDrawer } = useRightDrawer(); @@ -37,6 +35,7 @@ export function useOpenCreateActivityDrawer() { entities?: ActivityTargetableEntity[], ) { const now = new Date().toISOString(); + return createActivityMutation({ variables: { data: { @@ -48,20 +47,7 @@ export function useOpenCreateActivityDrawer() { type: type, activityTargets: { createMany: { - data: entities - ? entities.map((entity) => ({ - companyId: - entity.type === ActivityTargetableEntityType.Company - ? entity.id - : null, - personId: - entity.type === ActivityTargetableEntityType.Person - ? entity.id - : null, - id: v4(), - createdAt: now, - })) - : [], + data: entities ? getRelationData(entities) : [], skipDuplicates: true, }, }, diff --git a/front/src/modules/activities/types/ActivityTargetableEntity.ts b/front/src/modules/activities/types/ActivityTargetableEntity.ts index b9455968d..af309958a 100644 --- a/front/src/modules/activities/types/ActivityTargetableEntity.ts +++ b/front/src/modules/activities/types/ActivityTargetableEntity.ts @@ -6,4 +6,5 @@ export enum ActivityTargetableEntityType { export type ActivityTargetableEntity = { id: string; type: ActivityTargetableEntityType; + relatedEntities?: ActivityTargetableEntity[]; }; diff --git a/front/src/modules/activities/utils/getRelationData.ts b/front/src/modules/activities/utils/getRelationData.ts new file mode 100644 index 000000000..6fe32ab55 --- /dev/null +++ b/front/src/modules/activities/utils/getRelationData.ts @@ -0,0 +1,43 @@ +import { v4 } from 'uuid'; + +import { ActivityTargetCreateManyActivityInput } from '~/generated/graphql'; + +import { + ActivityTargetableEntity, + ActivityTargetableEntityType, +} from '../types/ActivityTargetableEntity'; + +export function getRelationData( + entities: ActivityTargetableEntity[], +): ActivityTargetCreateManyActivityInput[] { + const now = new Date().toISOString(); + + const relationData: ActivityTargetCreateManyActivityInput[] = []; + for (const entity of entities ?? []) { + relationData.push({ + companyId: + entity.type === ActivityTargetableEntityType.Company ? entity.id : null, + personId: + entity.type === ActivityTargetableEntityType.Person ? entity.id : null, + id: v4(), + createdAt: now, + }); + if (entity.relatedEntities) { + for (const relatedEntity of entity.relatedEntities ?? []) { + relationData.push({ + companyId: + relatedEntity.type === ActivityTargetableEntityType.Company + ? relatedEntity.id + : null, + personId: + relatedEntity.type === ActivityTargetableEntityType.Person + ? relatedEntity.id + : null, + id: v4(), + createdAt: now, + }); + } + } + } + return relationData; +} diff --git a/front/src/pages/people/PersonShow.tsx b/front/src/pages/people/PersonShow.tsx index d5624d211..eea829d8a 100644 --- a/front/src/pages/people/PersonShow.tsx +++ b/front/src/pages/people/PersonShow.tsx @@ -95,6 +95,14 @@ export function PersonShow() { entity={{ id: person.id, type: ActivityTargetableEntityType.Person, + relatedEntities: person.company?.id + ? [ + { + id: person.company?.id, + type: ActivityTargetableEntityType.Company, + }, + ] + : undefined, }} /> @@ -140,6 +148,14 @@ export function PersonShow() { entity={{ id: person.id ?? '', type: ActivityTargetableEntityType.Person, + relatedEntities: person.company?.id + ? [ + { + id: person.company?.id, + type: ActivityTargetableEntityType.Company, + }, + ] + : undefined, }} timeline tasks