From 037663ddcd1efb483c96ae86d1ff766d1eade632 Mon Sep 17 00:00:00 2001 From: Etienne <45695613+etiennejouan@users.noreply.github.com> Date: Thu, 6 Nov 2025 16:21:57 +0100 Subject: [PATCH] RichText editor fixes (#15678) closes https://github.com/twentyhq/twenty/issues/15474 closes https://github.com/twentyhq/twenty/issues/15677 --- .../components/ActivityRichTextEditor.tsx | 26 ++++++++++++++++--- .../common-create-one-query-runner.service.ts | 13 +++++++--- .../common-delete-one-query-runner.service.ts | 13 +++++++--- ...common-destroy-one-query-runner.service.ts | 13 +++++++--- ...common-restore-one-query-runner.service.ts | 13 +++++++--- .../common-update-one-query-runner.service.ts | 13 +++++++--- 6 files changed, 68 insertions(+), 23 deletions(-) diff --git a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx index 7fc39b540e..a9fa9a3e27 100644 --- a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx +++ b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx @@ -26,6 +26,7 @@ import { SIDE_PANEL_FOCUS_ID } from '@/command-menu/constants/SidePanelFocusId'; import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { useLabelIdentifierFieldMetadataItem } from '@/object-metadata/hooks/useLabelIdentifierFieldMetadataItem'; import { useDeleteManyRecords } from '@/object-record/hooks/useDeleteManyRecords'; +import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords'; import { useRestoreManyRecords } from '@/object-record/hooks/useRestoreManyRecords'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; @@ -83,6 +84,24 @@ export const ActivityRichTextEditor = ({ const { removeFocusItemFromFocusStackById } = useRemoveFocusItemFromFocusStackById(); + const { records: attachments } = useFindManyRecords({ + objectNameSingular: CoreObjectNameSingular.Attachment, + filter: { + or: [ + { + noteId: { + eq: activityId, + }, + }, + { + taskId: { + eq: activityId, + }, + }, + ], + }, + }); + const { fetchAllRecords: findSoftDeletedAttachments } = useLazyFetchAllRecords({ objectNameSingular: CoreObjectNameSingular.Attachment, @@ -208,7 +227,7 @@ export const ActivityRichTextEditor = ({ const attachmentIdsToDelete = getActivityAttachmentIdsToDelete( newStringifiedBody, - oldActivity?.attachments, + attachments, oldActivity?.bodyV2.blocknote, ); @@ -220,7 +239,7 @@ export const ActivityRichTextEditor = ({ const attachmentPathsToRestore = getActivityAttachmentPathsToRestore( newStringifiedBody, - oldActivity?.attachments, + attachments, ); if (attachmentPathsToRestore.length > 0) { @@ -238,7 +257,7 @@ export const ActivityRichTextEditor = ({ } const attachmentsToUpdate = getActivityAttachmentIdsAndNameToUpdate( newStringifiedBody, - oldActivity?.attachments, + attachments, ); if (attachmentsToUpdate.length > 0) { for (const attachmentToUpdate of attachmentsToUpdate) { @@ -251,6 +270,7 @@ export const ActivityRichTextEditor = ({ } }, [ + attachments, activityId, cache, objectMetadataItemActivity, diff --git a/packages/twenty-server/src/engine/api/common/common-query-runners/common-create-one-query-runner.service.ts b/packages/twenty-server/src/engine/api/common/common-query-runners/common-create-one-query-runner.service.ts index a1d1cbd55b..3fa4a53f9e 100644 --- a/packages/twenty-server/src/engine/api/common/common-query-runners/common-create-one-query-runner.service.ts +++ b/packages/twenty-server/src/engine/api/common/common-query-runners/common-create-one-query-runner.service.ts @@ -67,11 +67,16 @@ export class CommonCreateOneQueryRunnerService extends CommonBaseQueryRunnerServ async processQueryResult( queryResult: ObjectRecord, - _objectMetadataItemId: string, - _objectMetadataMaps: ObjectMetadataMaps, - _authContext: WorkspaceAuthContext, + objectMetadataItemId: string, + objectMetadataMaps: ObjectMetadataMaps, + authContext: WorkspaceAuthContext, ): Promise { - return queryResult; + return this.commonResultGettersService.processRecord( + queryResult, + objectMetadataItemId, + objectMetadataMaps, + authContext.workspace.id, + ); } async validate( diff --git a/packages/twenty-server/src/engine/api/common/common-query-runners/common-delete-one-query-runner.service.ts b/packages/twenty-server/src/engine/api/common/common-query-runners/common-delete-one-query-runner.service.ts index 7949b8224a..b9fb2c20fc 100644 --- a/packages/twenty-server/src/engine/api/common/common-query-runners/common-delete-one-query-runner.service.ts +++ b/packages/twenty-server/src/engine/api/common/common-query-runners/common-delete-one-query-runner.service.ts @@ -67,11 +67,16 @@ export class CommonDeleteOneQueryRunnerService extends CommonBaseQueryRunnerServ async processQueryResult( queryResult: ObjectRecord, - _objectMetadataItemId: string, - _objectMetadataMaps: ObjectMetadataMaps, - _authContext: WorkspaceAuthContext, + objectMetadataItemId: string, + objectMetadataMaps: ObjectMetadataMaps, + authContext: WorkspaceAuthContext, ): Promise { - return queryResult; + return this.commonResultGettersService.processRecord( + queryResult, + objectMetadataItemId, + objectMetadataMaps, + authContext.workspace.id, + ); } async validate( diff --git a/packages/twenty-server/src/engine/api/common/common-query-runners/common-destroy-one-query-runner.service.ts b/packages/twenty-server/src/engine/api/common/common-query-runners/common-destroy-one-query-runner.service.ts index 7eb424bacf..9b8529c48a 100644 --- a/packages/twenty-server/src/engine/api/common/common-query-runners/common-destroy-one-query-runner.service.ts +++ b/packages/twenty-server/src/engine/api/common/common-query-runners/common-destroy-one-query-runner.service.ts @@ -65,11 +65,16 @@ export class CommonDestroyOneQueryRunnerService extends CommonBaseQueryRunnerSer async processQueryResult( queryResult: ObjectRecord, - _objectMetadataItemId: string, - _objectMetadataMaps: ObjectMetadataMaps, - _authContext: WorkspaceAuthContext, + objectMetadataItemId: string, + objectMetadataMaps: ObjectMetadataMaps, + authContext: WorkspaceAuthContext, ): Promise { - return queryResult; + return this.commonResultGettersService.processRecord( + queryResult, + objectMetadataItemId, + objectMetadataMaps, + authContext.workspace.id, + ); } async validate( diff --git a/packages/twenty-server/src/engine/api/common/common-query-runners/common-restore-one-query-runner.service.ts b/packages/twenty-server/src/engine/api/common/common-query-runners/common-restore-one-query-runner.service.ts index 40a1398376..61332332d0 100644 --- a/packages/twenty-server/src/engine/api/common/common-query-runners/common-restore-one-query-runner.service.ts +++ b/packages/twenty-server/src/engine/api/common/common-query-runners/common-restore-one-query-runner.service.ts @@ -67,11 +67,16 @@ export class CommonRestoreOneQueryRunnerService extends CommonBaseQueryRunnerSer async processQueryResult( queryResult: ObjectRecord, - _objectMetadataItemId: string, - _objectMetadataMaps: ObjectMetadataMaps, - _authContext: WorkspaceAuthContext, + objectMetadataItemId: string, + objectMetadataMaps: ObjectMetadataMaps, + authContext: WorkspaceAuthContext, ): Promise { - return queryResult; + return this.commonResultGettersService.processRecord( + queryResult, + objectMetadataItemId, + objectMetadataMaps, + authContext.workspace.id, + ); } async validate( diff --git a/packages/twenty-server/src/engine/api/common/common-query-runners/common-update-one-query-runner.service.ts b/packages/twenty-server/src/engine/api/common/common-query-runners/common-update-one-query-runner.service.ts index af3fa4665c..cfe1b79a6d 100644 --- a/packages/twenty-server/src/engine/api/common/common-query-runners/common-update-one-query-runner.service.ts +++ b/packages/twenty-server/src/engine/api/common/common-query-runners/common-update-one-query-runner.service.ts @@ -77,11 +77,16 @@ export class CommonUpdateOneQueryRunnerService extends CommonBaseQueryRunnerServ async processQueryResult( queryResult: ObjectRecord, - _objectMetadataItemId: string, - _objectMetadataMaps: ObjectMetadataMaps, - _authContext: WorkspaceAuthContext, + objectMetadataItemId: string, + objectMetadataMaps: ObjectMetadataMaps, + authContext: WorkspaceAuthContext, ): Promise { - return queryResult; + return this.commonResultGettersService.processRecord( + queryResult, + objectMetadataItemId, + objectMetadataMaps, + authContext.workspace.id, + ); } async validate(