From 467aa775a8cee46b607b5ada31a7e9877b1c7550 Mon Sep 17 00:00:00 2001 From: Lucas Bordeau Date: Thu, 13 Feb 2025 11:15:41 +0100 Subject: [PATCH] Fixed context menu bug with new record filters refactor (#10181) This PR enforces objectMetadataItem to be passed to hook useColumnDefinitionsFromFieldMetadata, which was never used without an objectMetadataItem passed in parameters (and probably shouldn't anyway) Removed the associated test that tested for an undefined objectMetadataItem parameter in useColumnDefinitionsFromFieldMetadata. This allows to remove the need to rely on recordIndexContext to retrieve the filterableFieldMetadataItems. --- ...ColumnDefinitionsFromFieldMetadata.test.ts | 19 +------------------ .../useColumnDefinitionsFromFieldMetadata.ts | 13 ++++++++----- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts index 65b3de83d..550fb95dc 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts @@ -1,5 +1,4 @@ import { renderHook } from '@testing-library/react'; -import { Nullable } from 'twenty-ui'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata'; @@ -49,29 +48,13 @@ const Wrapper = getJestMetadataAndApolloMocksAndActionMenuWrapper({ }); describe('useColumnDefinitionsFromFieldMetadata', () => { - it('should return empty definitions if no object is passed', () => { - const { result } = renderHook( - (objectMetadataItem?: Nullable) => { - return useColumnDefinitionsFromFieldMetadata(objectMetadataItem); - }, - { - wrapper: Wrapper, - }, - ); - - expect(Array.isArray(result.current.columnDefinitions)).toBe(true); - expect(Array.isArray(result.current.sortDefinitions)).toBe(true); - expect(result.current.columnDefinitions.length).toBe(0); - expect(result.current.sortDefinitions.length).toBe(0); - }); - it('should return expected definitions', () => { const companyObjectMetadata = generatedMockObjectMetadataItems.find( (item) => item.nameSingular === 'company', ); const { result } = renderHook( - (objectMetadataItem?: Nullable) => { + (objectMetadataItem: ObjectMetadataItem) => { return useColumnDefinitionsFromFieldMetadata(objectMetadataItem); }, { diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata.ts index 07fc72adc..e1b50dc6d 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata.ts @@ -1,17 +1,17 @@ import { useMemo } from 'react'; -import { Nullable } from 'twenty-ui'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata'; import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition'; import { filterAvailableTableColumns } from '@/object-record/utils/filterAvailableTableColumns'; -import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext'; +import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-metadata/states/availableFieldMetadataItemsForFilterFamilySelector'; +import { useRecoilValue } from 'recoil'; import { formatFieldMetadataItemAsColumnDefinition } from '../utils/formatFieldMetadataItemAsColumnDefinition'; import { formatFieldMetadataItemsAsSortDefinitions } from '../utils/formatFieldMetadataItemsAsSortDefinitions'; export const useColumnDefinitionsFromFieldMetadata = ( - objectMetadataItem?: Nullable, + objectMetadataItem: ObjectMetadataItem, ) => { const activeFieldMetadataItems = useMemo( () => @@ -23,8 +23,11 @@ export const useColumnDefinitionsFromFieldMetadata = ( [objectMetadataItem], ); - const { filterableFieldMetadataItems } = - useFilterableFieldMetadataItemsInRecordIndexContext(); + const filterableFieldMetadataItems = useRecoilValue( + availableFieldMetadataItemsForFilterFamilySelector({ + objectMetadataItemId: objectMetadataItem.id, + }), + ); const sortDefinitions = formatFieldMetadataItemsAsSortDefinitions({ fields: activeFieldMetadataItems,