Add filter fields on update record trigger (#12354)

Fixes https://github.com/twentyhq/core-team-issues/issues/928

<img width="503" alt="Capture d’écran 2025-05-28 à 15 04 08"
src="https://github.com/user-attachments/assets/b83ceced-4b3a-454c-83c1-1176f6836d96"
/>
This commit is contained in:
Thomas Trompette
2025-05-28 16:56:29 +02:00
committed by GitHub
parent 630e4780b8
commit b90cb3e1f9
7 changed files with 252 additions and 46 deletions
@@ -5,8 +5,9 @@ import { useEffect, useState } from 'react';
import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition';
import { FormFieldInput } from '@/object-record/record-field/components/FormFieldInput';
import { FormMultiSelectFieldInput } from '@/object-record/record-field/form-types/components/FormMultiSelectFieldInput';
import { FormSingleRecordPicker } from '@/object-record/record-field/form-types/components/FormSingleRecordPicker';
import { WorkflowFieldsMultiSelect } from '@/workflow/components/WorkflowEditUpdateEventFieldsMultiSelect';
import { SUPPORTED_FIELD_METADATA_TYPES } from '@/workflow/constants/SupportedFieldMetadataTypes';
import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody';
import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/WorkflowStepHeader';
import { useActionHeaderTypeOrThrow } from '@/workflow/workflow-steps/workflow-actions/hooks/useActionHeaderTypeOrThrow';
@@ -18,7 +19,6 @@ import { HorizontalSeparator, useIcons } from 'twenty-ui/display';
import { SelectOption } from 'twenty-ui/input';
import { JsonValue } from 'type-fest';
import { useDebouncedCallback } from 'use-debounce';
import { FieldMetadataType } from '~/generated-metadata/graphql';
type WorkflowEditActionUpdateRecordProps = {
action: WorkflowUpdateRecordAction;
@@ -39,24 +39,6 @@ type UpdateRecordFormData = {
[field: string]: unknown;
};
const AVAILABLE_FIELD_METADATA_TYPES = [
FieldMetadataType.TEXT,
FieldMetadataType.NUMBER,
FieldMetadataType.DATE,
FieldMetadataType.BOOLEAN,
FieldMetadataType.SELECT,
FieldMetadataType.MULTI_SELECT,
FieldMetadataType.EMAILS,
FieldMetadataType.LINKS,
FieldMetadataType.FULL_NAME,
FieldMetadataType.ADDRESS,
FieldMetadataType.PHONES,
FieldMetadataType.CURRENCY,
FieldMetadataType.DATE_TIME,
FieldMetadataType.RAW_JSON,
FieldMetadataType.UUID,
];
export const WorkflowEditActionUpdateRecord = ({
action,
actionOptions,
@@ -106,7 +88,7 @@ export const WorkflowEditActionUpdateRecord = ({
(fieldMetadataItem) =>
!fieldMetadataItem.isSystem &&
fieldMetadataItem.isActive &&
AVAILABLE_FIELD_METADATA_TYPES.includes(fieldMetadataItem.type),
SUPPORTED_FIELD_METADATA_TYPES.includes(fieldMetadataItem.type),
)
.sort((fieldMetadataItemA, fieldMetadataItemB) =>
fieldMetadataItemA.name.localeCompare(fieldMetadataItemB.name),
@@ -222,22 +204,16 @@ export const WorkflowEditActionUpdateRecord = ({
/>
)}
{isDefined(inlineFieldDefinitions) && (
<FormMultiSelectFieldInput
testId="workflow-edit-action-record-update-fields-to-update"
{isDefined(selectedObjectMetadataItem) && (
<WorkflowFieldsMultiSelect
label="Fields to update"
defaultValue={formData.fieldsToUpdate}
options={inlineFieldDefinitions.map((field) => ({
label: field.label,
value: field.metadata.fieldName,
icon: getIcon(field.iconName),
color: 'gray',
}))}
onChange={(fieldsToUpdate) =>
placeholder="Select fields to update"
objectMetadataItem={selectedObjectMetadataItem}
handleFieldsChange={(fieldsToUpdate) =>
handleFieldChange('fieldsToUpdate', fieldsToUpdate)
}
placeholder="Select fields to update"
readonly={isFormDisabled}
readonly={isFormDisabled ?? false}
defaultFields={formData.fieldsToUpdate}
/>
)}
@@ -119,9 +119,7 @@ export const DisabledWithEmptyValues: Story = {
expect(openRecordSelectButton).not.toBeInTheDocument();
const firstSelectedUpdatableField = await within(
await canvas.findByTestId(
'workflow-edit-action-record-update-fields-to-update',
),
await canvas.findByTestId('workflow-fields-multi-select'),
).findByText('Creation date');
await userEvent.click(firstSelectedUpdatableField);
@@ -189,9 +187,7 @@ export const DisabledWithDefaultStaticValues: Story = {
expect(openRecordSelectButton).not.toBeInTheDocument();
const firstSelectedUpdatableField = await within(
await canvas.findByTestId(
'workflow-edit-action-record-update-fields-to-update',
),
await canvas.findByTestId('workflow-fields-multi-select'),
).findByText('Creation date');
await userEvent.click(firstSelectedUpdatableField);
@@ -253,9 +249,7 @@ export const DisabledWithDefaultVariableValues: Story = {
expect(openRecordSelectButton).not.toBeInTheDocument();
const firstSelectedUpdatableField = await within(
await canvas.findByTestId(
'workflow-edit-action-record-update-fields-to-update',
),
await canvas.findByTestId('workflow-fields-multi-select'),
).findByText('Creation date');
await userEvent.click(firstSelectedUpdatableField);