Fix filters + add behaviour for select (#13997)
On field selection, we need to retrieve the fieldMetadata to set the filter type. Current code was using the current step filter fieldMetdataId instead of the new one. Also adding a special behaviour for Select filter: it behaves as arrays/multiselect but the opearands are not the same. --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
+40
-28
@@ -1,8 +1,9 @@
|
||||
import { useFieldMetadataItemById } from '@/object-metadata/hooks/useFieldMetadataItemById';
|
||||
import { useGetFieldMetadataItemByIdOrThrow } from '@/object-metadata/hooks/useGetFieldMetadataItemById';
|
||||
import { SelectControl } from '@/ui/input/components/SelectControl';
|
||||
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
|
||||
import { useWorkflowVersionIdOrThrow } from '@/workflow/hooks/useWorkflowVersionIdOrThrow';
|
||||
import { stepsOutputSchemaFamilySelector } from '@/workflow/states/selectors/stepsOutputSchemaFamilySelector';
|
||||
import { useFilterFieldMetadataItem } from '@/workflow/workflow-steps/workflow-actions/filter-action/hooks/useFilterFieldMetadataItem';
|
||||
import { useUpsertStepFilterSettings } from '@/workflow/workflow-steps/workflow-actions/filter-action/hooks/useUpsertStepFilterSettings';
|
||||
import { WorkflowStepFilterContext } from '@/workflow/workflow-steps/workflow-actions/filter-action/states/context/WorkflowStepFilterContext';
|
||||
import { getViewFilterOperands } from '@/workflow/workflow-steps/workflow-actions/filter-action/utils/getStepFilterOperands';
|
||||
@@ -25,6 +26,8 @@ type WorkflowStepFilterFieldSelectProps = {
|
||||
const NON_SELECTABLE_FIELD_TYPES = [
|
||||
FieldMetadataType.ACTOR,
|
||||
FieldMetadataType.RICH_TEXT_V2,
|
||||
FieldMetadataType.ARRAY,
|
||||
FieldMetadataType.RATING,
|
||||
];
|
||||
|
||||
export const WorkflowStepFilterFieldSelect = ({
|
||||
@@ -53,10 +56,11 @@ export const WorkflowStepFilterFieldSelect = ({
|
||||
|
||||
const { getIcon } = useIcons();
|
||||
|
||||
const {
|
||||
fieldMetadataItem: filterFieldMetadataItem,
|
||||
objectMetadataItem: filterObjectMetadataItem,
|
||||
} = useFilterFieldMetadataItem(stepFilter.fieldMetadataId ?? '');
|
||||
const { fieldMetadataItem: filterFieldMetadataItem } =
|
||||
useFieldMetadataItemById(stepFilter.fieldMetadataId ?? '');
|
||||
|
||||
const { getFieldMetadataItemByIdOrThrow } =
|
||||
useGetFieldMetadataItemByIdOrThrow();
|
||||
|
||||
const availableVariablesInWorkflowStep = useAvailableVariablesInWorkflowStep({
|
||||
shouldDisplayRecordFields,
|
||||
@@ -92,6 +96,13 @@ export const WorkflowStepFilterFieldSelect = ({
|
||||
isFullRecord: false,
|
||||
});
|
||||
|
||||
const {
|
||||
fieldMetadataItem: filterFieldMetadataItem,
|
||||
objectMetadataItem: filterObjectMetadataItem,
|
||||
} = isDefined(fieldMetadataId)
|
||||
? getFieldMetadataItemByIdOrThrow(fieldMetadataId)
|
||||
: { fieldMetadataItem: undefined, objectMetadataItem: undefined };
|
||||
|
||||
const filterType = isDefined(fieldMetadataId)
|
||||
? (filterFieldMetadataItem?.type ?? 'unknown')
|
||||
: variableType;
|
||||
@@ -119,11 +130,10 @@ export const WorkflowStepFilterFieldSelect = ({
|
||||
});
|
||||
},
|
||||
[
|
||||
workflowVersionId,
|
||||
getFieldMetadataItemByIdOrThrow,
|
||||
upsertStepFilterSettings,
|
||||
stepFilter,
|
||||
workflowVersionId,
|
||||
filterFieldMetadataItem,
|
||||
filterObjectMetadataItem,
|
||||
],
|
||||
);
|
||||
|
||||
@@ -185,25 +195,27 @@ export const WorkflowStepFilterFieldSelect = ({
|
||||
}
|
||||
|
||||
return (
|
||||
<WorkflowVariablesDropdown
|
||||
instanceId={dropdownId}
|
||||
onVariableSelect={handleChange}
|
||||
clickableComponent={
|
||||
<SelectControl
|
||||
selectedOption={{
|
||||
value: stepFilter.stepOutputKey,
|
||||
label: label,
|
||||
Icon: filterFieldMetadataItem?.icon
|
||||
? getIcon(filterFieldMetadataItem.icon)
|
||||
: undefined,
|
||||
}}
|
||||
textAccent={isSelectedFieldNotFound ? 'placeholder' : 'default'}
|
||||
/>
|
||||
}
|
||||
shouldDisplayRecordFields={shouldDisplayRecordFields}
|
||||
shouldDisplayRecordObjects={shouldDisplayRecordObjects}
|
||||
shouldEnableSelectRelationObject={true}
|
||||
fieldTypesToExclude={NON_SELECTABLE_FIELD_TYPES}
|
||||
/>
|
||||
<>
|
||||
<WorkflowVariablesDropdown
|
||||
instanceId={dropdownId}
|
||||
onVariableSelect={handleChange}
|
||||
clickableComponent={
|
||||
<SelectControl
|
||||
selectedOption={{
|
||||
value: stepFilter.stepOutputKey,
|
||||
label: label,
|
||||
Icon: filterFieldMetadataItem?.icon
|
||||
? getIcon(filterFieldMetadataItem.icon)
|
||||
: undefined,
|
||||
}}
|
||||
textAccent={isSelectedFieldNotFound ? 'placeholder' : 'default'}
|
||||
/>
|
||||
}
|
||||
shouldDisplayRecordFields={shouldDisplayRecordFields}
|
||||
shouldDisplayRecordObjects={shouldDisplayRecordObjects}
|
||||
shouldEnableSelectRelationObject={true}
|
||||
fieldTypesToExclude={NON_SELECTABLE_FIELD_TYPES}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
+2
-2
@@ -1,3 +1,4 @@
|
||||
import { useFieldMetadataItemById } from '@/object-metadata/hooks/useFieldMetadataItemById';
|
||||
import { configurableViewFilterOperands } from '@/object-record/object-filter-dropdown/utils/configurableViewFilterOperands';
|
||||
import { FormFieldInput } from '@/object-record/record-field/ui/components/FormFieldInput';
|
||||
import { FormMultiSelectFieldInput } from '@/object-record/record-field/ui/form-types/components/FormMultiSelectFieldInput';
|
||||
@@ -7,7 +8,6 @@ import { FormTextFieldInput } from '@/object-record/record-field/ui/form-types/c
|
||||
import { type FieldMetadata } from '@/object-record/record-field/ui/types/FieldMetadata';
|
||||
|
||||
import { WorkflowStepFilterValueCompositeInput } from '@/workflow/workflow-steps/workflow-actions/filter-action/components/WorkflowStepFilterValueCompositeInput';
|
||||
import { useFilterFieldMetadataItem } from '@/workflow/workflow-steps/workflow-actions/filter-action/hooks/useFilterFieldMetadataItem';
|
||||
import { useUpsertStepFilterSettings } from '@/workflow/workflow-steps/workflow-actions/filter-action/hooks/useUpsertStepFilterSettings';
|
||||
import { WorkflowStepFilterContext } from '@/workflow/workflow-steps/workflow-actions/filter-action/states/context/WorkflowStepFilterContext';
|
||||
import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker';
|
||||
@@ -91,7 +91,7 @@ export const WorkflowStepFilterValueInput = ({
|
||||
} = stepFilter;
|
||||
|
||||
const { fieldMetadataItem: selectedFieldMetadataItem, objectMetadataItem } =
|
||||
useFilterFieldMetadataItem(fieldMetadataId ?? '');
|
||||
useFieldMetadataItemById(fieldMetadataId ?? '');
|
||||
|
||||
if (isDisabled || operandHasNoInput) {
|
||||
return null;
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
|
||||
export const useFilterFieldMetadataItem = (fieldMetadataId: string) => {
|
||||
const { objectMetadataItems } = useObjectMetadataItems();
|
||||
|
||||
const objectMetadataItem = objectMetadataItems.find((objectMetadataItem) =>
|
||||
objectMetadataItem.fields.some((field) => field.id === fieldMetadataId),
|
||||
);
|
||||
|
||||
const fieldMetadataItem = objectMetadataItem?.fields.find(
|
||||
(field) => field.id === fieldMetadataId,
|
||||
);
|
||||
|
||||
return {
|
||||
objectMetadataItem,
|
||||
fieldMetadataItem,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user