From 230459b23c9be5cdba86cf6527f97de1f19a6fce Mon Sep 17 00:00:00 2001 From: bosiraphael <71827178+bosiraphael@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:05:49 +0100 Subject: [PATCH] 2454 update filter definition to work with new backend (#2482) * wip * filters are working * updated functions * remove comment * improve readability --- front/src/generated/graphql.tsx | 10 +++++ .../hooks/useFindOneObjectMetadataItem.ts | 26 +++++------ ...rmatFieldMetadataItemAsFilterDefinition.ts | 16 ------- ...formatFieldMetadataItemAsSortDefinition.ts | 15 ------- ...atFieldMetadataItemsAsFilterDefinitions.ts | 45 +++++++++++++++++++ ...rmatFieldMetadataItemsAsSortDefinitions.ts | 33 ++++++++++++++ .../components/RecordTableEffect.tsx | 2 - .../utils/turnFiltersIntoWhereClauseV2.ts | 34 ++++++++++++++ .../SettingsObjectNewFieldStep2.tsx | 2 +- 9 files changed, 133 insertions(+), 50 deletions(-) delete mode 100644 front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFilterDefinition.ts delete mode 100644 front/src/modules/object-metadata/utils/formatFieldMetadataItemAsSortDefinition.ts create mode 100644 front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts create mode 100644 front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts diff --git a/front/src/generated/graphql.tsx b/front/src/generated/graphql.tsx index f8e6652dd..21ac44001 100644 --- a/front/src/generated/graphql.tsx +++ b/front/src/generated/graphql.tsx @@ -2558,6 +2558,16 @@ export enum QueryMode { Insensitive = 'insensitive' } +export type RelationConnection = { + __typename?: 'RelationConnection'; + /** Array of edges. */ + edges: Array; + /** Paging information */ + pageInfo: PageInfo; + /** Fetch total count of records */ + totalCount: Scalars['Int']; +}; + export enum SortOrder { Asc = 'asc', Desc = 'desc' diff --git a/front/src/modules/object-metadata/hooks/useFindOneObjectMetadataItem.ts b/front/src/modules/object-metadata/hooks/useFindOneObjectMetadataItem.ts index 4ac370561..f0a5ff1f6 100644 --- a/front/src/modules/object-metadata/hooks/useFindOneObjectMetadataItem.ts +++ b/front/src/modules/object-metadata/hooks/useFindOneObjectMetadataItem.ts @@ -7,14 +7,12 @@ import { generateFindOneCustomObjectQuery } from '@/object-record/utils/generate import { generateUpdateOneObjectMutation } from '@/object-record/utils/generateUpdateOneObjectMutation'; import { useLazyLoadIcons } from '@/ui/input/hooks/useLazyLoadIcons'; import { FieldMetadata } from '@/ui/object/field/types/FieldMetadata'; -import { FilterDefinition } from '@/ui/object/object-filter-dropdown/types/FilterDefinition'; -import { SortDefinition } from '@/ui/object/object-sort-dropdown/types/SortDefinition'; import { ColumnDefinition } from '@/ui/object/record-table/types/ColumnDefinition'; import { ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentifier'; import { formatFieldMetadataItemAsColumnDefinition } from '../utils/formatFieldMetadataItemAsColumnDefinition'; -import { formatFieldMetadataItemAsFilterDefinition } from '../utils/formatFieldMetadataItemAsFilterDefinition'; -import { formatFieldMetadataItemAsSortDefinition } from '../utils/formatFieldMetadataItemAsSortDefinition'; +import { formatFieldMetadataItemsAsFilterDefinitions } from '../utils/formatFieldMetadataItemsAsFilterDefinitions'; +import { formatFieldMetadataItemsAsSortDefinitions } from '../utils/formatFieldMetadataItemsAsSortDefinitions'; import { useFindManyObjectMetadataItems } from './useFindManyObjectMetadataItems'; @@ -66,19 +64,15 @@ export const useFindOneObjectMetadataItem = ({ ) : []; - const filterDefinitions: FilterDefinition[] = activeFields.map((field) => - formatFieldMetadataItemAsFilterDefinition({ - field, - icons, - }), - ); + const filterDefinitions = formatFieldMetadataItemsAsFilterDefinitions({ + fields: activeFields, + icons, + }); - const sortDefinitions: SortDefinition[] = activeFields.map((field) => - formatFieldMetadataItemAsSortDefinition({ - field, - icons, - }), - ); + const sortDefinitions = formatFieldMetadataItemsAsSortDefinitions({ + fields: activeFields, + icons, + }); const findManyQuery = foundObjectMetadataItem ? generateFindManyCustomObjectsQuery({ diff --git a/front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFilterDefinition.ts b/front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFilterDefinition.ts deleted file mode 100644 index e394cfb6a..000000000 --- a/front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFilterDefinition.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { FilterDefinition } from '@/ui/object/object-filter-dropdown/types/FilterDefinition'; - -import { ObjectMetadataItem } from '../types/ObjectMetadataItem'; - -export const formatFieldMetadataItemAsFilterDefinition = ({ - field, - icons, -}: { - field: ObjectMetadataItem['fields'][0]; - icons: Record; -}): FilterDefinition => ({ - fieldMetadataId: field.id, - label: field.label, - Icon: icons[field.icon ?? 'Icon123'], - type: 'TEXT', -}); diff --git a/front/src/modules/object-metadata/utils/formatFieldMetadataItemAsSortDefinition.ts b/front/src/modules/object-metadata/utils/formatFieldMetadataItemAsSortDefinition.ts deleted file mode 100644 index 894e61d33..000000000 --- a/front/src/modules/object-metadata/utils/formatFieldMetadataItemAsSortDefinition.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { SortDefinition } from '@/ui/object/object-sort-dropdown/types/SortDefinition'; - -import { ObjectMetadataItem } from '../types/ObjectMetadataItem'; - -export const formatFieldMetadataItemAsSortDefinition = ({ - field, - icons, -}: { - field: ObjectMetadataItem['fields'][0]; - icons: Record; -}): SortDefinition => ({ - fieldMetadataId: field.id, - label: field.label, - Icon: icons[field.icon ?? 'Icon123'], -}); diff --git a/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts new file mode 100644 index 000000000..16f146f1c --- /dev/null +++ b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts @@ -0,0 +1,45 @@ +import { FilterDefinition } from '@/ui/object/object-filter-dropdown/types/FilterDefinition'; +import { FieldMetadataType } from '~/generated-metadata/graphql'; + +import { ObjectMetadataItem } from '../types/ObjectMetadataItem'; + +export const formatFieldMetadataItemsAsFilterDefinitions = ({ + fields, + icons, +}: { + fields: Array; + icons: Record; +}): FilterDefinition[] => + fields.reduce((acc, field) => { + if ( + ![ + FieldMetadataType.Date, + FieldMetadataType.Number, + FieldMetadataType.Text, + ].includes(field.type) + ) { + return acc; + } + return [ + ...acc, + formatFieldMetadataItemAsFilterDefinition({ field, icons }), + ]; + }, [] as FilterDefinition[]); + +const formatFieldMetadataItemAsFilterDefinition = ({ + field, + icons, +}: { + field: ObjectMetadataItem['fields'][0]; + icons: Record; +}): FilterDefinition => ({ + fieldMetadataId: field.id, + label: field.label, + Icon: icons[field.icon ?? 'Icon123'], + type: + field.type === FieldMetadataType.Date + ? 'DATE' + : field.type === FieldMetadataType.Number + ? 'NUMBER' + : 'TEXT', +}); diff --git a/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts new file mode 100644 index 000000000..8f137b83f --- /dev/null +++ b/front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions.ts @@ -0,0 +1,33 @@ +import { SortDefinition } from '@/ui/object/object-sort-dropdown/types/SortDefinition'; +import { FieldMetadataType } from '~/generated-metadata/graphql'; + +import { ObjectMetadataItem } from '../types/ObjectMetadataItem'; + +export const formatFieldMetadataItemsAsSortDefinitions = ({ + fields, + icons, +}: { + fields: Array; + icons: Record; +}): SortDefinition[] => + fields.reduce((acc, field) => { + if ( + ![ + FieldMetadataType.Date, + FieldMetadataType.Number, + FieldMetadataType.Text, + FieldMetadataType.Boolean, + ].includes(field.type) + ) { + return acc; + } + + return [ + ...acc, + { + fieldMetadataId: field.id, + label: field.label, + Icon: icons[field.icon ?? 'Icon123'], + }, + ]; + }, [] as SortDefinition[]); diff --git a/front/src/modules/object-record/components/RecordTableEffect.tsx b/front/src/modules/object-record/components/RecordTableEffect.tsx index 0fc3a6e2e..399ffa91a 100644 --- a/front/src/modules/object-record/components/RecordTableEffect.tsx +++ b/front/src/modules/object-record/components/RecordTableEffect.tsx @@ -26,8 +26,6 @@ export const RecordTableEffect = () => { setViewObjectMetadataId, } = useView(); - useRecordTable(); - useEffect(() => { if (!foundObjectMetadataItem) { return; diff --git a/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts b/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts index 781fa21ea..63c4ab25e 100644 --- a/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts +++ b/front/src/modules/ui/object/object-filter-dropdown/utils/turnFiltersIntoWhereClauseV2.ts @@ -45,6 +45,40 @@ export const turnFiltersIntoWhereClauseV2 = ( `Unknown operand ${filter.operand} for ${filter.definition.type} filter`, ); } + case 'NUMBER': + switch (filter.operand) { + case ViewFilterOperand.GreaterThan: + whereClause[correspondingField.name] = { + gte: parseFloat(filter.value), + }; + return; + case ViewFilterOperand.LessThan: + whereClause[correspondingField.name] = { + lte: parseFloat(filter.value), + }; + return; + default: + throw new Error( + `Unknown operand ${filter.operand} for ${filter.definition.type} filter`, + ); + } + case 'DATE': + switch (filter.operand) { + case ViewFilterOperand.GreaterThan: + whereClause[correspondingField.name] = { + gte: filter.value, + }; + return; + case ViewFilterOperand.LessThan: + whereClause[correspondingField.name] = { + lte: filter.value, + }; + return; + default: + throw new Error( + `Unknown operand ${filter.operand} for ${filter.definition.type} filter`, + ); + } default: throw new Error('Unknown filter type'); } diff --git a/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx b/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx index 9ceead8ab..e8ff3245d 100644 --- a/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx +++ b/front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2.tsx @@ -76,7 +76,7 @@ export const SettingsObjectNewFieldStep2 = () => { }); objectViews.forEach(async (view) => { await createOneViewField?.({ - viewId: view.id, + view: view.id, fieldMetadataId: createdField.data?.createOneField.id, position: activeObjectMetadataItem.fields.length, isVisible: true,