From b86e6189c08afa13c82c4dcdfd2a71e226377bf5 Mon Sep 17 00:00:00 2001 From: Thomas Trompette Date: Thu, 19 Mar 2026 18:25:35 +0100 Subject: [PATCH] Remove postition from Timeline Activities + fix workflow title placeholder (#18777) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Position were not properly displayed because we never implemented a display for this - Untitled placeholder was not displayed anymore Capture d’écran 2026-03-19 à 17 11
25 --- .../RecordTitleCellTextFieldDisplay.tsx | 5 +- .../object-record-changed-values.spec.ts | 51 +++++++++++++++++++ .../utils/object-record-changed-values.ts | 3 +- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx index 0bae542df1..3fe39ad8fb 100644 --- a/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx @@ -7,6 +7,7 @@ import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFi import { styled } from '@linaria/react'; import { t } from '@lingui/core/macro'; import { useContext } from 'react'; +import { isDefined } from 'twenty-shared/utils'; import { OverflowingTextWithTooltip } from 'twenty-ui/display'; import { themeCssVariables } from 'twenty-ui/theme-constants'; @@ -41,8 +42,8 @@ export const RecordTitleCellSingleTextDisplayMode = ({ const recordStore = useAtomFamilyStateValue(recordStoreFamilyState, recordId); - const isEmpty = - recordStore?.[fieldDefinition.metadata.fieldName]?.trim() === ''; + const fieldValue = recordStore?.[fieldDefinition.metadata.fieldName]; + const isEmpty = !isDefined(fieldValue) || fieldValue.trim() === ''; const { openRecordTitleCell } = useRecordTitleCell(); diff --git a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts index f2417dfd0a..e85b40b9ba 100644 --- a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/__tests__/object-record-changed-values.spec.ts @@ -1,3 +1,5 @@ +import { FieldMetadataType } from 'twenty-shared/types'; + import { objectRecordChangedValues } from 'src/engine/core-modules/event-emitter/utils/object-record-changed-values'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; @@ -146,4 +148,53 @@ describe('objectRecordChangedValues', () => { expect(result).toEqual(expectedChanges); }); + + it('ignores changes to POSITION fields', () => { + const positionFieldId = 'position-field-id'; + const positionUniversalId = 'position-universal-id'; + + const objectMetadataWithPosition: FlatObjectMetadata = { + ...mockObjectMetadata, + fieldIds: [positionFieldId], + }; + + const flatFieldMetadataMapsWithPosition: FlatEntityMaps = + { + byUniversalIdentifier: { + [positionUniversalId]: { + id: positionFieldId, + name: 'position', + type: FieldMetadataType.POSITION, + universalIdentifier: positionUniversalId, + } as FlatFieldMetadata, + }, + universalIdentifierById: { + [positionFieldId]: positionUniversalId, + }, + universalIdentifiersByApplicationId: {}, + }; + + const oldRecord = { + id: '74316f58-29b0-4a6a-b8fa-d2b506d5516n', + position: 1, + name: 'Original', + }; + const newRecord = { + id: '74316f58-29b0-4a6a-b8fa-d2b506d5516n', + position: 5, + name: 'Updated', + }; + + const result = objectRecordChangedValues( + oldRecord, + newRecord, + objectMetadataWithPosition, + flatFieldMetadataMapsWithPosition, + ); + + expect(result).toEqual({ + name: { before: 'Original', after: 'Updated' }, + }); + expect(result).not.toHaveProperty('position'); + }); }); diff --git a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts index e987efb36d..6ca53c050d 100644 --- a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts +++ b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts @@ -56,7 +56,8 @@ export const objectRecordChangedValues = ( if ( key === 'updatedAt' || key === 'searchVector' || - field?.type === FieldMetadataType.RELATION + field?.type === FieldMetadataType.RELATION || + field?.type === FieldMetadataType.POSITION ) { return acc; }