From 2505c631de00132e9f8a50705b5bcf71de5aaecf Mon Sep 17 00:00:00 2001 From: Baptiste Devessier Date: Mon, 19 Jan 2026 14:18:36 +0100 Subject: [PATCH] fix: ensure we display fields in the same order as in production (#17231) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Do not render fields that we don't want to render for now - Preverse alphabetical order ## Without feature flag CleanShot 2026-01-19 at 11 02
57@2x ## With feature flag CleanShot 2026-01-19 at 11 03
31@2x ## With feature flag–before CleanShot 2026-01-19 at 11 03
53@2x --- .../useFieldsWidgetFieldMetadataItems.ts | 22 ++++-------- .../filterAndOrderFieldsFromConfiguration.ts | 34 +++++++------------ 2 files changed, 19 insertions(+), 37 deletions(-) diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetFieldMetadataItems.ts b/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetFieldMetadataItems.ts index d3a30f7cd0..432a79f19a 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetFieldMetadataItems.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetFieldMetadataItems.ts @@ -1,8 +1,5 @@ -import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; -import { isFieldCellSupported } from '@/object-record/utils/isFieldCellSupported'; -import { FieldMetadataType } from 'twenty-shared/types'; +import { useFieldListFieldMetadataItems } from '@/object-record/record-field-list/hooks/useFieldListFieldMetadataItems'; type UseFieldsWidgetFieldMetadataItemsProps = { objectNameSingular: string; @@ -11,19 +8,12 @@ type UseFieldsWidgetFieldMetadataItemsProps = { export const useFieldsWidgetFieldMetadataItems = ({ objectNameSingular, }: UseFieldsWidgetFieldMetadataItemsProps): FieldMetadataItem[] => { - const { objectMetadataItem } = useObjectMetadataItem({ + const { inlineFieldMetadataItems } = useFieldListFieldMetadataItems({ objectNameSingular, + excludeFieldMetadataIds: [], + excludeCreatedAtAndUpdatedAt: true, + showRelationSections: false, }); - const { objectMetadataItems } = useObjectMetadataItems(); - - const fieldMetadataItems = objectMetadataItem.readableFields.filter( - (fieldMetadataItem) => - isFieldCellSupported(fieldMetadataItem, objectMetadataItems) && - fieldMetadataItem.type !== FieldMetadataType.RELATION && - fieldMetadataItem.type !== FieldMetadataType.MORPH_RELATION && - fieldMetadataItem.type !== FieldMetadataType.RICH_TEXT_V2, - ); - - return fieldMetadataItems; + return inlineFieldMetadataItems ?? []; }; diff --git a/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/filterAndOrderFieldsFromConfiguration.ts b/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/filterAndOrderFieldsFromConfiguration.ts index e838baba95..eecf7c4293 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/filterAndOrderFieldsFromConfiguration.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/fields/utils/filterAndOrderFieldsFromConfiguration.ts @@ -22,42 +22,34 @@ export const filterAndOrderFieldsFromConfiguration = ({ availableFieldMetadataItems, context, }: FilterAndOrderFieldsFromConfigurationParams): FieldsConfigurationSectionWithFields[] => { - const fieldMetadataItemsMap = new Map( - availableFieldMetadataItems.map((field) => [field.id, field]), - ); - const sortedSections = [...configuration.sections].sort( (a, b) => a.position - b.position, ); const sectionsWithFields = sortedSections .map((section) => { - const sortedFields = [...section.fields].sort( - (a, b) => a.position - b.position, + const sectionFieldIds = new Set( + section.fields.map((f) => f.fieldMetadataId), ); - const visibleFields = sortedFields - .map((fieldConfig) => { - const fieldMetadataItem = fieldMetadataItemsMap.get( - fieldConfig.fieldMetadataId, + const visibleFields = availableFieldMetadataItems + .filter((fieldMetadataItem) => + sectionFieldIds.has(fieldMetadataItem.id), + ) + .filter((fieldMetadataItem) => { + const fieldConfig = section.fields.find( + (f) => f.fieldMetadataId === fieldMetadataItem.id, ); - if (!isDefined(fieldMetadataItem)) { - return null; + if (!isDefined(fieldConfig)) { + return false; } - const isVisible = evaluateWidgetVisibility({ + return evaluateWidgetVisibility({ conditionalDisplay: fieldConfig.conditionalDisplay, context, }); - - if (!isVisible) { - return null; - } - - return fieldMetadataItem; - }) - .filter(isDefined); + }); if (visibleFields.length === 0) { return null;