Moving record filter related types, hooks and utils into record-filter module (#9604)

This PR is only moving and renaming types, hooks and utils to
record-filter module folder.

- Moved and renamed types from object filter modules to record filter…-
Moved and renamed types from object filter modules to record filter
module
- Moved useApplyRecordFilter to record filter module
- Renamed util getOperandsForFilterDefinition to
getRecordFilterOperandsForRecordFilterDefinition
This commit is contained in:
Lucas Bordeau
2025-01-14 15:21:05 +01:00
committed by GitHub
parent 508feb4e7e
commit 6ab9b79bf3
71 changed files with 395 additions and 379 deletions

View File

@ -8,8 +8,8 @@ import { DEFAULT_QUERY_PAGE_SIZE } from '@/object-record/constants/DefaultQueryP
import { DELETE_MAX_COUNT } from '@/object-record/constants/DeleteMaxCount'; import { DELETE_MAX_COUNT } from '@/object-record/constants/DeleteMaxCount';
import { useDeleteManyRecords } from '@/object-record/hooks/useDeleteManyRecords'; import { useDeleteManyRecords } from '@/object-record/hooks/useDeleteManyRecords';
import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords'; import { useLazyFetchAllRecords } from '@/object-record/hooks/useLazyFetchAllRecords';
import { FilterOperand } from '@/object-record/object-filter-dropdown/types/FilterOperand';
import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies'; import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies';
import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable'; import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable';
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
@ -57,7 +57,7 @@ export const useDeleteMultipleRecordsAction: ActionHookWithObjectMetadataItem =
const isDeletedFilterActive = contextStoreFilters.some( const isDeletedFilterActive = contextStoreFilters.some(
(filter) => (filter) =>
filter.fieldMetadataId === deletedAtFieldMetadata?.id && filter.fieldMetadataId === deletedAtFieldMetadata?.id &&
filter.operand === FilterOperand.IsNotEmpty, filter.operand === RecordFilterOperand.IsNotEmpty,
); );
const { fetchAllRecords: fetchAllRecordIds } = useLazyFetchAllRecords({ const { fetchAllRecords: fetchAllRecordIds } = useLazyFetchAllRecords({

View File

@ -1,9 +1,9 @@
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const contextStoreFiltersComponentState = createComponentStateV2< export const contextStoreFiltersComponentState = createComponentStateV2<
Filter[] RecordFilter[]
>({ >({
key: 'contextStoreFiltersComponentState', key: 'contextStoreFiltersComponentState',
defaultValue: [], defaultValue: [],

View File

@ -1,7 +1,7 @@
import { ContextStoreTargetedRecordsRule } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { ContextStoreTargetedRecordsRule } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { computeContextStoreFilters } from '@/context-store/utils/computeContextStoreFilters'; import { computeContextStoreFilters } from '@/context-store/utils/computeContextStoreFilters';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { FilterValueDependencies } from '@/object-record/record-filter/types/FilterValueDependencies'; import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { expect } from '@storybook/test'; import { expect } from '@storybook/test';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems'; import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
@ -11,7 +11,7 @@ describe('computeContextStoreFilters', () => {
(item) => item.nameSingular === 'person', (item) => item.nameSingular === 'person',
)!; )!;
const mockFilterValueDependencies: FilterValueDependencies = { const mockFilterValueDependencies: RecordFilterValueDependencies = {
currentWorkspaceMemberId: '32219445-f587-4c40-b2b1-6d3205ed96da', currentWorkspaceMemberId: '32219445-f587-4c40-b2b1-6d3205ed96da',
}; };
@ -42,7 +42,7 @@ describe('computeContextStoreFilters', () => {
excludedRecordIds: ['1', '2', '3'], excludedRecordIds: ['1', '2', '3'],
}; };
const contextStoreFilters: Filter[] = [ const contextStoreFilters: RecordFilter[] = [
{ {
id: 'name-filter', id: 'name-filter',
variant: 'default', variant: 'default',

View File

@ -1,16 +1,16 @@
import { ContextStoreTargetedRecordsRule } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { ContextStoreTargetedRecordsRule } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { RecordGqlOperationFilter } from '@/object-record/graphql/types/RecordGqlOperationFilter'; import { RecordGqlOperationFilter } from '@/object-record/graphql/types/RecordGqlOperationFilter';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { FilterValueDependencies } from '@/object-record/record-filter/types/FilterValueDependencies'; import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter'; import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter';
import { makeAndFilterVariables } from '@/object-record/utils/makeAndFilterVariables'; import { makeAndFilterVariables } from '@/object-record/utils/makeAndFilterVariables';
export const computeContextStoreFilters = ( export const computeContextStoreFilters = (
contextStoreTargetedRecordsRule: ContextStoreTargetedRecordsRule, contextStoreTargetedRecordsRule: ContextStoreTargetedRecordsRule,
contextStoreFilters: Filter[], contextStoreFilters: RecordFilter[],
objectMetadataItem: ObjectMetadataItem, objectMetadataItem: ObjectMetadataItem,
filterValueDependencies: FilterValueDependencies, filterValueDependencies: RecordFilterValueDependencies,
) => { ) => {
let queryFilter: RecordGqlOperationFilter | undefined; let queryFilter: RecordGqlOperationFilter | undefined;

View File

@ -1,4 +1,4 @@
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { import {
FieldMetadataType, FieldMetadataType,
RelationDefinitionType, RelationDefinitionType,
@ -12,7 +12,7 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({
}: { }: {
fields: Array<ObjectMetadataItem['fields'][0]>; fields: Array<ObjectMetadataItem['fields'][0]>;
isJsonFilterEnabled: boolean; isJsonFilterEnabled: boolean;
}): FilterDefinition[] => { }): RecordFilterDefinition[] => {
return fields.reduce((acc, field) => { return fields.reduce((acc, field) => {
if ( if (
field.type === FieldMetadataType.Relation && field.type === FieldMetadataType.Relation &&
@ -49,14 +49,14 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({
} }
return [...acc, formatFieldMetadataItemAsFilterDefinition({ field })]; return [...acc, formatFieldMetadataItemAsFilterDefinition({ field })];
}, [] as FilterDefinition[]); }, [] as RecordFilterDefinition[]);
}; };
export const formatFieldMetadataItemAsFilterDefinition = ({ export const formatFieldMetadataItemAsFilterDefinition = ({
field, field,
}: { }: {
field: ObjectMetadataItem['fields'][0]; field: ObjectMetadataItem['fields'][0];
}): FilterDefinition => ({ }): RecordFilterDefinition => ({
fieldMetadataId: field.id, fieldMetadataId: field.id,
label: field.label, label: field.label,
iconName: field.icon ?? 'Icon123', iconName: field.icon ?? 'Icon123',

View File

@ -1,6 +1,6 @@
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { useUpsertCombinedViewFilterGroup } from '@/object-record/advanced-filter/hooks/useUpsertCombinedViewFilterGroup'; import { useUpsertCombinedViewFilterGroup } from '@/object-record/advanced-filter/hooks/useUpsertCombinedViewFilterGroup';
import { getOperandsForFilterDefinition } from '@/object-record/object-filter-dropdown/utils/getOperandsForFilterType'; import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
@ -81,7 +81,9 @@ export const AdvancedFilterAddFilterRuleSelect = ({
upsertCombinedViewFilter({ upsertCombinedViewFilter({
id: v4(), id: v4(),
fieldMetadataId: defaultFilterDefinition.fieldMetadataId, fieldMetadataId: defaultFilterDefinition.fieldMetadataId,
operand: getOperandsForFilterDefinition(defaultFilterDefinition)[0], operand: getRecordFilterOperandsForRecordFilterDefinition(
defaultFilterDefinition,
)[0],
definition: defaultFilterDefinition, definition: defaultFilterDefinition,
value: '', value: '',
displayValue: '', displayValue: '',
@ -112,7 +114,9 @@ export const AdvancedFilterAddFilterRuleSelect = ({
upsertCombinedViewFilter({ upsertCombinedViewFilter({
id: v4(), id: v4(),
fieldMetadataId: defaultFilterDefinition.fieldMetadataId, fieldMetadataId: defaultFilterDefinition.fieldMetadataId,
operand: getOperandsForFilterDefinition(defaultFilterDefinition)[0], operand: getRecordFilterOperandsForRecordFilterDefinition(
defaultFilterDefinition,
)[0],
definition: defaultFilterDefinition, definition: defaultFilterDefinition,
value: '', value: '',
displayValue: '', displayValue: '',

View File

@ -1,7 +1,7 @@
import { useCurrentViewFilter } from '@/object-record/advanced-filter/hooks/useCurrentViewFilter'; import { useCurrentViewFilter } from '@/object-record/advanced-filter/hooks/useCurrentViewFilter';
import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue'; import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue';
import { getOperandLabel } from '@/object-record/object-filter-dropdown/utils/getOperandLabel'; import { getOperandLabel } from '@/object-record/object-filter-dropdown/utils/getOperandLabel';
import { getOperandsForFilterDefinition } from '@/object-record/object-filter-dropdown/utils/getOperandsForFilterType'; import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { SelectControl } from '@/ui/input/components/SelectControl'; import { SelectControl } from '@/ui/input/components/SelectControl';
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
@ -56,7 +56,7 @@ export const AdvancedFilterViewFilterOperandSelect = ({
}; };
const operandsForFilterType = isDefined(filter?.definition) const operandsForFilterType = isDefined(filter?.definition)
? getOperandsForFilterDefinition(filter.definition) ? getRecordFilterOperandsForRecordFilterDefinition(filter.definition)
: []; : [];
if (isDisabled === true) { if (isDisabled === true) {

View File

@ -1,7 +1,7 @@
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { useUpsertCombinedViewFilterGroup } from '@/object-record/advanced-filter/hooks/useUpsertCombinedViewFilterGroup'; import { useUpsertCombinedViewFilterGroup } from '@/object-record/advanced-filter/hooks/useUpsertCombinedViewFilterGroup';
import { OBJECT_FILTER_DROPDOWN_ID } from '@/object-record/object-filter-dropdown/constants/ObjectFilterDropdownId'; import { OBJECT_FILTER_DROPDOWN_ID } from '@/object-record/object-filter-dropdown/constants/ObjectFilterDropdownId';
import { getOperandsForFilterDefinition } from '@/object-record/object-filter-dropdown/utils/getOperandsForFilterType'; import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { ADVANCED_FILTER_DROPDOWN_ID } from '@/views/constants/AdvancedFilterDropdownId'; import { ADVANCED_FILTER_DROPDOWN_ID } from '@/views/constants/AdvancedFilterDropdownId';
@ -102,7 +102,9 @@ export const AdvancedFilterButton = () => {
upsertCombinedViewFilter({ upsertCombinedViewFilter({
id: v4(), id: v4(),
fieldMetadataId: defaultFilterDefinition.fieldMetadataId, fieldMetadataId: defaultFilterDefinition.fieldMetadataId,
operand: getOperandsForFilterDefinition(defaultFilterDefinition)[0], operand: getRecordFilterOperandsForRecordFilterDefinition(
defaultFilterDefinition,
)[0],
definition: defaultFilterDefinition, definition: defaultFilterDefinition,
value: '', value: '',
displayValue: '', displayValue: '',

View File

@ -1,9 +1,9 @@
import { AvatarChip, IconComponent } from 'twenty-ui'; import { AvatarChip, IconComponent } from 'twenty-ui';
import { Filter } from '../types/Filter'; import { RecordFilter } from '../../record-filter/types/RecordFilter';
type GenericEntityFilterChipProps = { type GenericEntityFilterChipProps = {
filter: Filter; filter: RecordFilter;
Icon?: IconComponent; Icon?: IconComponent;
}; };

View File

@ -3,10 +3,10 @@ import styled from '@emotion/styled';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
import { BooleanDisplay } from '@/ui/field/display/components/BooleanDisplay'; import { BooleanDisplay } from '@/ui/field/display/components/BooleanDisplay';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';

View File

@ -1,10 +1,10 @@
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { getRelativeDateDisplayValue } from '@/object-record/object-filter-dropdown/utils/getRelativeDateDisplayValue'; import { getRelativeDateDisplayValue } from '@/object-record/object-filter-dropdown/utils/getRelativeDateDisplayValue';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { InternalDatePicker } from '@/ui/input/components/internal/date/components/InternalDatePicker'; import { InternalDatePicker } from '@/ui/input/components/internal/date/components/InternalDatePicker';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';

View File

@ -8,7 +8,7 @@ import { ObjectFilterDropdownFilterSelectMenuItem } from '@/object-record/object
import { OBJECT_FILTER_DROPDOWN_ID } from '@/object-record/object-filter-dropdown/constants/ObjectFilterDropdownId'; import { OBJECT_FILTER_DROPDOWN_ID } from '@/object-record/object-filter-dropdown/constants/ObjectFilterDropdownId';
import { useSelectFilterDefinitionUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown'; import { useSelectFilterDefinitionUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState'; import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
import { hiddenTableColumnsComponentSelector } from '@/object-record/record-table/states/selectors/hiddenTableColumnsComponentSelector'; import { hiddenTableColumnsComponentSelector } from '@/object-record/record-table/states/selectors/hiddenTableColumnsComponentSelector';
import { visibleTableColumnsComponentSelector } from '@/object-record/record-table/states/selectors/visibleTableColumnsComponentSelector'; import { visibleTableColumnsComponentSelector } from '@/object-record/record-table/states/selectors/visibleTableColumnsComponentSelector';
@ -25,6 +25,7 @@ import { isDefined } from 'twenty-ui';
import { FeatureFlagKey } from '~/generated/graphql'; import { FeatureFlagKey } from '~/generated/graphql';
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState'; import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
export const StyledInput = styled.input` export const StyledInput = styled.input`
background: transparent; background: transparent;
border: none; border: none;

View File

@ -1,5 +1,4 @@
import { useAdvancedFilterDropdown } from '@/object-record/advanced-filter/hooks/useAdvancedFilterDropdown'; import { useAdvancedFilterDropdown } from '@/object-record/advanced-filter/hooks/useAdvancedFilterDropdown';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { advancedFilterViewFilterGroupIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterGroupIdComponentState'; import { advancedFilterViewFilterGroupIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterGroupIdComponentState';
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState'; import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
@ -9,11 +8,12 @@ import { objectFilterDropdownIsSelectingCompositeFieldComponentState } from '@/o
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState'; import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { objectFilterDropdownSubMenuFieldTypeComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSubMenuFieldTypeComponentState'; import { objectFilterDropdownSubMenuFieldTypeComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSubMenuFieldTypeComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
import { getCompositeSubFieldLabel } from '@/object-record/object-filter-dropdown/utils/getCompositeSubFieldLabel'; import { getCompositeSubFieldLabel } from '@/object-record/object-filter-dropdown/utils/getCompositeSubFieldLabel';
import { getFilterableFieldTypeLabel } from '@/object-record/object-filter-dropdown/utils/getFilterableFieldTypeLabel'; import { getFilterableFieldTypeLabel } from '@/object-record/object-filter-dropdown/utils/getFilterableFieldTypeLabel';
import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue'; import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue';
import { getOperandsForFilterDefinition } from '@/object-record/object-filter-dropdown/utils/getOperandsForFilterType'; import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsCompositeFieldTypeConfigs'; import { SETTINGS_COMPOSITE_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsCompositeFieldTypeConfigs';
import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader'; import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
@ -83,7 +83,7 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
advancedFilterViewFilterId, advancedFilterViewFilterId,
); );
const handleSelectFilter = (definition: FilterDefinition | null) => { const handleSelectFilter = (definition: RecordFilterDefinition | null) => {
if (definition !== null) { if (definition !== null) {
if ( if (
isDefined(advancedFilterViewFilterId) && isDefined(advancedFilterViewFilterId) &&
@ -91,7 +91,8 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
) { ) {
closeAdvancedFilterDropdown(); closeAdvancedFilterDropdown();
const operand = getOperandsForFilterDefinition(definition)[0]; const operand =
getRecordFilterOperandsForRecordFilterDefinition(definition)[0];
const { value, displayValue } = getInitialFilterValue( const { value, displayValue } = getInitialFilterValue(
definition.type, definition.type,
operand, operand,
@ -111,7 +112,7 @@ export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => {
setFilterDefinitionUsedInDropdown(definition); setFilterDefinitionUsedInDropdown(definition);
setSelectedOperandInDropdown( setSelectedOperandInDropdown(
getOperandsForFilterDefinition(definition)[0], getRecordFilterOperandsForRecordFilterDefinition(definition)[0],
); );
setObjectFilterDropdownSearchInput(''); setObjectFilterDropdownSearchInput('');

View File

@ -7,11 +7,11 @@ import { objectFilterDropdownFirstLevelFilterDefinitionComponentState } from '@/
import { objectFilterDropdownIsSelectingCompositeFieldComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownIsSelectingCompositeFieldComponentState'; import { objectFilterDropdownIsSelectingCompositeFieldComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownIsSelectingCompositeFieldComponentState';
import { objectFilterDropdownSubMenuFieldTypeComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSubMenuFieldTypeComponentState'; import { objectFilterDropdownSubMenuFieldTypeComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSubMenuFieldTypeComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { CompositeFilterableFieldType } from '@/object-record/object-filter-dropdown/types/CompositeFilterableFieldType'; import { CompositeFilterableFieldType } from '@/object-record/record-filter/types/CompositeFilterableFieldType';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
import { getOperandsForFilterDefinition } from '@/object-record/object-filter-dropdown/utils/getOperandsForFilterType';
import { isCompositeField } from '@/object-record/object-filter-dropdown/utils/isCompositeField'; import { isCompositeField } from '@/object-record/object-filter-dropdown/utils/isCompositeField';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList';
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
@ -22,7 +22,7 @@ import { useRecoilValue } from 'recoil';
import { MenuItemSelect, useIcons } from 'twenty-ui'; import { MenuItemSelect, useIcons } from 'twenty-ui';
export type ObjectFilterDropdownFilterSelectMenuItemProps = { export type ObjectFilterDropdownFilterSelectMenuItemProps = {
filterDefinition: FilterDefinition; filterDefinition: RecordFilterDefinition;
}; };
export const ObjectFilterDropdownFilterSelectMenuItem = ({ export const ObjectFilterDropdownFilterSelectMenuItem = ({
@ -74,7 +74,7 @@ export const ObjectFilterDropdownFilterSelectMenuItem = ({
); );
const handleSelectFilterDefinition = ( const handleSelectFilterDefinition = (
availableFilterDefinition: FilterDefinition, availableFilterDefinition: RecordFilterDefinition,
) => { ) => {
closeAdvancedFilterDropdown(); closeAdvancedFilterDropdown();
@ -90,7 +90,9 @@ export const ObjectFilterDropdownFilterSelectMenuItem = ({
} }
setSelectedOperandInDropdown( setSelectedOperandInDropdown(
getOperandsForFilterDefinition(availableFilterDefinition)[0], getRecordFilterOperandsForRecordFilterDefinition(
availableFilterDefinition,
)[0],
); );
setObjectFilterDropdownFilterIsSelected(true); setObjectFilterDropdownFilterIsSelected(true);

View File

@ -1,10 +1,10 @@
import { ChangeEvent, useCallback, useState } from 'react'; import { ChangeEvent, useCallback, useState } from 'react';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { DropdownMenuInput } from '@/ui/layout/dropdown/components/DropdownMenuInput'; import { DropdownMenuInput } from '@/ui/layout/dropdown/components/DropdownMenuInput';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';

View File

@ -4,6 +4,7 @@ import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenu
import { ObjectFilterDropdownOperandSelect } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownOperandSelect'; import { ObjectFilterDropdownOperandSelect } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownOperandSelect';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope'; import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';

View File

@ -1,10 +1,10 @@
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue'; import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
@ -13,8 +13,8 @@ import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
import { MenuItem } from 'twenty-ui'; import { MenuItem } from 'twenty-ui';
import { isDefined } from '~/utils/isDefined'; import { isDefined } from '~/utils/isDefined';
import { getRecordFilterOperandsForRecordFilterDefinition } from '../../record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { getOperandLabel } from '../utils/getOperandLabel'; import { getOperandLabel } from '../utils/getOperandLabel';
import { getOperandsForFilterDefinition } from '../utils/getOperandsForFilterType';
const StyledDropdownMenuItemsContainer = styled(DropdownMenuItemsContainer)` const StyledDropdownMenuItemsContainer = styled(DropdownMenuItemsContainer)`
background-color: ${({ theme }) => theme.background.primary}; background-color: ${({ theme }) => theme.background.primary};
@ -39,7 +39,9 @@ export const ObjectFilterDropdownOperandSelect = () => {
const { closeDropdown } = useDropdown(); const { closeDropdown } = useDropdown();
const operandsForFilterType = isDefined(filterDefinitionUsedInDropdown) const operandsForFilterType = isDefined(filterDefinitionUsedInDropdown)
? getOperandsForFilterDefinition(filterDefinitionUsedInDropdown) ? getRecordFilterOperandsForRecordFilterDefinition(
filterDefinitionUsedInDropdown,
)
: []; : [];
const handleOperandChange = (newOperand: ViewFilterOperand) => { const handleOperandChange = (newOperand: ViewFilterOperand) => {

View File

@ -13,12 +13,12 @@ import { SelectableList } from '@/ui/layout/selectable-list/components/Selectabl
import { useSelectableListStates } from '@/ui/layout/selectable-list/hooks/internal/useSelectableListStates'; import { useSelectableListStates } from '@/ui/layout/selectable-list/hooks/internal/useSelectableListStates';
import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState'; import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { objectFilterDropdownSelectedOptionValuesComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSelectedOptionValuesComponentState'; import { objectFilterDropdownSelectedOptionValuesComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSelectedOptionValuesComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { MenuItem, MenuItemMultiSelect } from 'twenty-ui'; import { MenuItem, MenuItemMultiSelect } from 'twenty-ui';

View File

@ -1,10 +1,10 @@
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { RATING_VALUES } from '@/object-record/record-field/meta-types/constants/RatingValues'; import { RATING_VALUES } from '@/object-record/record-field/meta-types/constants/RatingValues';
import { FieldRatingValue } from '@/object-record/record-field/types/FieldMetadata'; import { FieldRatingValue } from '@/object-record/record-field/types/FieldMetadata';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RatingInput } from '@/ui/field/input/components/RatingInput'; import { RatingInput } from '@/ui/field/input/components/RatingInput';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';

View File

@ -4,12 +4,12 @@ import { v4 } from 'uuid';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { ObjectFilterDropdownRecordPinnedItems } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordPinnedItems'; import { ObjectFilterDropdownRecordPinnedItems } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordPinnedItems';
import { CURRENT_WORKSPACE_MEMBER_SELECTABLE_ITEM_ID } from '@/object-record/object-filter-dropdown/constants/CurrentWorkspaceMemberSelectableItemId'; import { CURRENT_WORKSPACE_MEMBER_SELECTABLE_ITEM_ID } from '@/object-record/object-filter-dropdown/constants/CurrentWorkspaceMemberSelectableItemId';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState'; import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { objectFilterDropdownSelectedRecordIdsComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSelectedRecordIdsComponentState'; import { objectFilterDropdownSelectedRecordIdsComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSelectedRecordIdsComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
import { MultipleSelectDropdown } from '@/object-record/select/components/MultipleSelectDropdown'; import { MultipleSelectDropdown } from '@/object-record/select/components/MultipleSelectDropdown';
import { useRecordsForSelect } from '@/object-record/select/hooks/useRecordsForSelect'; import { useRecordsForSelect } from '@/object-record/select/hooks/useRecordsForSelect';

View File

@ -1,7 +1,6 @@
import { useState } from 'react'; import { useState } from 'react';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { useEmptyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useEmptyRecordFilter'; import { useEmptyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useEmptyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState'; import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
@ -9,6 +8,7 @@ import { objectFilterDropdownSelectedRecordIdsComponentState } from '@/object-re
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { getActorSourceMultiSelectOptions } from '@/object-record/object-filter-dropdown/utils/getActorSourceMultiSelectOptions'; import { getActorSourceMultiSelectOptions } from '@/object-record/object-filter-dropdown/utils/getActorSourceMultiSelectOptions';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
import { MultipleSelectDropdown } from '@/object-record/select/components/MultipleSelectDropdown'; import { MultipleSelectDropdown } from '@/object-record/select/components/MultipleSelectDropdown';
import { SelectableItem } from '@/object-record/select/types/SelectableItem'; import { SelectableItem } from '@/object-record/select/types/SelectableItem';

View File

@ -1,11 +1,11 @@
import { ChangeEvent, useCallback, useState } from 'react'; import { ChangeEvent, useCallback, useState } from 'react';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState'; import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput'; import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';

View File

@ -15,7 +15,7 @@ import { selectedOperandInDropdownComponentState } from '@/object-record/object-
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState'; import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState';
import { getOperandsForFilterDefinition } from '../utils/getOperandsForFilterType'; import { getRecordFilterOperandsForRecordFilterDefinition } from '../../record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { GenericEntityFilterChip } from './GenericEntityFilterChip'; import { GenericEntityFilterChip } from './GenericEntityFilterChip';
import { ObjectFilterDropdownRecordSelect } from './ObjectFilterDropdownRecordSelect'; import { ObjectFilterDropdownRecordSelect } from './ObjectFilterDropdownRecordSelect';
import { ObjectFilterDropdownSearchInput } from './ObjectFilterDropdownSearchInput'; import { ObjectFilterDropdownSearchInput } from './ObjectFilterDropdownSearchInput';
@ -47,7 +47,7 @@ export const SingleEntityObjectFilterDropdownButton = ({
React.useEffect(() => { React.useEffect(() => {
setFilterDefinitionUsedInDropdown(availableFilterDefinition); setFilterDefinitionUsedInDropdown(availableFilterDefinition);
const defaultOperand = getOperandsForFilterDefinition( const defaultOperand = getRecordFilterOperandsForRecordFilterDefinition(
availableFilterDefinition, availableFilterDefinition,
)[0]; )[0];
setSelectedOperandInDropdown(defaultOperand); setSelectedOperandInDropdown(defaultOperand);

View File

@ -1,12 +1,12 @@
import { useApplyRecordFilter } from '@/object-record/object-filter-dropdown/hooks/useApplyRecordFilter';
import { advancedFilterViewFilterGroupIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterGroupIdComponentState'; import { advancedFilterViewFilterGroupIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterGroupIdComponentState';
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState'; import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState'; import { objectFilterDropdownSearchInputComponentState } from '@/object-record/object-filter-dropdown/states/objectFilterDropdownSearchInputComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue'; import { getInitialFilterValue } from '@/object-record/object-filter-dropdown/utils/getInitialFilterValue';
import { getOperandsForFilterDefinition } from '@/object-record/object-filter-dropdown/utils/getOperandsForFilterType'; import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope'; import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types/RelationPickerHotkeyScope';
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
@ -15,7 +15,7 @@ import { isDefined } from 'twenty-ui';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
type SelectFilterParams = { type SelectFilterParams = {
filterDefinition: FilterDefinition; filterDefinition: RecordFilterDefinition;
}; };
export const useSelectFilterDefinitionUsedInDropdown = ( export const useSelectFilterDefinitionUsedInDropdown = (
@ -63,12 +63,12 @@ export const useSelectFilterDefinitionUsedInDropdown = (
} }
setSelectedOperandInDropdown( setSelectedOperandInDropdown(
getOperandsForFilterDefinition(filterDefinition)[0], getRecordFilterOperandsForRecordFilterDefinition(filterDefinition)[0],
); );
const { value, displayValue } = getInitialFilterValue( const { value, displayValue } = getInitialFilterValue(
filterDefinition.type, filterDefinition.type,
getOperandsForFilterDefinition(filterDefinition)[0], getRecordFilterOperandsForRecordFilterDefinition(filterDefinition)[0],
); );
const isAdvancedFilter = isDefined(advancedFilterViewFilterId); const isAdvancedFilter = isDefined(advancedFilterViewFilterId);
@ -78,7 +78,8 @@ export const useSelectFilterDefinitionUsedInDropdown = (
id: advancedFilterViewFilterId ?? v4(), id: advancedFilterViewFilterId ?? v4(),
fieldMetadataId: filterDefinition.fieldMetadataId, fieldMetadataId: filterDefinition.fieldMetadataId,
displayValue, displayValue,
operand: getOperandsForFilterDefinition(filterDefinition)[0], operand:
getRecordFilterOperandsForRecordFilterDefinition(filterDefinition)[0],
value, value,
definition: filterDefinition, definition: filterDefinition,
viewFilterGroupId: advancedFilterViewFilterGroupId, viewFilterGroupId: advancedFilterViewFilterGroupId,

View File

@ -1,9 +1,9 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const availableFilterDefinitionsComponentState = createComponentStateV2< export const availableFilterDefinitionsComponentState = createComponentStateV2<
FilterDefinition[] RecordFilterDefinition[]
>({ >({
key: 'availableFilterDefinitionsComponentState', key: 'availableFilterDefinitionsComponentState',
defaultValue: [], defaultValue: [],

View File

@ -1,9 +1,9 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
import { FilterDefinition } from '../types/FilterDefinition';
export const filterDefinitionUsedInDropdownComponentState = export const filterDefinitionUsedInDropdownComponentState =
createComponentStateV2<FilterDefinition | null>({ createComponentStateV2<RecordFilterDefinition | null>({
key: 'filterDefinitionUsedInDropdownComponentState', key: 'filterDefinitionUsedInDropdownComponentState',
defaultValue: null, defaultValue: null,
componentInstanceContext: ObjectFilterDropdownComponentInstanceContext, componentInstanceContext: ObjectFilterDropdownComponentInstanceContext,

View File

@ -1,9 +1,9 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const objectFilterDropdownFirstLevelFilterDefinitionComponentState = export const objectFilterDropdownFirstLevelFilterDefinitionComponentState =
createComponentStateV2<FilterDefinition | null>({ createComponentStateV2<RecordFilterDefinition | null>({
key: 'objectFilterDropdownFirstLevelFilterDefinitionComponentState', key: 'objectFilterDropdownFirstLevelFilterDefinitionComponentState',
defaultValue: null, defaultValue: null,
componentInstanceContext: ObjectFilterDropdownComponentInstanceContext, componentInstanceContext: ObjectFilterDropdownComponentInstanceContext,

View File

@ -1,5 +1,5 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { CompositeFilterableFieldType } from '@/object-record/object-filter-dropdown/types/CompositeFilterableFieldType'; import { CompositeFilterableFieldType } from '@/object-record/record-filter/types/CompositeFilterableFieldType';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const objectFilterDropdownSubMenuFieldTypeComponentState = export const objectFilterDropdownSubMenuFieldTypeComponentState =

View File

@ -1,9 +1,9 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
import { Filter } from '../types/Filter'; import { RecordFilter } from '../../record-filter/types/RecordFilter';
export const onFilterSelectComponentState = createComponentStateV2< export const onFilterSelectComponentState = createComponentStateV2<
((filter: Filter | null) => void) | undefined ((filter: RecordFilter | null) => void) | undefined
>({ >({
key: 'onFilterSelectComponentState', key: 'onFilterSelectComponentState',
defaultValue: undefined, defaultValue: undefined,

View File

@ -1,9 +1,9 @@
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
import { Filter } from '../types/Filter'; import { RecordFilter } from '../../record-filter/types/RecordFilter';
export const selectedFilterComponentState = createComponentStateV2< export const selectedFilterComponentState = createComponentStateV2<
Filter | undefined | null RecordFilter | undefined | null
>({ >({
key: 'selectedFilterComponentState', key: 'selectedFilterComponentState',
defaultValue: undefined, defaultValue: undefined,

View File

@ -1,5 +0,0 @@
import { FilterDefinition } from './FilterDefinition';
export type FilterDefinitionByEntity<T> = FilterDefinition & {
fieldMetadataId: keyof T;
};

View File

@ -1,4 +0,0 @@
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter';
export type FilterDraft = Partial<Filter> &
Omit<Filter, 'fieldMetadataId' | 'operand' | 'definition'>;

View File

@ -1 +0,0 @@
export { ViewFilterOperand as FilterOperand } from '@/views/types/ViewFilterOperand';

View File

@ -1,36 +1,35 @@
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { FilterableFieldType } from '@/object-record/record-filter/types/FilterableFieldType';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
import { FilterableFieldType } from '@/object-record/object-filter-dropdown/types/FilterableFieldType'; import { getRecordFilterOperandsForRecordFilterDefinition } from '../../../record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { getOperandsForFilterDefinition } from '../getOperandsForFilterType';
describe('getOperandsForFilterType', () => { describe('getOperandsForFilterType', () => {
const emptyOperands = [ const emptyOperands = [
ViewFilterOperand.IsEmpty, RecordFilterOperand.IsEmpty,
ViewFilterOperand.IsNotEmpty, RecordFilterOperand.IsNotEmpty,
]; ];
const containsOperands = [ const containsOperands = [
ViewFilterOperand.Contains, RecordFilterOperand.Contains,
ViewFilterOperand.DoesNotContain, RecordFilterOperand.DoesNotContain,
]; ];
const numberOperands = [ const numberOperands = [
ViewFilterOperand.GreaterThan, RecordFilterOperand.GreaterThan,
ViewFilterOperand.LessThan, RecordFilterOperand.LessThan,
]; ];
const dateOperands = [ const dateOperands = [
ViewFilterOperand.Is, RecordFilterOperand.Is,
ViewFilterOperand.IsRelative, RecordFilterOperand.IsRelative,
ViewFilterOperand.IsInPast, RecordFilterOperand.IsInPast,
ViewFilterOperand.IsInFuture, RecordFilterOperand.IsInFuture,
ViewFilterOperand.IsToday, RecordFilterOperand.IsToday,
ViewFilterOperand.IsBefore, RecordFilterOperand.IsBefore,
ViewFilterOperand.IsAfter, RecordFilterOperand.IsAfter,
]; ];
const relationOperand = [ViewFilterOperand.Is, ViewFilterOperand.IsNot]; const relationOperand = [RecordFilterOperand.Is, RecordFilterOperand.IsNot];
const testCases = [ const testCases = [
['TEXT', [...containsOperands, ...emptyOperands]], ['TEXT', [...containsOperands, ...emptyOperands]],
@ -50,9 +49,9 @@ describe('getOperandsForFilterType', () => {
testCases.forEach(([filterType, expectedOperands]) => { testCases.forEach(([filterType, expectedOperands]) => {
it(`should return correct operands for FilterType.${filterType}`, () => { it(`should return correct operands for FilterType.${filterType}`, () => {
const result = getOperandsForFilterDefinition({ const result = getRecordFilterOperandsForRecordFilterDefinition({
type: filterType as FilterableFieldType, type: filterType as FilterableFieldType,
} as FilterDefinition); } as RecordFilterDefinition);
expect(result).toEqual(expectedOperands); expect(result).toEqual(expectedOperands);
}); });
}); });

View File

@ -1,4 +1,4 @@
import { FilterableFieldType } from '@/object-record/object-filter-dropdown/types/FilterableFieldType'; import { FilterableFieldType } from '@/object-record/record-filter/types/FilterableFieldType';
import { SETTINGS_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsFieldTypeConfigs'; import { SETTINGS_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsFieldTypeConfigs';
export const getFilterableFieldTypeLabel = ( export const getFilterableFieldTypeLabel = (

View File

@ -1,21 +1,21 @@
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { FilterableFieldType } from '@/object-record/record-filter/types/FilterableFieldType';
import { FilterableFieldType } from '@/object-record/object-filter-dropdown/types/FilterableFieldType'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
import { z } from 'zod'; import { z } from 'zod';
export const getInitialFilterValue = ( export const getInitialFilterValue = (
newType: FilterableFieldType, newType: FilterableFieldType,
newOperand: ViewFilterOperand, newOperand: RecordFilterOperand,
oldValue?: string, oldValue?: string,
oldDisplayValue?: string, oldDisplayValue?: string,
): Pick<Filter, 'value' | 'displayValue'> | Record<string, never> => { ): Pick<RecordFilter, 'value' | 'displayValue'> | Record<string, never> => {
switch (newType) { switch (newType) {
case 'DATE': case 'DATE':
case 'DATE_TIME': { case 'DATE_TIME': {
const activeDatePickerOperands = [ const activeDatePickerOperands = [
ViewFilterOperand.IsBefore, RecordFilterOperand.IsBefore,
ViewFilterOperand.Is, RecordFilterOperand.Is,
ViewFilterOperand.IsAfter, RecordFilterOperand.IsAfter,
]; ];
if (activeDatePickerOperands.includes(newOperand)) { if (activeDatePickerOperands.includes(newOperand)) {
@ -29,7 +29,7 @@ export const getInitialFilterValue = (
return { value, displayValue }; return { value, displayValue };
} }
if (newOperand === ViewFilterOperand.IsRelative) { if (newOperand === RecordFilterOperand.IsRelative) {
return { value: '', displayValue: '' }; return { value: '', displayValue: '' };
} }
break; break;

View File

@ -1,95 +0,0 @@
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
import { isActorSourceCompositeFilter } from '@/object-record/object-filter-dropdown/utils/isActorSourceCompositeFilter';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
export const getOperandsForFilterDefinition = (
filterDefinition: Pick<FilterDefinition, 'type' | 'compositeFieldName'>,
): ViewFilterOperand[] => {
const emptyOperands = [
ViewFilterOperand.IsEmpty,
ViewFilterOperand.IsNotEmpty,
];
const relationOperands = [ViewFilterOperand.Is, ViewFilterOperand.IsNot];
switch (filterDefinition.type) {
case 'TEXT':
case 'EMAILS':
case 'FULL_NAME':
case 'ADDRESS':
case 'LINKS':
case 'PHONES':
return [
ViewFilterOperand.Contains,
ViewFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'CURRENCY':
case 'NUMBER':
return [
ViewFilterOperand.GreaterThan,
ViewFilterOperand.LessThan,
...emptyOperands,
];
case 'RAW_JSON':
return [
ViewFilterOperand.Contains,
ViewFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'DATE_TIME':
case 'DATE':
return [
ViewFilterOperand.Is,
ViewFilterOperand.IsRelative,
ViewFilterOperand.IsInPast,
ViewFilterOperand.IsInFuture,
ViewFilterOperand.IsToday,
ViewFilterOperand.IsBefore,
ViewFilterOperand.IsAfter,
...emptyOperands,
];
case 'RATING':
return [
ViewFilterOperand.Is,
ViewFilterOperand.GreaterThan,
ViewFilterOperand.LessThan,
...emptyOperands,
];
case 'RELATION':
return [...relationOperands, ...emptyOperands];
case 'MULTI_SELECT':
return [
ViewFilterOperand.Contains,
ViewFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'SELECT':
return [ViewFilterOperand.Is, ViewFilterOperand.IsNot, ...emptyOperands];
case 'ACTOR': {
if (isActorSourceCompositeFilter(filterDefinition)) {
return [
ViewFilterOperand.Is,
ViewFilterOperand.IsNot,
...emptyOperands,
];
}
return [
ViewFilterOperand.Contains,
ViewFilterOperand.DoesNotContain,
...emptyOperands,
];
}
case 'ARRAY':
return [
ViewFilterOperand.Contains,
ViewFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'BOOLEAN':
return [ViewFilterOperand.Is];
default:
return [];
}
};

View File

@ -1,4 +1,4 @@
import { FilterableFieldType } from '@/object-record/object-filter-dropdown/types/FilterableFieldType'; import { FilterableFieldType } from '@/object-record/record-filter/types/FilterableFieldType';
export const getSubMenuOptions = (subMenu: FilterableFieldType | null) => { export const getSubMenuOptions = (subMenu: FilterableFieldType | null) => {
switch (subMenu) { switch (subMenu) {

View File

@ -1,8 +1,8 @@
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
import { FieldActorValue } from '@/object-record/record-field/types/FieldMetadata'; import { FieldActorValue } from '@/object-record/record-field/types/FieldMetadata';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
export const isActorSourceCompositeFilter = ( export const isActorSourceCompositeFilter = (
filterDefinition: Pick<FilterDefinition, 'compositeFieldName'>, filterDefinition: Pick<RecordFilterDefinition, 'compositeFieldName'>,
) => { ) => {
return ( return (
filterDefinition.compositeFieldName === filterDefinition.compositeFieldName ===

View File

@ -1,6 +1,6 @@
import { onFilterSelectComponentState } from '@/object-record/object-filter-dropdown/states/onFilterSelectComponentState'; import { onFilterSelectComponentState } from '@/object-record/object-filter-dropdown/states/onFilterSelectComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue';
import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2';
import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters'; import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters';
@ -21,7 +21,7 @@ export const useApplyRecordFilter = (componentInstanceId?: string) => {
const applyRecordFilter = useRecoilCallback( const applyRecordFilter = useRecoilCallback(
({ set, snapshot }) => ({ set, snapshot }) =>
(filter: Filter | null) => { (filter: RecordFilter | null) => {
set(selectedFilterCallbackState, filter); set(selectedFilterCallbackState, filter);
const onFilterSelect = getSnapshotValue( const onFilterSelect = getSnapshotValue(

View File

@ -1,9 +1,9 @@
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { FilterValueDependencies } from '@/object-record/record-filter/types/FilterValueDependencies'; import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
import { useRecoilValue } from 'recoil'; import { useRecoilValue } from 'recoil';
export const useFilterValueDependencies = (): { export const useFilterValueDependencies = (): {
filterValueDependencies: FilterValueDependencies; filterValueDependencies: RecordFilterValueDependencies;
} => { } => {
const { id: currentWorkspaceMemberId } = const { id: currentWorkspaceMemberId } =
useRecoilValue(currentWorkspaceMemberState) ?? {}; useRecoilValue(currentWorkspaceMemberState) ?? {};

View File

@ -1,4 +1,4 @@
import { FilterableFieldType } from '@/object-record/object-filter-dropdown/types/FilterableFieldType'; import { FilterableFieldType } from '@/object-record/record-filter/types/FilterableFieldType';
import { CompositeFieldType } from '@/settings/data-model/types/CompositeFieldType'; import { CompositeFieldType } from '@/settings/data-model/types/CompositeFieldType';
export type CompositeFilterableFieldType = FilterableFieldType & export type CompositeFilterableFieldType = FilterableFieldType &

View File

@ -1,3 +0,0 @@
export interface FilterValueDependencies {
currentWorkspaceMemberId?: string;
}

View File

@ -1,7 +1,7 @@
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { FilterDefinition } from './FilterDefinition';
export type Filter = { export type RecordFilter = {
id: string; id: string;
variant?: 'default' | 'danger'; variant?: 'default' | 'danger';
fieldMetadataId: string; fieldMetadataId: string;
@ -11,5 +11,5 @@ export type Filter = {
displayAvatarUrl?: string; displayAvatarUrl?: string;
operand: ViewFilterOperand; operand: ViewFilterOperand;
positionInViewFilterGroup?: number | null; positionInViewFilterGroup?: number | null;
definition: FilterDefinition; definition: RecordFilterDefinition;
}; };

View File

@ -2,7 +2,7 @@ import { IconComponent } from 'twenty-ui';
import { FilterableFieldType } from './FilterableFieldType'; import { FilterableFieldType } from './FilterableFieldType';
export type FilterDefinition = { export type RecordFilterDefinition = {
fieldMetadataId: string; fieldMetadataId: string;
label: string; label: string;
iconName: string; iconName: string;

View File

@ -0,0 +1,4 @@
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
export type FilterDraft = Partial<RecordFilter> &
Omit<RecordFilter, 'fieldMetadataId' | 'operand' | 'definition'>;

View File

@ -0,0 +1 @@
export { ViewFilterOperand as RecordFilterOperand } from '@/views/types/ViewFilterOperand';

View File

@ -0,0 +1,3 @@
export interface RecordFilterValueDependencies {
currentWorkspaceMemberId?: string;
}

View File

@ -1,5 +1,5 @@
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { FilterValueDependencies } from '@/object-record/record-filter/types/FilterValueDependencies'; import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter'; import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { getCompaniesMock } from '~/testing/mock-data/companies'; import { getCompaniesMock } from '~/testing/mock-data/companies';
@ -15,7 +15,7 @@ const personMockObjectMetadataItem = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'person', (item) => item.nameSingular === 'person',
)!; )!;
const mockFilterValueDependencies: FilterValueDependencies = { const mockFilterValueDependencies: RecordFilterValueDependencies = {
currentWorkspaceMemberId: '32219445-f587-4c40-b2b1-6d3205ed96da', currentWorkspaceMemberId: '32219445-f587-4c40-b2b1-6d3205ed96da',
}; };
@ -28,7 +28,7 @@ describe('computeViewRecordGqlOperationFilter', () => {
(field) => field.name === 'name', (field) => field.name === 'name',
); );
const nameFilter: Filter = { const nameFilter: RecordFilter = {
id: 'company-name-filter', id: 'company-name-filter',
value: companiesMock[0].name, value: companiesMock[0].name,
fieldMetadataId: companyMockNameFieldMetadataId?.id, fieldMetadataId: companyMockNameFieldMetadataId?.id,
@ -67,7 +67,7 @@ describe('computeViewRecordGqlOperationFilter', () => {
(field) => field.name === 'employees', (field) => field.name === 'employees',
); );
const nameFilter: Filter = { const nameFilter: RecordFilter = {
id: 'company-name-filter', id: 'company-name-filter',
value: companiesMock[0].name, value: companiesMock[0].name,
fieldMetadataId: companyMockNameFieldMetadataId?.id, fieldMetadataId: companyMockNameFieldMetadataId?.id,
@ -81,7 +81,7 @@ describe('computeViewRecordGqlOperationFilter', () => {
}, },
}; };
const employeesFilter: Filter = { const employeesFilter: RecordFilter = {
id: 'company-employees-filter', id: 'company-employees-filter',
value: '1000', value: '1000',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id, fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
@ -126,7 +126,7 @@ describe('should work as expected for the different field types', () => {
(field) => field.name === 'address', (field) => field.name === 'address',
); );
const addressFilterContains: Filter = { const addressFilterContains: RecordFilter = {
id: 'company-address-filter-contains', id: 'company-address-filter-contains',
value: '123 Main St', value: '123 Main St',
fieldMetadataId: companyMockAddressFieldMetadataId?.id, fieldMetadataId: companyMockAddressFieldMetadataId?.id,
@ -140,7 +140,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const addressFilterDoesNotContain: Filter = { const addressFilterDoesNotContain: RecordFilter = {
id: 'company-address-filter-does-not-contain', id: 'company-address-filter-does-not-contain',
value: '123 Main St', value: '123 Main St',
fieldMetadataId: companyMockAddressFieldMetadataId?.id, fieldMetadataId: companyMockAddressFieldMetadataId?.id,
@ -154,7 +154,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const addressFilterIsEmpty: Filter = { const addressFilterIsEmpty: RecordFilter = {
id: 'company-address-filter-is-empty', id: 'company-address-filter-is-empty',
value: '', value: '',
fieldMetadataId: companyMockAddressFieldMetadataId?.id, fieldMetadataId: companyMockAddressFieldMetadataId?.id,
@ -168,7 +168,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const addressFilterIsNotEmpty: Filter = { const addressFilterIsNotEmpty: RecordFilter = {
id: 'company-address-filter-is-not-empty', id: 'company-address-filter-is-not-empty',
value: '', value: '',
fieldMetadataId: companyMockAddressFieldMetadataId?.id, fieldMetadataId: companyMockAddressFieldMetadataId?.id,
@ -509,7 +509,7 @@ describe('should work as expected for the different field types', () => {
(field) => field.name === 'phones', (field) => field.name === 'phones',
); );
const phonesFilterContains: Filter = { const phonesFilterContains: RecordFilter = {
id: 'person-phones-filter-contains', id: 'person-phones-filter-contains',
value: '1234567890', value: '1234567890',
fieldMetadataId: personMockPhonesFieldMetadataId?.id, fieldMetadataId: personMockPhonesFieldMetadataId?.id,
@ -523,7 +523,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const phonesFilterDoesNotContain: Filter = { const phonesFilterDoesNotContain: RecordFilter = {
id: 'person-phones-filter-does-not-contain', id: 'person-phones-filter-does-not-contain',
value: '1234567890', value: '1234567890',
fieldMetadataId: personMockPhonesFieldMetadataId?.id, fieldMetadataId: personMockPhonesFieldMetadataId?.id,
@ -537,7 +537,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const phonesFilterIsEmpty: Filter = { const phonesFilterIsEmpty: RecordFilter = {
id: 'person-phones-filter-is-empty', id: 'person-phones-filter-is-empty',
value: '', value: '',
fieldMetadataId: personMockPhonesFieldMetadataId?.id, fieldMetadataId: personMockPhonesFieldMetadataId?.id,
@ -551,7 +551,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const phonesFilterIsNotEmpty: Filter = { const phonesFilterIsNotEmpty: RecordFilter = {
id: 'person-phones-filter-is-not-empty', id: 'person-phones-filter-is-not-empty',
value: '', value: '',
fieldMetadataId: personMockPhonesFieldMetadataId?.id, fieldMetadataId: personMockPhonesFieldMetadataId?.id,
@ -659,7 +659,7 @@ describe('should work as expected for the different field types', () => {
(field) => field.name === 'emails', (field) => field.name === 'emails',
); );
const emailsFilterContains: Filter = { const emailsFilterContains: RecordFilter = {
id: 'person-emails-filter-contains', id: 'person-emails-filter-contains',
value: 'test@test.com', value: 'test@test.com',
fieldMetadataId: personMockEmailFieldMetadataId?.id, fieldMetadataId: personMockEmailFieldMetadataId?.id,
@ -673,7 +673,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const emailsFilterDoesNotContain: Filter = { const emailsFilterDoesNotContain: RecordFilter = {
id: 'person-emails-filter-does-not-contain', id: 'person-emails-filter-does-not-contain',
value: 'test@test.com', value: 'test@test.com',
fieldMetadataId: personMockEmailFieldMetadataId?.id, fieldMetadataId: personMockEmailFieldMetadataId?.id,
@ -687,7 +687,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const emailsFilterIsEmpty: Filter = { const emailsFilterIsEmpty: RecordFilter = {
id: 'person-emails-filter-is-empty', id: 'person-emails-filter-is-empty',
value: '', value: '',
fieldMetadataId: personMockEmailFieldMetadataId?.id, fieldMetadataId: personMockEmailFieldMetadataId?.id,
@ -701,7 +701,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const emailsFilterIsNotEmpty: Filter = { const emailsFilterIsNotEmpty: RecordFilter = {
id: 'person-emails-filter-is-not-empty', id: 'person-emails-filter-is-not-empty',
value: '', value: '',
fieldMetadataId: personMockEmailFieldMetadataId?.id, fieldMetadataId: personMockEmailFieldMetadataId?.id,
@ -801,7 +801,7 @@ describe('should work as expected for the different field types', () => {
(field) => field.name === 'createdAt', (field) => field.name === 'createdAt',
); );
const dateFilterIsAfter: Filter = { const dateFilterIsAfter: RecordFilter = {
id: 'company-date-filter-is-after', id: 'company-date-filter-is-after',
value: '2024-09-17T20:46:58.922Z', value: '2024-09-17T20:46:58.922Z',
fieldMetadataId: companyMockDateFieldMetadataId?.id, fieldMetadataId: companyMockDateFieldMetadataId?.id,
@ -815,7 +815,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const dateFilterIsBefore: Filter = { const dateFilterIsBefore: RecordFilter = {
id: 'company-date-filter-is-before', id: 'company-date-filter-is-before',
value: '2024-09-17T20:46:58.922Z', value: '2024-09-17T20:46:58.922Z',
fieldMetadataId: companyMockDateFieldMetadataId?.id, fieldMetadataId: companyMockDateFieldMetadataId?.id,
@ -829,7 +829,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const dateFilterIs: Filter = { const dateFilterIs: RecordFilter = {
id: 'company-date-filter-is', id: 'company-date-filter-is',
value: '2024-09-17T20:46:58.922Z', value: '2024-09-17T20:46:58.922Z',
fieldMetadataId: companyMockDateFieldMetadataId?.id, fieldMetadataId: companyMockDateFieldMetadataId?.id,
@ -843,7 +843,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const dateFilterIsEmpty: Filter = { const dateFilterIsEmpty: RecordFilter = {
id: 'company-date-filter-is-empty', id: 'company-date-filter-is-empty',
value: '', value: '',
fieldMetadataId: companyMockDateFieldMetadataId?.id, fieldMetadataId: companyMockDateFieldMetadataId?.id,
@ -857,7 +857,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const dateFilterIsNotEmpty: Filter = { const dateFilterIsNotEmpty: RecordFilter = {
id: 'company-date-filter-is-not-empty', id: 'company-date-filter-is-not-empty',
value: '', value: '',
fieldMetadataId: companyMockDateFieldMetadataId?.id, fieldMetadataId: companyMockDateFieldMetadataId?.id,
@ -932,7 +932,7 @@ describe('should work as expected for the different field types', () => {
(field) => field.name === 'employees', (field) => field.name === 'employees',
); );
const employeesFilterIsGreaterThan: Filter = { const employeesFilterIsGreaterThan: RecordFilter = {
id: 'company-employees-filter-is-greater-than', id: 'company-employees-filter-is-greater-than',
value: '1000', value: '1000',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id, fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
@ -946,7 +946,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const employeesFilterIsLessThan: Filter = { const employeesFilterIsLessThan: RecordFilter = {
id: 'company-employees-filter-is-less-than', id: 'company-employees-filter-is-less-than',
value: '1000', value: '1000',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id, fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
@ -960,7 +960,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const employeesFilterIsEmpty: Filter = { const employeesFilterIsEmpty: RecordFilter = {
id: 'company-employees-filter-is-empty', id: 'company-employees-filter-is-empty',
value: '', value: '',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id, fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,
@ -974,7 +974,7 @@ describe('should work as expected for the different field types', () => {
}, },
}; };
const employeesFilterIsNotEmpty: Filter = { const employeesFilterIsNotEmpty: RecordFilter = {
id: 'company-employees-filter-is-not-empty', id: 'company-employees-filter-is-not-empty',
value: '', value: '',
fieldMetadataId: companyMockEmployeesFieldMetadataId?.id, fieldMetadataId: companyMockEmployeesFieldMetadataId?.id,

View File

@ -18,7 +18,6 @@ import {
SelectFilter, SelectFilter,
StringFilter, StringFilter,
} from '@/object-record/graphql/types/RecordGqlOperationFilter'; } from '@/object-record/graphql/types/RecordGqlOperationFilter';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { Field } from '~/generated/graphql'; import { Field } from '~/generated/graphql';
import { generateILikeFiltersForCompositeFields } from '~/utils/array/generateILikeFiltersForCompositeFields'; import { generateILikeFiltersForCompositeFields } from '~/utils/array/generateILikeFiltersForCompositeFields';
import { isDefined } from '~/utils/isDefined'; import { isDefined } from '~/utils/isDefined';
@ -28,8 +27,9 @@ import {
convertLessThanRatingToArrayOfRatingValues, convertLessThanRatingToArrayOfRatingValues,
convertRatingToRatingValue, convertRatingToRatingValue,
} from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownRatingInput'; } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownRatingInput';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { FilterValueDependencies } from '@/object-record/record-filter/types/FilterValueDependencies'; import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
import { getEmptyRecordGqlOperationFilter } from '@/object-record/record-filter/utils/getEmptyRecordGqlOperationFilter'; import { getEmptyRecordGqlOperationFilter } from '@/object-record/record-filter/utils/getEmptyRecordGqlOperationFilter';
import { ViewFilterGroup } from '@/views/types/ViewFilterGroup'; import { ViewFilterGroup } from '@/views/types/ViewFilterGroup';
import { ViewFilterGroupLogicalOperator } from '@/views/types/ViewFilterGroupLogicalOperator'; import { ViewFilterGroupLogicalOperator } from '@/views/types/ViewFilterGroupLogicalOperator';
@ -41,8 +41,8 @@ import { endOfDay, roundToNearestMinutes, startOfDay } from 'date-fns';
import { z } from 'zod'; import { z } from 'zod';
const computeFilterRecordGqlOperationFilter = ( const computeFilterRecordGqlOperationFilter = (
filterValueDependencies: FilterValueDependencies, filterValueDependencies: RecordFilterValueDependencies,
filter: Filter, filter: RecordFilter,
fields: Pick<Field, 'id' | 'name'>[], fields: Pick<Field, 'id' | 'name'>[],
): RecordGqlOperationFilter | undefined => { ): RecordGqlOperationFilter | undefined => {
const correspondingField = fields.find( const correspondingField = fields.find(
@ -54,11 +54,11 @@ const computeFilterRecordGqlOperationFilter = (
const isCompositeFieldFiter = isNonEmptyString(compositeFieldName); const isCompositeFieldFiter = isNonEmptyString(compositeFieldName);
const isEmptyOperand = [ const isEmptyOperand = [
ViewFilterOperand.IsEmpty, RecordFilterOperand.IsEmpty,
ViewFilterOperand.IsNotEmpty, RecordFilterOperand.IsNotEmpty,
ViewFilterOperand.IsInPast, RecordFilterOperand.IsInPast,
ViewFilterOperand.IsInFuture, RecordFilterOperand.IsInFuture,
ViewFilterOperand.IsToday, RecordFilterOperand.IsToday,
].includes(filter.operand); ].includes(filter.operand);
if (!correspondingField) { if (!correspondingField) {
@ -74,13 +74,13 @@ const computeFilterRecordGqlOperationFilter = (
switch (filter.definition.type) { switch (filter.definition.type) {
case 'TEXT': case 'TEXT':
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
ilike: `%${filter.value}%`, ilike: `%${filter.value}%`,
} as StringFilter, } as StringFilter,
}; };
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
return { return {
not: { not: {
[correspondingField.name]: { [correspondingField.name]: {
@ -88,8 +88,8 @@ const computeFilterRecordGqlOperationFilter = (
} as StringFilter, } as StringFilter,
}, },
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -102,13 +102,13 @@ const computeFilterRecordGqlOperationFilter = (
} }
case 'RAW_JSON': case 'RAW_JSON':
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
like: `%${filter.value}%`, like: `%${filter.value}%`,
} as RawJsonFilter, } as RawJsonFilter,
}; };
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
return { return {
not: { not: {
[correspondingField.name]: { [correspondingField.name]: {
@ -116,8 +116,8 @@ const computeFilterRecordGqlOperationFilter = (
} as RawJsonFilter, } as RawJsonFilter,
}, },
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -136,36 +136,36 @@ const computeFilterRecordGqlOperationFilter = (
resolvedFilterValue instanceof Date ? resolvedFilterValue : now; resolvedFilterValue instanceof Date ? resolvedFilterValue : now;
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.IsAfter: { case RecordFilterOperand.IsAfter: {
return { return {
[correspondingField.name]: { [correspondingField.name]: {
gt: date.toISOString(), gt: date.toISOString(),
} as DateFilter, } as DateFilter,
}; };
} }
case ViewFilterOperand.IsBefore: { case RecordFilterOperand.IsBefore: {
return { return {
[correspondingField.name]: { [correspondingField.name]: {
lt: date.toISOString(), lt: date.toISOString(),
} as DateFilter, } as DateFilter,
}; };
} }
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: { case RecordFilterOperand.IsNotEmpty: {
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
filter.definition, filter.definition,
); );
} }
case ViewFilterOperand.IsRelative: { case RecordFilterOperand.IsRelative: {
const dateRange = z const dateRange = z
.object({ start: z.date(), end: z.date() }) .object({ start: z.date(), end: z.date() })
.safeParse(resolvedFilterValue).data; .safeParse(resolvedFilterValue).data;
const defaultDateRange = resolveDateViewFilterValue({ const defaultDateRange = resolveDateViewFilterValue({
value: 'PAST_1_DAY', value: 'PAST_1_DAY',
operand: ViewFilterOperand.IsRelative, operand: RecordFilterOperand.IsRelative,
}); });
if (!defaultDateRange) { if (!defaultDateRange) {
@ -189,7 +189,7 @@ const computeFilterRecordGqlOperationFilter = (
], ],
}; };
} }
case ViewFilterOperand.Is: { case RecordFilterOperand.Is: {
const isValid = resolvedFilterValue instanceof Date; const isValid = resolvedFilterValue instanceof Date;
const date = isValid ? resolvedFilterValue : now; const date = isValid ? resolvedFilterValue : now;
@ -208,19 +208,19 @@ const computeFilterRecordGqlOperationFilter = (
], ],
}; };
} }
case ViewFilterOperand.IsInPast: case RecordFilterOperand.IsInPast:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
lte: now.toISOString(), lte: now.toISOString(),
} as DateFilter, } as DateFilter,
}; };
case ViewFilterOperand.IsInFuture: case RecordFilterOperand.IsInFuture:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
gte: now.toISOString(), gte: now.toISOString(),
} as DateFilter, } as DateFilter,
}; };
case ViewFilterOperand.IsToday: { case RecordFilterOperand.IsToday: {
return { return {
and: [ and: [
{ {
@ -244,13 +244,13 @@ const computeFilterRecordGqlOperationFilter = (
} }
case 'RATING': case 'RATING':
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Is: case RecordFilterOperand.Is:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
eq: convertRatingToRatingValue(parseFloat(filter.value)), eq: convertRatingToRatingValue(parseFloat(filter.value)),
} as RatingFilter, } as RatingFilter,
}; };
case ViewFilterOperand.GreaterThan: case RecordFilterOperand.GreaterThan:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
in: convertGreaterThanRatingToArrayOfRatingValues( in: convertGreaterThanRatingToArrayOfRatingValues(
@ -258,7 +258,7 @@ const computeFilterRecordGqlOperationFilter = (
), ),
} as RatingFilter, } as RatingFilter,
}; };
case ViewFilterOperand.LessThan: case RecordFilterOperand.LessThan:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
in: convertLessThanRatingToArrayOfRatingValues( in: convertLessThanRatingToArrayOfRatingValues(
@ -266,8 +266,8 @@ const computeFilterRecordGqlOperationFilter = (
), ),
} as RatingFilter, } as RatingFilter,
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -280,20 +280,20 @@ const computeFilterRecordGqlOperationFilter = (
} }
case 'NUMBER': case 'NUMBER':
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.GreaterThan: case RecordFilterOperand.GreaterThan:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
gte: parseFloat(filter.value), gte: parseFloat(filter.value),
} as FloatFilter, } as FloatFilter,
}; };
case ViewFilterOperand.LessThan: case RecordFilterOperand.LessThan:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
lte: parseFloat(filter.value), lte: parseFloat(filter.value),
} as FloatFilter, } as FloatFilter,
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -325,13 +325,13 @@ const computeFilterRecordGqlOperationFilter = (
if (recordIds.length === 0) return; if (recordIds.length === 0) return;
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Is: case RecordFilterOperand.Is:
return { return {
[correspondingField.name + 'Id']: { [correspondingField.name + 'Id']: {
in: recordIds, in: recordIds,
} as RelationFilter, } as RelationFilter,
}; };
case ViewFilterOperand.IsNot: { case RecordFilterOperand.IsNot: {
if (recordIds.length === 0) return; if (recordIds.length === 0) return;
return { return {
or: [ or: [
@ -357,8 +357,8 @@ const computeFilterRecordGqlOperationFilter = (
} }
} else { } else {
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -373,20 +373,20 @@ const computeFilterRecordGqlOperationFilter = (
} }
case 'CURRENCY': case 'CURRENCY':
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.GreaterThan: case RecordFilterOperand.GreaterThan:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
amountMicros: { gte: parseFloat(filter.value) * 1000000 }, amountMicros: { gte: parseFloat(filter.value) * 1000000 },
} as CurrencyFilter, } as CurrencyFilter,
}; };
case ViewFilterOperand.LessThan: case RecordFilterOperand.LessThan:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
amountMicros: { lte: parseFloat(filter.value) * 1000000 }, amountMicros: { lte: parseFloat(filter.value) * 1000000 },
} as CurrencyFilter, } as CurrencyFilter,
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -405,7 +405,7 @@ const computeFilterRecordGqlOperationFilter = (
); );
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
if (!isCompositeFieldFiter) { if (!isCompositeFieldFiter) {
return { return {
or: linksFilters, or: linksFilters,
@ -419,7 +419,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
if (!isCompositeFieldFiter) { if (!isCompositeFieldFiter) {
return { return {
and: linksFilters.map((filter) => { and: linksFilters.map((filter) => {
@ -439,8 +439,8 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -459,7 +459,7 @@ const computeFilterRecordGqlOperationFilter = (
['firstName', 'lastName'], ['firstName', 'lastName'],
); );
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
if (!isCompositeFieldFiter) { if (!isCompositeFieldFiter) {
return { return {
or: fullNameFilters, or: fullNameFilters,
@ -473,7 +473,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
if (!isCompositeFieldFiter) { if (!isCompositeFieldFiter) {
return { return {
and: fullNameFilters.map((filter) => { and: fullNameFilters.map((filter) => {
@ -493,8 +493,8 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -508,7 +508,7 @@ const computeFilterRecordGqlOperationFilter = (
} }
case 'ADDRESS': case 'ADDRESS':
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
if (!isCompositeFieldFiter) { if (!isCompositeFieldFiter) {
return { return {
or: [ or: [
@ -565,7 +565,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
if (!isCompositeFieldFiter) { if (!isCompositeFieldFiter) {
return { return {
and: [ and: [
@ -609,8 +609,8 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -635,13 +635,13 @@ const computeFilterRecordGqlOperationFilter = (
if (options.length === 0) return; if (options.length === 0) return;
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
containsAny: options, containsAny: options,
} as MultiSelectFilter, } as MultiSelectFilter,
}; };
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
return { return {
or: [ or: [
{ {
@ -682,13 +682,13 @@ const computeFilterRecordGqlOperationFilter = (
if (options.length === 0) return; if (options.length === 0) return;
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Is: case RecordFilterOperand.Is:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
in: options, in: options,
} as SelectFilter, } as SelectFilter,
}; };
case ViewFilterOperand.IsNot: case RecordFilterOperand.IsNot:
return { return {
not: { not: {
[correspondingField.name]: { [correspondingField.name]: {
@ -704,13 +704,13 @@ const computeFilterRecordGqlOperationFilter = (
} }
case 'ARRAY': { case 'ARRAY': {
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
return { return {
[correspondingField.name]: { [correspondingField.name]: {
containsIlike: `%${filter.value}%`, containsIlike: `%${filter.value}%`,
} as ArrayFilter, } as ArrayFilter,
}; };
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
return { return {
not: { not: {
[correspondingField.name]: { [correspondingField.name]: {
@ -718,8 +718,8 @@ const computeFilterRecordGqlOperationFilter = (
} as ArrayFilter, } as ArrayFilter,
}, },
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -734,7 +734,7 @@ const computeFilterRecordGqlOperationFilter = (
// TODO: fix this with a new composite field in ViewFilter entity // TODO: fix this with a new composite field in ViewFilter entity
case 'ACTOR': { case 'ACTOR': {
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Is: { case RecordFilterOperand.Is: {
const parsedRecordIds = JSON.parse(filter.value) as string[]; const parsedRecordIds = JSON.parse(filter.value) as string[];
return { return {
@ -745,7 +745,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.IsNot: { case RecordFilterOperand.IsNot: {
const parsedRecordIds = JSON.parse(filter.value) as string[]; const parsedRecordIds = JSON.parse(filter.value) as string[];
if (parsedRecordIds.length === 0) return; if (parsedRecordIds.length === 0) return;
@ -760,7 +760,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
}; };
} }
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
return { return {
or: [ or: [
{ {
@ -772,7 +772,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
], ],
}; };
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
return { return {
and: [ and: [
{ {
@ -786,8 +786,8 @@ const computeFilterRecordGqlOperationFilter = (
}, },
], ],
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -801,7 +801,7 @@ const computeFilterRecordGqlOperationFilter = (
} }
case 'EMAILS': case 'EMAILS':
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
return { return {
or: [ or: [
{ {
@ -813,7 +813,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
], ],
}; };
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
return { return {
and: [ and: [
{ {
@ -827,8 +827,8 @@ const computeFilterRecordGqlOperationFilter = (
}, },
], ],
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -843,7 +843,7 @@ const computeFilterRecordGqlOperationFilter = (
const filterValue = filter.value.replace(/[^0-9]/g, ''); const filterValue = filter.value.replace(/[^0-9]/g, '');
switch (filter.operand) { switch (filter.operand) {
case ViewFilterOperand.Contains: case RecordFilterOperand.Contains:
return { return {
or: [ or: [
{ {
@ -855,7 +855,7 @@ const computeFilterRecordGqlOperationFilter = (
}, },
], ],
}; };
case ViewFilterOperand.DoesNotContain: case RecordFilterOperand.DoesNotContain:
return { return {
and: [ and: [
{ {
@ -869,8 +869,8 @@ const computeFilterRecordGqlOperationFilter = (
}, },
], ],
}; };
case ViewFilterOperand.IsEmpty: case RecordFilterOperand.IsEmpty:
case ViewFilterOperand.IsNotEmpty: case RecordFilterOperand.IsNotEmpty:
return getEmptyRecordGqlOperationFilter( return getEmptyRecordGqlOperationFilter(
filter.operand, filter.operand,
correspondingField, correspondingField,
@ -895,8 +895,8 @@ const computeFilterRecordGqlOperationFilter = (
}; };
const computeViewFilterGroupRecordGqlOperationFilter = ( const computeViewFilterGroupRecordGqlOperationFilter = (
filterValueDependencies: FilterValueDependencies, filterValueDependencies: RecordFilterValueDependencies,
filters: Filter[], filters: RecordFilter[],
fields: Pick<Field, 'id' | 'name'>[], fields: Pick<Field, 'id' | 'name'>[],
viewFilterGroups: ViewFilterGroup[], viewFilterGroups: ViewFilterGroup[],
currentViewFilterGroupId?: string, currentViewFilterGroupId?: string,
@ -966,8 +966,8 @@ const computeViewFilterGroupRecordGqlOperationFilter = (
}; };
export const computeViewRecordGqlOperationFilter = ( export const computeViewRecordGqlOperationFilter = (
filterValueDependencies: FilterValueDependencies, filterValueDependencies: RecordFilterValueDependencies,
filters: Filter[], filters: RecordFilter[],
fields: Pick<Field, 'id' | 'name'>[], fields: Pick<Field, 'id' | 'name'>[],
viewFilterGroups: ViewFilterGroup[], viewFilterGroups: ViewFilterGroup[],
): RecordGqlOperationFilter => { ): RecordGqlOperationFilter => {

View File

@ -15,7 +15,7 @@ import {
StringFilter, StringFilter,
URLFilter, URLFilter,
} from '@/object-record/graphql/types/RecordGqlOperationFilter'; } from '@/object-record/graphql/types/RecordGqlOperationFilter';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { isNonEmptyString } from '@sniptt/guards'; import { isNonEmptyString } from '@sniptt/guards';
import { Field } from '~/generated/graphql'; import { Field } from '~/generated/graphql';
@ -24,7 +24,7 @@ import { generateILikeFiltersForCompositeFields } from '~/utils/array/generateIL
export const getEmptyRecordGqlOperationFilter = ( export const getEmptyRecordGqlOperationFilter = (
operand: ViewFilterOperand, operand: ViewFilterOperand,
correspondingField: Pick<Field, 'id' | 'name'>, correspondingField: Pick<Field, 'id' | 'name'>,
definition: FilterDefinition, definition: RecordFilterDefinition,
) => { ) => {
let emptyRecordFilter: RecordGqlOperationFilter = {}; let emptyRecordFilter: RecordGqlOperationFilter = {};

View File

@ -0,0 +1,99 @@
import { isActorSourceCompositeFilter } from '@/object-record/object-filter-dropdown/utils/isActorSourceCompositeFilter';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { ViewFilterOperand as RecordFilterOperand } from '@/views/types/ViewFilterOperand';
export const getRecordFilterOperandsForRecordFilterDefinition = (
filterDefinition: Pick<RecordFilterDefinition, 'type' | 'compositeFieldName'>,
): RecordFilterOperand[] => {
const emptyOperands = [
RecordFilterOperand.IsEmpty,
RecordFilterOperand.IsNotEmpty,
];
const relationOperands = [RecordFilterOperand.Is, RecordFilterOperand.IsNot];
switch (filterDefinition.type) {
case 'TEXT':
case 'EMAILS':
case 'FULL_NAME':
case 'ADDRESS':
case 'LINKS':
case 'PHONES':
return [
RecordFilterOperand.Contains,
RecordFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'CURRENCY':
case 'NUMBER':
return [
RecordFilterOperand.GreaterThan,
RecordFilterOperand.LessThan,
...emptyOperands,
];
case 'RAW_JSON':
return [
RecordFilterOperand.Contains,
RecordFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'DATE_TIME':
case 'DATE':
return [
RecordFilterOperand.Is,
RecordFilterOperand.IsRelative,
RecordFilterOperand.IsInPast,
RecordFilterOperand.IsInFuture,
RecordFilterOperand.IsToday,
RecordFilterOperand.IsBefore,
RecordFilterOperand.IsAfter,
...emptyOperands,
];
case 'RATING':
return [
RecordFilterOperand.Is,
RecordFilterOperand.GreaterThan,
RecordFilterOperand.LessThan,
...emptyOperands,
];
case 'RELATION':
return [...relationOperands, ...emptyOperands];
case 'MULTI_SELECT':
return [
RecordFilterOperand.Contains,
RecordFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'SELECT':
return [
RecordFilterOperand.Is,
RecordFilterOperand.IsNot,
...emptyOperands,
];
case 'ACTOR': {
if (isActorSourceCompositeFilter(filterDefinition)) {
return [
RecordFilterOperand.Is,
RecordFilterOperand.IsNot,
...emptyOperands,
];
}
return [
RecordFilterOperand.Contains,
RecordFilterOperand.DoesNotContain,
...emptyOperands,
];
}
case 'ARRAY':
return [
RecordFilterOperand.Contains,
RecordFilterOperand.DoesNotContain,
...emptyOperands,
];
case 'BOOLEAN':
return [RecordFilterOperand.Is];
default:
return [];
}
};

View File

@ -4,8 +4,9 @@ import { v4 } from 'uuid';
import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata'; import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useSelectFilterDefinitionUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown'; import { useSelectFilterDefinitionUsedInDropdown } from '@/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter';
import { getOperandsForFilterDefinition } from '@/object-record/object-filter-dropdown/utils/getOperandsForFilterType'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState'; import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState'; import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState';
@ -79,11 +80,11 @@ export const useHandleToggleColumnFilter = ({
} }
const availableOperandsForFilter = const availableOperandsForFilter =
getOperandsForFilterDefinition(filterDefinition); getRecordFilterOperandsForRecordFilterDefinition(filterDefinition);
const defaultOperand = availableOperandsForFilter[0]; const defaultOperand = availableOperandsForFilter[0];
const newFilter: Filter = { const newFilter: RecordFilter = {
id: newFilterId, id: newFilterId,
fieldMetadataId, fieldMetadataId,
operand: defaultOperand, operand: defaultOperand,

View File

@ -4,7 +4,7 @@ import { v4 } from 'uuid';
import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata'; import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions'; import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { isSoftDeleteFilterActiveComponentState } from '@/object-record/record-table/states/isSoftDeleteFilterActiveComponentState'; import { isSoftDeleteFilterActiveComponentState } from '@/object-record/record-table/states/isSoftDeleteFilterActiveComponentState';
import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2';
import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters'; import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters';
@ -54,7 +54,7 @@ export const useHandleToggleTrashColumnFilter = ({
correspondingColumnDefinition?.type, correspondingColumnDefinition?.type,
); );
const newFilter: Filter = { const newFilter: RecordFilter = {
id: v4(), id: v4(),
variant: 'danger', variant: 'danger',
fieldMetadataId: trashFieldMetadata.id, fieldMetadataId: trashFieldMetadata.id,

View File

@ -1,8 +1,8 @@
import { createState } from '@ui/utilities/state/utils/createState'; import { createState } from '@ui/utilities/state/utils/createState';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
export const recordIndexFiltersState = createState<Filter[]>({ export const recordIndexFiltersState = createState<RecordFilter[]>({
key: 'recordIndexFiltersState', key: 'recordIndexFiltersState',
defaultValue: [], defaultValue: [],
}); });

View File

@ -1,8 +1,10 @@
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { RecordTableComponentInstanceContext } from '@/object-record/record-table/states/context/RecordTableComponentInstanceContext'; import { RecordTableComponentInstanceContext } from '@/object-record/record-table/states/context/RecordTableComponentInstanceContext';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const tableFiltersComponentState = createComponentStateV2<Filter[]>({ export const tableFiltersComponentState = createComponentStateV2<
RecordFilter[]
>({
key: 'tableFiltersComponentState', key: 'tableFiltersComponentState',
defaultValue: [], defaultValue: [],
componentInstanceContext: RecordTableComponentInstanceContext, componentInstanceContext: RecordTableComponentInstanceContext,

View File

@ -1,4 +1,4 @@
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
export const SIGN_IN_BACKGROUND_MOCK_FILTER_DEFINITIONS = [ export const SIGN_IN_BACKGROUND_MOCK_FILTER_DEFINITIONS = [
{ {
@ -57,4 +57,4 @@ export const SIGN_IN_BACKGROUND_MOCK_FILTER_DEFINITIONS = [
iconName: 'IconMoneybag', iconName: 'IconMoneybag',
type: 'CURRENCY', type: 'CURRENCY',
}, },
] as FilterDefinition[]; ] as RecordFilterDefinition[];

View File

@ -1,11 +1,11 @@
import { useIcons } from 'twenty-ui'; import { useIcons } from 'twenty-ui';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter';
import { getOperandLabelShort } from '@/object-record/object-filter-dropdown/utils/getOperandLabel'; import { getOperandLabelShort } from '@/object-record/object-filter-dropdown/utils/getOperandLabel';
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { SortOrFilterChip } from '@/views/components/SortOrFilterChip'; import { SortOrFilterChip } from '@/views/components/SortOrFilterChip';
type EditableFilterChipProps = { type EditableFilterChipProps = {
viewFilter: Filter; viewFilter: RecordFilter;
onRemove: () => void; onRemove: () => void;
}; };

View File

@ -1,18 +1,17 @@
import { useCallback, useEffect } from 'react'; import { useCallback, useEffect } from 'react';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { FilterOperand } from '@/object-record/object-filter-dropdown/types/FilterOperand';
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { EditableFilterChip } from '@/views/components/EditableFilterChip'; import { EditableFilterChip } from '@/views/components/EditableFilterChip';
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
import { ObjectFilterOperandSelectAndInput } from '@/object-record/object-filter-dropdown/components/ObjectFilterOperandSelectAndInput'; import { ObjectFilterOperandSelectAndInput } from '@/object-record/object-filter-dropdown/components/ObjectFilterOperandSelectAndInput';
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState'; import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState'; import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState'; import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters'; import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters';
import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState'; import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState';
@ -20,7 +19,7 @@ import { isDefined } from '~/utils/isDefined';
type EditableFilterDropdownButtonProps = { type EditableFilterDropdownButtonProps = {
viewFilterDropdownId: string; viewFilterDropdownId: string;
viewFilter: Filter; viewFilter: RecordFilter;
hotkeyScope: HotkeyScope; hotkeyScope: HotkeyScope;
}; };
@ -85,11 +84,11 @@ export const EditableFilterDropdownButton = ({
if ( if (
!value && !value &&
![ ![
FilterOperand.IsEmpty, RecordFilterOperand.IsEmpty,
FilterOperand.IsNotEmpty, RecordFilterOperand.IsNotEmpty,
ViewFilterOperand.IsInPast, RecordFilterOperand.IsInPast,
ViewFilterOperand.IsInFuture, RecordFilterOperand.IsInFuture,
ViewFilterOperand.IsToday, RecordFilterOperand.IsToday,
].includes(operand) ].includes(operand)
) { ) {
deleteCombinedViewFilter(fieldId); deleteCombinedViewFilter(fieldId);

View File

@ -1,14 +1,14 @@
import { useIcons } from 'twenty-ui'; import { useIcons } from 'twenty-ui';
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural'; import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { useHandleToggleTrashColumnFilter } from '@/object-record/record-index/hooks/useHandleToggleTrashColumnFilter'; import { useHandleToggleTrashColumnFilter } from '@/object-record/record-index/hooks/useHandleToggleTrashColumnFilter';
import { SortOrFilterChip } from '@/views/components/SortOrFilterChip'; import { SortOrFilterChip } from '@/views/components/SortOrFilterChip';
import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters'; import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters';
import { useParams } from 'react-router-dom'; import { useParams } from 'react-router-dom';
type VariantFilterChipProps = { type VariantFilterChipProps = {
viewFilter: Filter; viewFilter: RecordFilter;
viewBarId: string; viewBarId: string;
}; };

View File

@ -2,8 +2,8 @@ import { ReactNode } from 'react';
import { useParams } from 'react-router-dom'; import { useParams } from 'react-router-dom';
import { ObjectFilterDropdownButton } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownButton'; import { ObjectFilterDropdownButton } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownButton';
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
import { ObjectSortDropdownButton } from '@/object-record/object-sort-dropdown/components/ObjectSortDropdownButton'; import { ObjectSortDropdownButton } from '@/object-record/object-sort-dropdown/components/ObjectSortDropdownButton';
import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading'; import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading';
import { TopBar } from '@/ui/layout/top-bar/components/TopBar'; import { TopBar } from '@/ui/layout/top-bar/components/TopBar';
import { QueryParamsFiltersEffect } from '@/views/components/QueryParamsFiltersEffect'; import { QueryParamsFiltersEffect } from '@/views/components/QueryParamsFiltersEffect';
@ -18,6 +18,7 @@ import { ViewPickerDropdown } from '@/views/view-picker/components/ViewPickerDro
import { ViewsHotkeyScope } from '../types/ViewsHotkeyScope'; import { ViewsHotkeyScope } from '../types/ViewsHotkeyScope';
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
import { VIEW_SORT_DROPDOWN_ID } from '@/object-record/object-sort-dropdown/constants/ViewSortDropdownId'; import { VIEW_SORT_DROPDOWN_ID } from '@/object-record/object-sort-dropdown/constants/ViewSortDropdownId';
import { ObjectSortDropdownComponentInstanceContext } from '@/object-record/object-sort-dropdown/states/context/ObjectSortDropdownComponentInstanceContext'; import { ObjectSortDropdownComponentInstanceContext } from '@/object-record/object-sort-dropdown/states/context/ObjectSortDropdownComponentInstanceContext';
import { ViewEventContext } from '@/views/events/contexts/ViewEventContext'; import { ViewEventContext } from '@/views/events/contexts/ViewEventContext';

View File

@ -4,7 +4,7 @@ import { ReactNode, useMemo } from 'react';
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural'; import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
import { AddObjectFilterFromDetailsButton } from '@/object-record/object-filter-dropdown/components/AddObjectFilterFromDetailsButton'; import { AddObjectFilterFromDetailsButton } from '@/object-record/object-filter-dropdown/components/AddObjectFilterFromDetailsButton';
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { useHandleToggleTrashColumnFilter } from '@/object-record/record-index/hooks/useHandleToggleTrashColumnFilter'; import { useHandleToggleTrashColumnFilter } from '@/object-record/record-index/hooks/useHandleToggleTrashColumnFilter';
import { DropdownScope } from '@/ui/layout/dropdown/scopes/DropdownScope'; import { DropdownScope } from '@/ui/layout/dropdown/scopes/DropdownScope';
import { useRecoilComponentFamilyValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValueV2'; import { useRecoilComponentFamilyValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValueV2';
@ -199,7 +199,7 @@ export const ViewBarDetails = ({
// Why key defition is already present in the Filter type and added on the fly here with mapViewFiltersToFilters ? // Why key defition is already present in the Filter type and added on the fly here with mapViewFiltersToFilters ?
// Also as filter is spread into viewFilter, definition is present // Also as filter is spread into viewFilter, definition is present
// FixMe: Ugly hack to make it work // FixMe: Ugly hack to make it work
viewFilter={viewFilter as unknown as Filter} viewFilter={viewFilter as unknown as RecordFilter}
viewBarId={viewBarId} viewBarId={viewBarId}
/> />
))} ))}

View File

@ -1,7 +1,7 @@
import { isNonEmptyString } from '@sniptt/guards'; import { isNonEmptyString } from '@sniptt/guards';
import { useEffect } from 'react'; import { useEffect } from 'react';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
@ -62,7 +62,7 @@ export const ViewBarFilterEffect = ({
if (isDefined(availableFilterDefinitions)) { if (isDefined(availableFilterDefinitions)) {
setAvailableFilterDefinitions(availableFilterDefinitions); setAvailableFilterDefinitions(availableFilterDefinitions);
} }
setOnFilterSelect(() => (filter: Filter | null) => { setOnFilterSelect(() => (filter: RecordFilter | null) => {
if (isDefined(filter)) { if (isDefined(filter)) {
upsertCombinedViewFilter(filter); upsertCombinedViewFilter(filter);
} }

View File

@ -1,6 +1,6 @@
import { useRecoilCallback } from 'recoil'; import { useRecoilCallback } from 'recoil';
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue';
import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2';
import { useGetViewFromCache } from '@/views/hooks/useGetViewFromCache'; import { useGetViewFromCache } from '@/views/hooks/useGetViewFromCache';
@ -33,7 +33,7 @@ export const useUpsertCombinedViewFilters = (viewBarComponentId?: string) => {
const upsertCombinedViewFilter = useRecoilCallback( const upsertCombinedViewFilter = useRecoilCallback(
({ snapshot, set }) => ({ snapshot, set }) =>
async (upsertedFilter: Filter) => { async (upsertedFilter: RecordFilter) => {
const currentViewId = getSnapshotValue( const currentViewId = getSnapshotValue(
snapshot, snapshot,
currentViewIdCallbackState, currentViewIdCallbackState,

View File

@ -1,9 +1,9 @@
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext'; import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext';
export const availableFilterDefinitionsComponentState = createComponentStateV2< export const availableFilterDefinitionsComponentState = createComponentStateV2<
FilterDefinition[] RecordFilterDefinition[]
>({ >({
key: 'availableFilterDefinitionsComponentState', key: 'availableFilterDefinitionsComponentState',
defaultValue: [], defaultValue: [],

View File

@ -1,4 +1,4 @@
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { ViewFilterOperand } from './ViewFilterOperand'; import { ViewFilterOperand } from './ViewFilterOperand';
export type ViewFilter = { export type ViewFilter = {
@ -14,5 +14,5 @@ export type ViewFilter = {
viewId?: string; viewId?: string;
viewFilterGroupId?: string; viewFilterGroupId?: string;
positionInViewFilterGroup?: number | null; positionInViewFilterGroup?: number | null;
definition?: FilterDefinition; definition?: RecordFilterDefinition;
}; };

View File

@ -1,6 +1,6 @@
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter';
import { Sort } from '@/object-record/object-sort-dropdown/types/Sort'; import { Sort } from '@/object-record/object-sort-dropdown/types/Sort';
import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata'; import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata';
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition'; import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition';
import { ViewField } from '@/views/types/ViewField'; import { ViewField } from '@/views/types/ViewField';
import { ViewFilter } from '@/views/types/ViewFilter'; import { ViewFilter } from '@/views/types/ViewFilter';
@ -54,7 +54,7 @@ describe('mapViewFiltersToFilters', () => {
operand: ViewFilterOperand.Is, operand: ViewFilterOperand.Is,
}, },
]; ];
const expectedFilters: Filter[] = [ const expectedFilters: RecordFilter[] = [
{ {
id: 'id', id: 'id',
fieldMetadataId: '05731f68-6e7a-4903-8374-c0b6a9063482', fieldMetadataId: '05731f68-6e7a-4903-8374-c0b6a9063482',

View File

@ -3,7 +3,8 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { formatFieldMetadataItemsAsFilterDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions'; import { formatFieldMetadataItemsAsFilterDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { formatFieldMetadataItemsAsSortDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions'; import { formatFieldMetadataItemsAsSortDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions';
import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy'; import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy';
import { FilterValueDependencies } from '@/object-record/record-filter/types/FilterValueDependencies'; import { RecordFilterValueDependencies } from '@/object-record/record-filter/types/RecordFilterValueDependencies';
import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter'; import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter';
import { View } from '@/views/types/View'; import { View } from '@/views/types/View';
import { mapViewFiltersToFilters } from '@/views/utils/mapViewFiltersToFilters'; import { mapViewFiltersToFilters } from '@/views/utils/mapViewFiltersToFilters';
@ -21,7 +22,7 @@ export const getQueryVariablesFromView = ({
fieldMetadataItems: FieldMetadataItem[]; fieldMetadataItems: FieldMetadataItem[];
objectMetadataItem: ObjectMetadataItem; objectMetadataItem: ObjectMetadataItem;
isJsonFilterEnabled: boolean; isJsonFilterEnabled: boolean;
filterValueDependencies: FilterValueDependencies; filterValueDependencies: RecordFilterValueDependencies;
}) => { }) => {
if (!isDefined(view)) { if (!isDefined(view)) {
return { return {

View File

@ -1,13 +1,13 @@
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { FilterDefinition } from '@/object-record/object-filter-dropdown/types/FilterDefinition';
import { isDefined } from '~/utils/isDefined'; import { isDefined } from '~/utils/isDefined';
import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition';
import { ViewFilter } from '../types/ViewFilter'; import { ViewFilter } from '../types/ViewFilter';
export const mapViewFiltersToFilters = ( export const mapViewFiltersToFilters = (
viewFilters: ViewFilter[], viewFilters: ViewFilter[],
availableFilterDefinitions: FilterDefinition[], availableFilterDefinitions: RecordFilterDefinition[],
): Filter[] => { ): RecordFilter[] => {
return viewFilters return viewFilters
.map((viewFilter) => { .map((viewFilter) => {
const availableFilterDefinition = availableFilterDefinitions.find( const availableFilterDefinition = availableFilterDefinitions.find(

View File

@ -1,9 +1,9 @@
import { Filter } from '@/object-record/object-filter-dropdown/types/Filter'; import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
import { isDefined } from 'twenty-ui'; import { isDefined } from 'twenty-ui';
export const shouldReplaceFilter = ( export const shouldReplaceFilter = (
oldFilter: Pick<Filter, 'id' | 'fieldMetadataId' | 'viewFilterGroupId'>, oldFilter: Pick<RecordFilter, 'id' | 'fieldMetadataId' | 'viewFilterGroupId'>,
newFilter: Pick<Filter, 'id' | 'fieldMetadataId' | 'viewFilterGroupId'>, newFilter: Pick<RecordFilter, 'id' | 'fieldMetadataId' | 'viewFilterGroupId'>,
) => { ) => {
const isNewFilterAdvancedFilter = isDefined(newFilter.viewFilterGroupId); const isNewFilterAdvancedFilter = isDefined(newFilter.viewFilterGroupId);