From 2482271545d7e2dcdf5bdad2d349c0957c470952 Mon Sep 17 00:00:00 2001 From: Marie <51697796+ijreilly@users.noreply.github.com> Date: Tue, 29 Apr 2025 11:56:14 +0200 Subject: [PATCH] Fix filter with empty field (#11787) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Attempt to fix https://github.com/twentyhq/core-team-issues/issues/899 Could not reproduce but that's the only place in the code where I found that we build filters as such, with values for "in" being equal to select options and not recordIds, as it seems to be the case from the sentries (ex: Capture d’écran 2025-04-29 à 11 13 56 ) --- .../hooks/useLoadRecordIndexBoardColumn.ts | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts index cef259962..6e99e6dc5 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts @@ -15,6 +15,7 @@ import { useRecordBoardRecordGqlFields } from '@/object-record/record-index/hook import { currentRecordSortsComponentState } from '@/object-record/record-sort/states/currentRecordSortsComponentState'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; +import { isNonEmptyString } from '@sniptt/guards'; import { isDefined } from 'twenty-shared/utils'; type UseLoadRecordIndexBoardProps = { @@ -68,17 +69,33 @@ export const useLoadRecordIndexBoardColumn = ({ recordBoardId, }); - const recordIndexKanbanFieldMetadataItem = objectMetadataItem.fields.find( - (field) => field.id === boardFieldMetadataId, - ); + let recordIndexKanbanFieldMetadataFilter: { [x: string]: any } = {}; + + if (isDefined(boardFieldMetadataId)) { + const recordIndexKanbanFieldMetadataItem = objectMetadataItem.fields.find( + (field) => field.id === boardFieldMetadataId, + ); + + if (!isDefined(recordIndexKanbanFieldMetadataItem)) { + throw new Error('Record index kanban field metadata item not found'); + } + + if (!isNonEmptyString(recordIndexKanbanFieldMetadataItem?.name ?? '')) { + throw new Error('Record index kanban field metadata item name not found'); + } + + recordIndexKanbanFieldMetadataFilter = { + [recordIndexKanbanFieldMetadataItem.name]: isDefined( + recordGroupDefinition?.value, + ) + ? { in: [recordGroupDefinition.value] } + : { is: 'NULL' }, + }; + } const filter = { ...requestFilters, - [recordIndexKanbanFieldMetadataItem?.name ?? '']: isDefined( - recordGroupDefinition?.value, - ) - ? { in: [recordGroupDefinition?.value] } - : { is: 'NULL' }, + ...recordIndexKanbanFieldMetadataFilter, }; const {