From a67199e0c35e760b385b427f3f143989a228eb98 Mon Sep 17 00:00:00 2001 From: Lucas Bordeau Date: Tue, 21 Nov 2023 23:29:40 +0100 Subject: [PATCH] Fix Tasks and Activities - Part 1 (#2624) Fixed --- .../modules/activities/comment/Comment.tsx | 2 +- .../activities/comment/CommentHeader.tsx | 10 +- .../comment/__stories__/mock-comment.ts | 6 +- .../components/ActivityBodyEditor.tsx | 2 +- .../components/ActivityComments.tsx | 47 +++++--- .../activities/components/ActivityEditor.tsx | 13 +-- .../components/ActivityTargetChips.tsx | 17 +-- .../activities/notes/hooks/useNotes.ts | 53 +++++++-- .../components/RightDrawerActivity.tsx | 2 +- .../activities/tasks/hooks/useTasks.ts | 107 +++++++++++++----- .../timeline/components/Timeline.tsx | 9 +- .../hooks/useCreateOneObjectRecord.ts | 37 +++--- .../hooks/useDeleteOneObjectRecord.ts | 22 ++-- .../hooks/useFindManyObjectRecords.ts | 18 ++- .../hooks/useUpdateOneObjectRecord.ts | 43 ++++--- .../metadata/field-metadata/activity.ts | 2 +- .../metadata/field-metadata/comment.ts | 8 +- .../standard-objects/comment.ts | 4 +- 18 files changed, 240 insertions(+), 162 deletions(-) diff --git a/front/src/modules/activities/comment/Comment.tsx b/front/src/modules/activities/comment/Comment.tsx index 3ad48b676..ea6442b9f 100644 --- a/front/src/modules/activities/comment/Comment.tsx +++ b/front/src/modules/activities/comment/Comment.tsx @@ -5,7 +5,7 @@ import { Comment as CommentType } from '@/activities/types/Comment'; import { CommentHeader } from './CommentHeader'; type CommentProps = { - comment: Omit; + comment: CommentType; actionBar?: React.ReactNode; }; diff --git a/front/src/modules/activities/comment/CommentHeader.tsx b/front/src/modules/activities/comment/CommentHeader.tsx index 2b2a09c75..ff68c5332 100644 --- a/front/src/modules/activities/comment/CommentHeader.tsx +++ b/front/src/modules/activities/comment/CommentHeader.tsx @@ -8,11 +8,6 @@ import { beautifyPastDateRelativeToNow, } from '~/utils/date-utils'; -type CommentHeaderProps = { - comment: Pick; - actionBar?: React.ReactNode; -}; - const StyledContainer = styled.div` align-items: center; display: flex; @@ -61,6 +56,11 @@ const StyledTooltip = styled(Tooltip)` padding: 8px; `; +type CommentHeaderProps = { + comment: Pick; + actionBar?: React.ReactNode; +}; + export const CommentHeader = ({ comment, actionBar }: CommentHeaderProps) => { const beautifiedCreatedAt = beautifyPastDateRelativeToNow(comment.createdAt); const exactCreatedAt = beautifyExactDateTime(comment.createdAt); diff --git a/front/src/modules/activities/comment/__stories__/mock-comment.ts b/front/src/modules/activities/comment/__stories__/mock-comment.ts index 09575fb51..bc672c491 100644 --- a/front/src/modules/activities/comment/__stories__/mock-comment.ts +++ b/front/src/modules/activities/comment/__stories__/mock-comment.ts @@ -4,7 +4,7 @@ import { Comment } from '@/activities/types/Comment'; export const mockComment: Pick< Comment, - 'id' | 'author' | 'createdAt' | 'body' | 'updatedAt' + 'id' | 'author' | 'createdAt' | 'body' | 'updatedAt' | 'activityId' > = { id: 'fake_comment_1_uuid', body: 'Hello, this is a comment.', @@ -18,11 +18,12 @@ export const mockComment: Pick< }, createdAt: DateTime.fromFormat('2021-03-12', 'yyyy-MM-dd').toISO() ?? '', updatedAt: DateTime.fromFormat('2021-03-13', 'yyyy-MM-dd').toISO() ?? '', + activityId: 'fake_activity_1_uuid', }; export const mockCommentWithLongValues: Pick< Comment, - 'id' | 'author' | 'createdAt' | 'body' | 'updatedAt' + 'id' | 'author' | 'createdAt' | 'body' | 'updatedAt' | 'activityId' > = { id: 'fake_comment_2_uuid', body: 'Hello, this is a comment. Hello, this is a comment. Hello, this is a comment. Hello, this is a comment. Hello, this is a comment. Hello, this is a comment.', @@ -36,4 +37,5 @@ export const mockCommentWithLongValues: Pick< }, createdAt: DateTime.fromFormat('2021-03-12', 'yyyy-MM-dd').toISO() ?? '', updatedAt: DateTime.fromFormat('2021-03-13', 'yyyy-MM-dd').toISO() ?? '', + activityId: 'fake_activity_1_uuid', }; diff --git a/front/src/modules/activities/components/ActivityBodyEditor.tsx b/front/src/modules/activities/components/ActivityBodyEditor.tsx index 47de9f465..047192f8e 100644 --- a/front/src/modules/activities/components/ActivityBodyEditor.tsx +++ b/front/src/modules/activities/components/ActivityBodyEditor.tsx @@ -23,7 +23,7 @@ export const ActivityBodyEditor = ({ }: ActivityBodyEditorProps) => { const [body, setBody] = useState(null); const { updateOneObject } = useUpdateOneObjectRecord({ - objectNameSingular: 'Activity', + objectNameSingular: 'activity', }); useEffect(() => { diff --git a/front/src/modules/activities/components/ActivityComments.tsx b/front/src/modules/activities/components/ActivityComments.tsx index e144c13c3..33cecec34 100644 --- a/front/src/modules/activities/components/ActivityComments.tsx +++ b/front/src/modules/activities/components/ActivityComments.tsx @@ -6,21 +6,15 @@ import { v4 } from 'uuid'; import { Comment } from '@/activities/comment/Comment'; import { Activity } from '@/activities/types/Activity'; import { Comment as CommentType } from '@/activities/types/Comment'; -import { currentUserState } from '@/auth/states/currentUserState'; +import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { useCreateOneObjectRecord } from '@/object-record/hooks/useCreateOneObjectRecord'; +import { useFindManyObjectRecords } from '@/object-record/hooks/useFindManyObjectRecords'; import { AutosizeTextInput, AutosizeTextInputVariant, } from '@/ui/input/components/AutosizeTextInput'; import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; -type ActivityCommentsProps = { - activity: Pick & { - comments: Array; - }; - scrollableContainerRef: React.RefObject; -}; - const StyledThreadItemListContainer = styled.div` align-items: flex-start; border-top: 1px solid ${({ theme }) => theme.border.color.light}; @@ -57,16 +51,31 @@ const StyledThreadCommentTitle = styled.div` text-transform: uppercase; `; +type ActivityCommentsProps = { + activity: Pick; + scrollableContainerRef: React.RefObject; +}; + export const ActivityComments = ({ activity, scrollableContainerRef, }: ActivityCommentsProps) => { - const currentUser = useRecoilValue(currentUserState); const { createOneObject } = useCreateOneObjectRecord({ objectNameSingular: 'comment', }); - if (!currentUser) { + const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState); + + const { objects: comments } = useFindManyObjectRecords({ + objectNamePlural: 'comments', + filter: { + activityId: { + eq: activity?.id ?? '', + }, + }, + }); + + if (!currentWorkspaceMember) { return <>; } @@ -76,10 +85,10 @@ export const ActivityComments = ({ } createOneObject?.({ - commentId: v4(), - authorId: currentUser?.id ?? '', + id: v4(), + authorId: currentWorkspaceMember?.id ?? '', activityId: activity?.id ?? '', - commentText: commentText, + body: commentText, createdAt: new Date().toISOString(), }); }; @@ -93,26 +102,28 @@ export const ActivityComments = ({ }); }; + console.log('asd', { activity, comments }); + return ( <> - {activity?.comments.length > 0 && ( + {comments.length > 0 && ( <> Comments - {activity?.comments?.map((comment) => ( - + {comments?.map((comment) => ( + ))} )} - {currentUser && ( + {currentWorkspaceMember && ( 0 ? 'Reply...' : undefined} + placeholder={comments.length > 0 ? 'Reply...' : undefined} /> )} diff --git a/front/src/modules/activities/components/ActivityEditor.tsx b/front/src/modules/activities/components/ActivityEditor.tsx index f21c8ac00..d51cfd72a 100644 --- a/front/src/modules/activities/components/ActivityEditor.tsx +++ b/front/src/modules/activities/components/ActivityEditor.tsx @@ -13,8 +13,6 @@ import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; import { WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; import { debounce } from '~/utils/debounce'; -import { ActivityRelationEditableField } from '../editable-fields/components/ActivityRelationEditableField'; - import { ActivityTitle } from './ActivityTitle'; import '@blocknote/core/style.css'; @@ -75,6 +73,10 @@ export const ActivityEditor = ({ const [hasUserManuallySetTitle, setHasUserManuallySetTitle] = useState(false); + console.log({ + activity, + }); + const [title, setTitle] = useState(activity.title ?? ''); const [completedAt, setCompletedAt] = useState( activity.completedAt ?? '', @@ -149,7 +151,7 @@ export const ActivityEditor = ({ */} )} - + {/* */} {showComment && ( )} diff --git a/front/src/modules/activities/components/ActivityTargetChips.tsx b/front/src/modules/activities/components/ActivityTargetChips.tsx index fd1966936..8220575f7 100644 --- a/front/src/modules/activities/components/ActivityTargetChips.tsx +++ b/front/src/modules/activities/components/ActivityTargetChips.tsx @@ -1,10 +1,7 @@ import styled from '@emotion/styled'; -import { ActivityTarget } from '@/activities/types/ActivityTarget'; import { CompanyChip } from '@/companies/components/CompanyChip'; -import { Company } from '@/companies/types/Company'; import { PersonChip } from '@/people/components/PersonChip'; -import { Person } from '@/people/types/Person'; import { getLogoUrlFromDomainName } from '~/utils'; const StyledContainer = styled.div` @@ -13,23 +10,15 @@ const StyledContainer = styled.div` gap: ${({ theme }) => theme.spacing(1)}; `; -export const ActivityTargetChips = ({ - targets, -}: { - targets?: Array< - Pick & { - person?: Pick | null; - company?: Pick | null; - } - > | null; -}) => { +// TODO: fix edges pagination formatting on n+N +export const ActivityTargetChips = ({ targets }: { targets?: any }) => { if (!targets) { return null; } return ( - {targets.map(({ company, person }) => { + {targets?.edges?.map(({ company, person }: any) => { if (company) { return ( { - const { objects: notes } = useFindManyObjectRecords({ - objectNamePlural: 'activities', + const { objects: activityTargets } = useFindManyObjectRecords({ + objectNamePlural: 'activityTargets', filter: { - type: { equals: 'None' }, - activityTargets: { - some: { - OR: [ - { companyId: { equals: entity.id } }, - { personId: { equals: entity.id } }, - ], - }, - }, + [entity.type === 'Company' ? 'companyId' : 'personId']: { eq: entity.id }, + }, + }); + + const { objectMetadataItem: activityObjectMetadataItem } = + useObjectMetadataItem({ + objectNameSingular: 'activity', + }); + + const { registerOptimisticEffect } = useOptimisticEffect({ + objectNameSingular: activityObjectMetadataItem?.nameSingular, + }); + + const filter = { + id: { + in: activityTargets?.map((activityTarget) => activityTarget.activityId), + }, + type: { eq: 'Note' }, + }; + const orderBy = { + createdAt: 'AscNullsFirst', + }; + + const { objects: notes } = useFindManyObjectRecords({ + skip: !activityTargets?.length, + objectNamePlural: 'activities', + filter, + orderBy, + onCompleted: () => { + if (activityObjectMetadataItem) { + registerOptimisticEffect({ + variables: { orderBy, filter }, + definition: getRecordOptimisticEffectDefinition({ + objectMetadataItem: activityObjectMetadataItem, + }), + }); + } }, }); diff --git a/front/src/modules/activities/right-drawer/components/RightDrawerActivity.tsx b/front/src/modules/activities/right-drawer/components/RightDrawerActivity.tsx index fab32eb12..fb33043ca 100644 --- a/front/src/modules/activities/right-drawer/components/RightDrawerActivity.tsx +++ b/front/src/modules/activities/right-drawer/components/RightDrawerActivity.tsx @@ -35,7 +35,7 @@ export const RightDrawerActivity = ({ ); const { object: activity } = useFindOneObjectRecord({ - objectNameSingular: 'activityId', + objectNameSingular: 'activity', objectRecordId: activityId, skip: !activityId, onCompleted: (activity: Activity) => { diff --git a/front/src/modules/activities/tasks/hooks/useTasks.ts b/front/src/modules/activities/tasks/hooks/useTasks.ts index 9a3c2447f..bec9753af 100644 --- a/front/src/modules/activities/tasks/hooks/useTasks.ts +++ b/front/src/modules/activities/tasks/hooks/useTasks.ts @@ -2,55 +2,108 @@ import { DateTime } from 'luxon'; import { Activity } from '@/activities/types/Activity'; import { ActivityTargetableEntity } from '@/activities/types/ActivityTargetableEntity'; +import { useOptimisticEffect } from '@/apollo/optimistic-effect/hooks/useOptimisticEffect'; +import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; +import { getRecordOptimisticEffectDefinition } from '@/object-record/graphql/optimistic-effect-definition/getRecordOptimisticEffectDefinition'; import { useFindManyObjectRecords } from '@/object-record/hooks/useFindManyObjectRecords'; import { useFilter } from '@/ui/object/object-filter-dropdown/hooks/useFilter'; -import { turnFiltersIntoWhereClauseV2 } from '@/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2'; import { parseDate } from '~/utils/date-utils'; export const useTasks = (entity?: ActivityTargetableEntity) => { const { selectedFilter } = useFilter(); - const whereFilters = entity - ? { - activityTargets: { - some: { - OR: [ - { companyId: { equals: entity.id } }, - { personId: { equals: entity.id } }, - ], - }, - }, - } - : Object.assign({}, turnFiltersIntoWhereClauseV2([], [])); + const { objects: activityTargets } = useFindManyObjectRecords({ + objectNamePlural: 'activityTargets', + filter: { + [entity?.type === 'Company' ? 'companyId' : 'personId']: { + eq: entity?.id, + }, + }, + }); + + const { objectMetadataItem: activityObjectMetadataItem } = + useObjectMetadataItem({ + objectNameSingular: 'activity', + }); + + const { registerOptimisticEffect } = useOptimisticEffect({ + objectNameSingular: activityObjectMetadataItem?.nameSingular, + }); const { objects: completeTasksData } = useFindManyObjectRecords({ objectNamePlural: 'activities', skip: !entity && !selectedFilter, filter: { - type: { equals: 'Task' }, completedAt: { is: 'NOT_NULL' }, - ...whereFilters, - }, - orderBy: [ - { - createdAt: 'AscNullIsFirst', + id: { + in: activityTargets?.map((activityTarget) => activityTarget.activityId), }, - ], + type: { eq: 'Task' }, + }, + orderBy: { + createdAt: 'DescNullsFirst', + }, + onCompleted: () => { + if (activityObjectMetadataItem) { + registerOptimisticEffect({ + variables: { + filter: { + completedAt: { is: 'NOT_NULL' }, + id: { + in: activityTargets?.map( + (activityTarget) => activityTarget.activityId, + ), + }, + type: { eq: 'Task' }, + }, + orderBy: { + createdAt: 'DescNullsFirst', + }, + }, + definition: getRecordOptimisticEffectDefinition({ + objectMetadataItem: activityObjectMetadataItem, + }), + }); + } + }, }); const { objects: incompleteTaskData } = useFindManyObjectRecords({ objectNamePlural: 'activities', skip: !entity && !selectedFilter, filter: { - type: { equals: 'Task' }, completedAt: { is: 'NULL' }, - ...whereFilters, - }, - orderBy: [ - { - createdAt: 'DescNullIsFirst', + id: { + in: activityTargets?.map((activityTarget) => activityTarget.activityId), }, - ], + type: { eq: 'Task' }, + }, + orderBy: { + createdAt: 'DescNullsFirst', + }, + onCompleted: () => { + if (activityObjectMetadataItem) { + registerOptimisticEffect({ + variables: { + filter: { + completedAt: { is: 'NULL' }, + id: { + in: activityTargets?.map( + (activityTarget) => activityTarget.activityId, + ), + }, + type: { eq: 'Task' }, + }, + orderBy: { + createdAt: 'DescNullsFirst', + }, + }, + definition: getRecordOptimisticEffectDefinition({ + objectMetadataItem: activityObjectMetadataItem, + }), + }); + } + }, }); const todayOrPreviousTasks = incompleteTaskData?.filter((task) => { diff --git a/front/src/modules/activities/timeline/components/Timeline.tsx b/front/src/modules/activities/timeline/components/Timeline.tsx index 32317eae6..3daa5d3c5 100644 --- a/front/src/modules/activities/timeline/components/Timeline.tsx +++ b/front/src/modules/activities/timeline/components/Timeline.tsx @@ -51,10 +51,7 @@ export const Timeline = ({ entity }: { entity: ActivityTargetableEntity }) => { const { objects: activityTargets, loading } = useFindManyObjectRecords({ objectNamePlural: 'activityTargets', filter: { - or: { - companyId: { eq: entity.id }, - personId: { eq: entity.id }, - }, + [entity.type === 'Company' ? 'companyId' : 'personId']: { eq: entity.id }, }, }); @@ -62,7 +59,9 @@ export const Timeline = ({ entity }: { entity: ActivityTargetableEntity }) => { skip: !activityTargets?.length, objectNamePlural: 'activities', filter: { - activityTargets: { in: activityTargets?.map((at) => at.id) }, + id: { + in: activityTargets?.map((activityTarget) => activityTarget.activityId), + }, }, orderBy: { createdAt: 'AscNullsFirst', diff --git a/front/src/modules/object-record/hooks/useCreateOneObjectRecord.ts b/front/src/modules/object-record/hooks/useCreateOneObjectRecord.ts index 8166ffa8c..f5e5527f3 100644 --- a/front/src/modules/object-record/hooks/useCreateOneObjectRecord.ts +++ b/front/src/modules/object-record/hooks/useCreateOneObjectRecord.ts @@ -24,26 +24,25 @@ export const useCreateOneObjectRecord = ({ // TODO: type this with a minimal type at least with Record const [mutate] = useMutation(createOneMutation); - const createOneObject = - objectNameSingular && foundObjectMetadataItem - ? async (input: Record) => { - const createdObject = await mutate({ - variables: { - input: { ...input, id: v4() }, - }, - }); + const createOneObject = async (input: Record) => { + if (!foundObjectMetadataItem || !objectNameSingular) { + return null; + } - triggerOptimisticEffects( - `${capitalize(foundObjectMetadataItem.nameSingular)}Edge`, - createdObject.data[ - `create${capitalize(foundObjectMetadataItem.nameSingular)}` - ], - ); - return createdObject.data[ - `create${capitalize(objectNameSingular)}` - ] as T; - } - : undefined; + const createdObject = await mutate({ + variables: { + input: { ...input, id: v4() }, + }, + }); + + triggerOptimisticEffects( + `${capitalize(foundObjectMetadataItem.nameSingular)}Edge`, + createdObject.data[ + `create${capitalize(foundObjectMetadataItem.nameSingular)}` + ], + ); + return createdObject.data[`create${capitalize(objectNameSingular)}`] as T; + }; return { createOneObject, diff --git a/front/src/modules/object-record/hooks/useDeleteOneObjectRecord.ts b/front/src/modules/object-record/hooks/useDeleteOneObjectRecord.ts index 0b9287518..7e6b6c4cf 100644 --- a/front/src/modules/object-record/hooks/useDeleteOneObjectRecord.ts +++ b/front/src/modules/object-record/hooks/useDeleteOneObjectRecord.ts @@ -23,20 +23,18 @@ export const useDeleteOneObjectRecord = ({ const deleteOneObject = useCallback( async (idToDelete: string) => { - if (objectNameSingular && foundObjectMetadataItem) { - const deletedObject = await mutate({ - variables: { - idToDelete, - }, - refetchQueries: [getOperationName(findManyQuery) ?? ''], - }); - - return deletedObject.data[ - `create${capitalize(objectNameSingular)}` - ] as T; + if (!foundObjectMetadataItem || !objectNameSingular) { + return null; } - return null; + const deletedObject = await mutate({ + variables: { + idToDelete, + }, + refetchQueries: [getOperationName(findManyQuery) ?? ''], + }); + + return deletedObject.data[`create${capitalize(objectNameSingular)}`] as T; }, [foundObjectMetadataItem, mutate, objectNameSingular, findManyQuery], ); diff --git a/front/src/modules/object-record/hooks/useFindManyObjectRecords.ts b/front/src/modules/object-record/hooks/useFindManyObjectRecords.ts index 28469d6a1..ee94ba5e5 100644 --- a/front/src/modules/object-record/hooks/useFindManyObjectRecords.ts +++ b/front/src/modules/object-record/hooks/useFindManyObjectRecords.ts @@ -48,20 +48,17 @@ export const useFindManyObjectRecords = < isFetchingMoreObjectsFamilyState(objectNamePlural), ); - const { - objectMetadataItem: foundObjectMetadataItem, - objectNotFoundInMetadata, - findManyQuery, - } = useObjectMetadataItem({ - objectNamePlural, - }); + const { objectMetadataItem, objectNotFoundInMetadata, findManyQuery } = + useObjectMetadataItem({ + objectNamePlural, + }); const { enqueueSnackBar } = useSnackBar(); const { data, loading, error, fetchMore } = useQuery< PaginatedObjectType >(findManyQuery, { - skip: skip || !foundObjectMetadataItem || !objectNamePlural, + skip: skip || !objectMetadataItem || !objectNamePlural, variables: { filter: filter ?? {}, orderBy: orderBy ?? {}, @@ -130,7 +127,7 @@ export const useFindManyObjectRecords = < return Object.assign({}, prev, { [objectNamePlural]: { __typename: `${capitalize( - foundObjectMetadataItem?.nameSingular ?? '', + objectMetadataItem?.nameSingular ?? '', )}Connection`, edges: newEdges, pageInfo: fetchMoreResult?.[objectNamePlural].pageInfo, @@ -156,7 +153,7 @@ export const useFindManyObjectRecords = < fetchMore, filter, orderBy, - foundObjectMetadataItem, + objectMetadataItem, hasNextPage, setIsFetchingMoreObjects, enqueueSnackBar, @@ -174,6 +171,7 @@ export const useFindManyObjectRecords = < ); return { + objectMetadataItem, objects, loading, error, diff --git a/front/src/modules/object-record/hooks/useUpdateOneObjectRecord.ts b/front/src/modules/object-record/hooks/useUpdateOneObjectRecord.ts index 2878d3d40..6351f547c 100644 --- a/front/src/modules/object-record/hooks/useUpdateOneObjectRecord.ts +++ b/front/src/modules/object-record/hooks/useUpdateOneObjectRecord.ts @@ -18,29 +18,28 @@ export const useUpdateOneObjectRecord = ({ // TODO: type this with a minimal type at least with Record const [mutate] = useMutation(updateOneMutation); - const updateOneObject = - objectNameSingular && foundObjectMetadataItem - ? async ({ - idToUpdate, - input, - }: { - idToUpdate: string; - input: Record; - }) => { - const updatedObject = await mutate({ - variables: { - idToUpdate: idToUpdate, - input: { - ...input, - }, - }, - }); + const updateOneObject = async ({ + idToUpdate, + input, + }: { + idToUpdate: string; + input: Record; + }) => { + if (!foundObjectMetadataItem || !objectNameSingular) { + return null; + } - return updatedObject.data[ - `update${capitalize(objectNameSingular)}` - ] as T; - } - : undefined; + const updatedObject = await mutate({ + variables: { + idToUpdate: idToUpdate, + input: { + ...input, + }, + }, + }); + + return updatedObject.data[`update${capitalize(objectNameSingular)}`] as T; + }; return { updateOneObject, diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts index 70bbfa783..9746416de 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/activity.ts @@ -259,7 +259,7 @@ export const seedActivityFieldMetadata = async ( workspaceId: SeedWorkspaceId, isActive: true, type: FieldMetadataType.RELATION, - name: 'Comments', + name: 'comments', label: 'Comments', targetColumnMap: {}, description: 'Activity comments', diff --git a/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts b/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts index aaf97ac0f..effd3b336 100644 --- a/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts +++ b/server/src/database/typeorm-seeds/metadata/field-metadata/comment.ts @@ -130,7 +130,7 @@ export const seedCommentFieldMetadata = async ( targetColumnMap: {}, description: 'Comment author', icon: 'IconCircleUser', - isNullable: false, + isNullable: true, isSystem: false, defaultValue: undefined, }, @@ -146,7 +146,7 @@ export const seedCommentFieldMetadata = async ( targetColumnMap: {}, description: 'Comment author id foreign key', icon: undefined, - isNullable: false, + isNullable: true, isSystem: true, defaultValue: undefined, }, @@ -162,7 +162,7 @@ export const seedCommentFieldMetadata = async ( targetColumnMap: {}, description: 'Comment activity', icon: 'IconNotes', - isNullable: false, + isNullable: true, isSystem: false, defaultValue: undefined, }, @@ -178,7 +178,7 @@ export const seedCommentFieldMetadata = async ( targetColumnMap: {}, description: 'Activity id foreign key', icon: undefined, - isNullable: false, + isNullable: true, isSystem: true, defaultValue: undefined, }, diff --git a/server/src/workspace/workspace-manager/standard-objects/comment.ts b/server/src/workspace/workspace-manager/standard-objects/comment.ts index 9bb772cd2..cf1d2b734 100644 --- a/server/src/workspace/workspace-manager/standard-objects/comment.ts +++ b/server/src/workspace/workspace-manager/standard-objects/comment.ts @@ -37,7 +37,7 @@ const commentMetadata = { }, description: 'Comment author', icon: 'IconCircleUser', - isNullable: false, + isNullable: true, }, { isCustom: false, @@ -50,7 +50,7 @@ const commentMetadata = { }, description: 'Comment activity', icon: 'IconNotes', - isNullable: false, + isNullable: true, }, ], };