diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx index 961751f815..0429bbc584 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx @@ -330,7 +330,9 @@ export const WorkflowEditActionFormBuilder = ({ .placeholder} - {field.type === 'RECORD' && ( + {(field.type === 'RECORD' || + field.type === 'SELECT' || + field.type === 'MULTI_SELECT') && ( ); case FieldMetadataType.SELECT: + case FieldMetadataType.MULTI_SELECT: return ( ); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowFormFieldSettingsSelect.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowFormFieldSettingsSelect.tsx index 0f662fddf8..ce6cf6ffcb 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowFormFieldSettingsSelect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowFormFieldSettingsSelect.tsx @@ -9,7 +9,6 @@ import { getDefaultFormFieldSettings } from '@/workflow/workflow-steps/workflow- import { t } from '@lingui/core/macro'; import { styled } from '@linaria/react'; import camelCase from 'lodash.camelcase'; -import { FieldMetadataType } from 'twenty-shared/types'; import { themeCssVariables } from 'twenty-ui/theme-constants'; type WorkflowFormFieldSettingsSelectProps = { @@ -50,14 +49,14 @@ export const WorkflowFormFieldSettingsSelect = ({ return acc.concat( objectMetadataItem.fields .filter( - (field) => - field.isActive && - !isHiddenSystemField(field) && - field.type === FieldMetadataType.SELECT, + (objectField) => + objectField.isActive && + !isHiddenSystemField(objectField) && + objectField.type === field.type, ) - .map((field) => ({ - label: `${objectMetadataItem.labelSingular} > ${field.label}`, - value: field.id, + .map((objectField) => ({ + label: `${objectMetadataItem.labelSingular} > ${objectField.label}`, + value: objectField.id, })), ); }, @@ -78,9 +77,7 @@ export const WorkflowFormFieldSettingsSelect = ({ }); }} defaultValue={field.label} - placeholder={ - getDefaultFormFieldSettings(FieldMetadataType.SELECT).label - } + placeholder={getDefaultFormFieldSettings(field.type).label} /> diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/constants/FormSelectFieldTypeOptions.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/constants/FormSelectFieldTypeOptions.ts index 6fb467d27e..7330c1f68b 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/constants/FormSelectFieldTypeOptions.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/constants/FormSelectFieldTypeOptions.ts @@ -6,6 +6,7 @@ import { IllustrationIconNumbers, IllustrationIconOneToMany, IllustrationIconTag, + IllustrationIconTags, IllustrationIconText, } from 'twenty-ui/display'; import { type SelectOption } from 'twenty-ui/input'; @@ -37,4 +38,9 @@ export const FORM_SELECT_FIELD_TYPE_OPTIONS: SelectOption value: FieldMetadataType.SELECT, Icon: IllustrationIconTag, }, + { + label: 'Multi-Select', + value: FieldMetadataType.MULTI_SELECT, + Icon: IllustrationIconTags, + }, ]; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/types/WorkflowFormFieldType.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/types/WorkflowFormFieldType.ts index 0aada5a1ff..0d021f4f41 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/types/WorkflowFormFieldType.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/types/WorkflowFormFieldType.ts @@ -5,4 +5,5 @@ export type WorkflowFormFieldType = | FieldMetadataType.NUMBER | FieldMetadataType.DATE | FieldMetadataType.SELECT + | FieldMetadataType.MULTI_SELECT | 'RECORD'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/__tests__/getDefaultFormFieldSettings.test.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/__tests__/getDefaultFormFieldSettings.test.ts index e58f90500a..72fa2a6445 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/__tests__/getDefaultFormFieldSettings.test.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/__tests__/getDefaultFormFieldSettings.test.ts @@ -54,6 +54,20 @@ describe('getDefaultFormFieldSettings', () => { }); }); + it('should return correct default settings for MULTI_SELECT field type', () => { + const result = getDefaultFormFieldSettings(FieldMetadataType.MULTI_SELECT); + expect(result).toEqual({ + id: 'test-uuid-123', + name: 'multiSelect', + label: 'Multi-Select', + placeholder: 'Choose values', + settings: { + selectType: 'EXISTING_FIELD', + selectedFieldId: undefined, + }, + }); + }); + it('should generate unique UUID for each call', () => { getDefaultFormFieldSettings(FieldMetadataType.TEXT); getDefaultFormFieldSettings(FieldMetadataType.NUMBER); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts index b10fd51d9f..eebd4dc078 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings.ts @@ -47,6 +47,17 @@ export const getDefaultFormFieldSettings = (type: WorkflowFormFieldType) => { selectedFieldId: undefined, }, }; + case FieldMetadataType.MULTI_SELECT: + return { + id: v4(), + name: 'multiSelect', + label: 'Multi-Select', + placeholder: 'Choose values', + settings: { + selectType: 'EXISTING_FIELD', + selectedFieldId: undefined, + }, + }; default: assertUnreachable(type); } diff --git a/packages/twenty-shared/src/workflow/schemas/form-action-settings-schema.ts b/packages/twenty-shared/src/workflow/schemas/form-action-settings-schema.ts index 149afb1b48..a529afb4e7 100644 --- a/packages/twenty-shared/src/workflow/schemas/form-action-settings-schema.ts +++ b/packages/twenty-shared/src/workflow/schemas/form-action-settings-schema.ts @@ -14,6 +14,7 @@ export const workflowFormActionSettingsSchema = z.literal(FieldMetadataType.NUMBER), z.literal(FieldMetadataType.DATE), z.literal(FieldMetadataType.SELECT), + z.literal(FieldMetadataType.MULTI_SELECT), z.literal('RECORD'), ]), placeholder: z.string().optional(),