From 48e25815812409ccba632b905c8bce2f672dd930 Mon Sep 17 00:00:00 2001 From: Baptiste Devessier Date: Thu, 24 Apr 2025 17:02:26 +0200 Subject: [PATCH] Stop persisting JSON fields in workflow runs (#11715) ## Before https://github.com/user-attachments/assets/903c5771-ac15-49a6-9175-40c8b027655b ## After https://github.com/user-attachments/assets/26aedf77-31ac-439a-a39c-57a274010f3f --- .../record-field/hooks/usePersistField.ts | 9 ++++++++- .../input/components/RawJsonFieldInput.tsx | 14 ++++++-------- .../meta-types/utils/isWorkflowRunJsonField.ts | 15 +++++++++++++++ .../record-field/utils/isFieldValueReadOnly.ts | 7 +++++-- 4 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 packages/twenty-front/src/modules/object-record/record-field/meta-types/utils/isWorkflowRunJsonField.ts diff --git a/packages/twenty-front/src/modules/object-record/record-field/hooks/usePersistField.ts b/packages/twenty-front/src/modules/object-record/record-field/hooks/usePersistField.ts index 5a190391a..a0f6054b6 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/hooks/usePersistField.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/hooks/usePersistField.ts @@ -25,6 +25,7 @@ import { isFieldSelect } from '@/object-record/record-field/types/guards/isField import { isFieldSelectValue } from '@/object-record/record-field/types/guards/isFieldSelectValue'; import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector'; +import { isWorkflowRunJsonField } from '@/object-record/record-field/meta-types/utils/isWorkflowRunJsonField'; import { isFieldArray } from '@/object-record/record-field/types/guards/isFieldArray'; import { isFieldArrayValue } from '@/object-record/record-field/types/guards/isFieldArrayValue'; import { isFieldRichText } from '@/object-record/record-field/types/guards/isFieldRichText'; @@ -126,6 +127,12 @@ export const usePersistField = () => { const fieldIsArray = isFieldArray(fieldDefinition) && isFieldArrayValue(valueToPersist); + const isUnpersistableRawJsonField = isWorkflowRunJsonField({ + objectMetadataNameSingular: + fieldDefinition.metadata.objectMetadataNameSingular, + fieldName: fieldDefinition.metadata.fieldName, + }); + const isValuePersistable = fieldIsRelationToOneObject || fieldIsText || @@ -142,7 +149,7 @@ export const usePersistField = () => { fieldIsSelect || fieldIsMultiSelect || fieldIsAddress || - fieldIsRawJson || + (fieldIsRawJson && !isUnpersistableRawJsonField) || fieldIsArray || fieldIsRichText || fieldIsRichTextV2; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RawJsonFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RawJsonFieldInput.tsx index 5c5c1fdbb..c8c8ed881 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RawJsonFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/RawJsonFieldInput.tsx @@ -1,6 +1,6 @@ import styled from '@emotion/styled'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { isWorkflowRunJsonField } from '@/object-record/record-field/meta-types/utils/isWorkflowRunJsonField'; import { FieldInputClickOutsideEvent, FieldInputEvent, @@ -131,13 +131,11 @@ export const RawJsonFieldInput = ({ [handleShiftTab, draftValue], ); - // FIXME: This is temporary. We'll soon introduce a new display mode for all fields and we'll have to remove this code. - const isWorkflowRunOutputField = - fieldDefinition.metadata.objectMetadataNameSingular === - CoreObjectNameSingular.WorkflowRun && - fieldDefinition.metadata.fieldName === 'output'; - - const showEditingButton = !isWorkflowRunOutputField; + const showEditingButton = !isWorkflowRunJsonField({ + objectMetadataNameSingular: + fieldDefinition.metadata.objectMetadataNameSingular, + fieldName: fieldDefinition.metadata.fieldName, + }); const handleStartEditing = () => { setIsEditing(true); diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/utils/isWorkflowRunJsonField.ts b/packages/twenty-front/src/modules/object-record/record-field/meta-types/utils/isWorkflowRunJsonField.ts new file mode 100644 index 000000000..c4556aa1a --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/utils/isWorkflowRunJsonField.ts @@ -0,0 +1,15 @@ +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; + +// FIXME: This is temporary. We'll soon introduce a new display mode for all fields and we'll have to remove this code. +export const isWorkflowRunJsonField = ({ + objectMetadataNameSingular, + fieldName, +}: { + fieldName: string | undefined; + objectMetadataNameSingular: string | undefined; +}) => { + return ( + objectMetadataNameSingular === CoreObjectNameSingular.WorkflowRun && + (fieldName === 'output' || fieldName === 'context') + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts b/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts index 80e6b3736..048d00335 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts @@ -1,5 +1,6 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata'; +import { isWorkflowRunJsonField } from '@/object-record/record-field/meta-types/utils/isWorkflowRunJsonField'; import { isFieldActor } from '@/object-record/record-field/types/guards/isFieldActor'; import { isFieldRichText } from '@/object-record/record-field/types/guards/isFieldRichText'; @@ -26,8 +27,10 @@ export const isFieldValueReadOnly = ({ } if ( - objectNameSingular === CoreObjectNameSingular.WorkflowRun && - fieldName === 'output' + isWorkflowRunJsonField({ + objectMetadataNameSingular: objectNameSingular, + fieldName, + }) ) { return false; }