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; }