From 463a2995a99f65057a42fc0c3df505d568024dd7 Mon Sep 17 00:00:00 2001 From: martmull Date: Fri, 21 Mar 2025 16:22:24 +0100 Subject: [PATCH] Fix wrong totalCount in groupBy view (#11094) Add filters by visibleRecordGroup to compute totalCount ## Before see https://github.com/twentyhq/twenty/issues/11067 ## After ![image](https://github.com/user-attachments/assets/333e8898-e051-4554-b462-9b1d2f10ec05) - After hiding `New` and `Meeting` columns: image - With filtering image - Works also in groupBy view image --- .../internal/useGetRecordIndexTotalCount.ts | 5 +++- .../views/hooks/useGetViewGroupsFilters.ts | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 packages/twenty-front/src/modules/views/hooks/useGetViewGroupsFilters.ts diff --git a/packages/twenty-front/src/modules/views/hooks/internal/useGetRecordIndexTotalCount.ts b/packages/twenty-front/src/modules/views/hooks/internal/useGetRecordIndexTotalCount.ts index 9179192cf..efb088b7e 100644 --- a/packages/twenty-front/src/modules/views/hooks/internal/useGetRecordIndexTotalCount.ts +++ b/packages/twenty-front/src/modules/views/hooks/internal/useGetRecordIndexTotalCount.ts @@ -6,6 +6,7 @@ import { currentRecordFiltersComponentState } from '@/object-record/record-filte import { computeRecordGqlOperationFilter } from '@/object-record/record-filter/utils/computeViewRecordGqlOperationFilter'; import { AGGREGATE_OPERATIONS } from '@/object-record/record-table/constants/AggregateOperations'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; +import { useGetViewGroupsFilters } from '@/views/hooks/useGetViewGroupsFilters'; export const useGetRecordIndexTotalCount = () => { const { objectMetadataItem } = useContextStoreObjectMetadataItemOrThrow(); @@ -20,9 +21,11 @@ export const useGetRecordIndexTotalCount = () => { const { filterValueDependencies } = useFilterValueDependencies(); + const recordGroupsVisibilityFilter = useGetViewGroupsFilters(); + const filter = computeRecordGqlOperationFilter({ filterValueDependencies, - recordFilters: currentRecordFilters, + recordFilters: [...currentRecordFilters, ...recordGroupsVisibilityFilter], recordFilterGroups: currentRecordFilterGroups, fields: objectMetadataItem.fields, }); diff --git a/packages/twenty-front/src/modules/views/hooks/useGetViewGroupsFilters.ts b/packages/twenty-front/src/modules/views/hooks/useGetViewGroupsFilters.ts new file mode 100644 index 000000000..e506ae9a1 --- /dev/null +++ b/packages/twenty-front/src/modules/views/hooks/useGetViewGroupsFilters.ts @@ -0,0 +1,26 @@ +import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly'; +import { FieldMetadataType, isDefined } from 'twenty-shared'; +import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; +import { getFilterTypeFromFieldType } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions'; +import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter'; + +export const useGetViewGroupsFilters = (): RecordFilter[] => { + const { currentView } = useGetCurrentViewOnly(); + + return ( + currentView?.viewGroups + .filter((recordGroup) => !recordGroup.isVisible) + .map((recordGroup) => { + return { + id: recordGroup.id, + fieldMetadataId: recordGroup.fieldMetadataId, + value: JSON.stringify([recordGroup.fieldValue]), + operand: ViewFilterOperand.IsNot, + displayValue: '', + type: getFilterTypeFromFieldType(FieldMetadataType.SELECT), + label: '', + }; + }) + .filter(isDefined) || [] + ); +};