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
@@ -0,0 +1,64 @@
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition';
import { FormMultiSelectFieldInput } from '@/object-record/record-field/form-types/components/FormMultiSelectFieldInput';
import { FieldMultiSelectValue } from '@/object-record/record-field/types/FieldMetadata';
import { SUPPORTED_FIELD_METADATA_TYPES } from '@/workflow/constants/SupportedFieldMetadataTypes';
import { isDefined } from 'twenty-shared/utils';
import { useIcons } from 'twenty-ui/display';
export const WorkflowFieldsMultiSelect = ({
label,
objectMetadataItem,
handleFieldsChange,
readonly,
defaultFields,
placeholder,
}: {
label: string;
placeholder: string;
objectMetadataItem: ObjectMetadataItem;
handleFieldsChange: (field: FieldMultiSelectValue | string) => void;
readonly: boolean;
defaultFields: string[] | undefined | null;
}) => {
const { getIcon } = useIcons();
const inlineFieldMetadataItems = objectMetadataItem?.fields
.filter(
(fieldMetadataItem) =>
!fieldMetadataItem.isSystem &&
fieldMetadataItem.isActive &&
SUPPORTED_FIELD_METADATA_TYPES.includes(fieldMetadataItem.type),
)
.sort((fieldMetadataItemA, fieldMetadataItemB) =>
fieldMetadataItemA.name.localeCompare(fieldMetadataItemB.name),
);
const inlineFieldDefinitions = isDefined(objectMetadataItem)
? inlineFieldMetadataItems.map((fieldMetadataItem) =>
formatFieldMetadataItemAsFieldDefinition({
field: fieldMetadataItem,
objectMetadataItem: objectMetadataItem,
showLabel: true,
labelWidth: 90,
}),
)
: [];
return (
<FormMultiSelectFieldInput
testId="workflow-fields-multi-select"
label={label}
defaultValue={defaultFields}
options={inlineFieldDefinitions.map((field) => ({
label: field.label,
value: field.metadata.fieldName,
icon: getIcon(field.iconName),
color: 'gray',
}))}
onChange={handleFieldsChange}
placeholder={placeholder}
readonly={readonly}
/>
);
};