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
This commit is contained in:
brendanlaschke
2023-09-07 22:38:01 +02:00
committed by GitHub
parent bd2e4307d2
commit 4348bc8e22
4 changed files with 64 additions and 18 deletions

View File

@ -16,10 +16,8 @@ import { GET_ACTIVITIES_BY_TARGETS } from '../graphql/queries/getActivitiesByTar
import { GET_ACTIVITY } from '../graphql/queries/getActivity'; import { GET_ACTIVITY } from '../graphql/queries/getActivity';
import { activityTargetableEntityArrayState } from '../states/activityTargetableEntityArrayState'; import { activityTargetableEntityArrayState } from '../states/activityTargetableEntityArrayState';
import { viewableActivityIdState } from '../states/viewableActivityIdState'; import { viewableActivityIdState } from '../states/viewableActivityIdState';
import { import { ActivityTargetableEntity } from '../types/ActivityTargetableEntity';
ActivityTargetableEntity, import { getRelationData } from '../utils/getRelationData';
ActivityTargetableEntityType,
} from '../types/ActivityTargetableEntity';
export function useOpenCreateActivityDrawer() { export function useOpenCreateActivityDrawer() {
const { openRightDrawer } = useRightDrawer(); const { openRightDrawer } = useRightDrawer();
@ -37,6 +35,7 @@ export function useOpenCreateActivityDrawer() {
entities?: ActivityTargetableEntity[], entities?: ActivityTargetableEntity[],
) { ) {
const now = new Date().toISOString(); const now = new Date().toISOString();
return createActivityMutation({ return createActivityMutation({
variables: { variables: {
data: { data: {
@ -48,20 +47,7 @@ export function useOpenCreateActivityDrawer() {
type: type, type: type,
activityTargets: { activityTargets: {
createMany: { createMany: {
data: entities data: entities ? getRelationData(entities) : [],
? entities.map((entity) => ({
companyId:
entity.type === ActivityTargetableEntityType.Company
? entity.id
: null,
personId:
entity.type === ActivityTargetableEntityType.Person
? entity.id
: null,
id: v4(),
createdAt: now,
}))
: [],
skipDuplicates: true, skipDuplicates: true,
}, },
}, },

View File

@ -6,4 +6,5 @@ export enum ActivityTargetableEntityType {
export type ActivityTargetableEntity = { export type ActivityTargetableEntity = {
id: string; id: string;
type: ActivityTargetableEntityType; type: ActivityTargetableEntityType;
relatedEntities?: ActivityTargetableEntity[];
}; };

View File

@ -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;
}

View File

@ -95,6 +95,14 @@ export function PersonShow() {
entity={{ entity={{
id: person.id, id: person.id,
type: ActivityTargetableEntityType.Person, type: ActivityTargetableEntityType.Person,
relatedEntities: person.company?.id
? [
{
id: person.company?.id,
type: ActivityTargetableEntityType.Company,
},
]
: undefined,
}} }}
/> />
</RecoilScope> </RecoilScope>
@ -140,6 +148,14 @@ export function PersonShow() {
entity={{ entity={{
id: person.id ?? '', id: person.id ?? '',
type: ActivityTargetableEntityType.Person, type: ActivityTargetableEntityType.Person,
relatedEntities: person.company?.id
? [
{
id: person.company?.id,
type: ActivityTargetableEntityType.Company,
},
]
: undefined,
}} }}
timeline timeline
tasks tasks