diff --git a/packages/twenty-front/src/modules/object-metadata/constants/LabelIdentifierFieldMetadataTypes.ts b/packages/twenty-front/src/modules/object-metadata/constants/LabelIdentifierFieldMetadataTypes.ts index 49e3d2984..b164fc620 100644 --- a/packages/twenty-front/src/modules/object-metadata/constants/LabelIdentifierFieldMetadataTypes.ts +++ b/packages/twenty-front/src/modules/object-metadata/constants/LabelIdentifierFieldMetadataTypes.ts @@ -3,4 +3,5 @@ import { FieldMetadataType } from '~/generated-metadata/graphql'; export const LABEL_IDENTIFIER_FIELD_METADATA_TYPES = [ FieldMetadataType.NUMBER, FieldMetadataType.TEXT, + FieldMetadataType.FULL_NAME, ]; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts b/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts index 2287dec2b..2f9254e95 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts @@ -9,16 +9,16 @@ export const getLabelIdentifierFieldValue = ( labelIdentifierFieldMetadataItem: FieldMetadataItem | undefined, objectNameSingular: string, ): string => { + if (!isDefined(labelIdentifierFieldMetadataItem)) { + return record.id; + } + if ( objectNameSingular === CoreObjectNameSingular.WorkspaceMember || - labelIdentifierFieldMetadataItem?.type === FieldMetadataType.FULL_NAME + labelIdentifierFieldMetadataItem.type === FieldMetadataType.FULL_NAME ) { - return `${record.name?.firstName ?? ''} ${record.name?.lastName ?? ''}`; + return `${record[labelIdentifierFieldMetadataItem.name]?.firstName ?? ''} ${record[labelIdentifierFieldMetadataItem.name]?.lastName ?? ''}`; } - if (isDefined(labelIdentifierFieldMetadataItem?.name)) { - return record[labelIdentifierFieldMetadataItem.name] ?? ''; - } - - return ''; + return record[labelIdentifierFieldMetadataItem.name] ?? ''; }; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useRecordChipData.ts b/packages/twenty-front/src/modules/object-record/hooks/useRecordChipData.ts index f1e844cec..99767a4e3 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useRecordChipData.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useRecordChipData.ts @@ -1,5 +1,4 @@ import { PreComputedChipGeneratorsContext } from '@/object-metadata/contexts/PreComputedChipGeneratorsContext'; -import { generateDefaultRecordChipData } from '@/object-metadata/utils/generateDefaultRecordChipData'; import { RecordChipData } from '@/object-record/record-field/types/RecordChipData'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { useContext } from 'react'; @@ -23,16 +22,13 @@ export const useRecordChipData = ({ const identifierChipGenerator = identifierChipGeneratorPerObject[objectNameSingular]; - if (isDefined(identifierChipGenerator)) { - return { - recordChipData: identifierChipGenerator(record), - }; + if (!isDefined(identifierChipGenerator)) { + throw new Error( + `No identifier chip generator found for object name singular: ${objectNameSingular}`, + ); } return { - recordChipData: generateDefaultRecordChipData({ - objectNameSingular, - record, - }), + recordChipData: identifierChipGenerator(record), }; }; diff --git a/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts b/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts index 560592022..52c05d951 100644 --- a/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts +++ b/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts @@ -11,8 +11,8 @@ import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifie import { isFieldIdentifierDisplay } from '@/object-record/record-field/meta-types/display/utils/isFieldIdentifierDisplay'; import { RecordChipData } from '@/object-record/record-field/types/RecordChipData'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { FieldMetadataType } from '~/generated-metadata/graphql'; import { isDefined } from 'twenty-shared/utils'; +import { FieldMetadataType } from '~/generated-metadata/graphql'; export const getRecordChipGenerators = ( objectMetadataItems: ObjectMetadataItem[], diff --git a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectIdentifiersForm.tsx b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectIdentifiersForm.tsx index a954b87c2..eba3dee57 100644 --- a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectIdentifiersForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectIdentifiersForm.tsx @@ -13,7 +13,8 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { Select } from '@/ui/input/components/Select'; import { zodResolver } from '@hookform/resolvers/zod'; import { t } from '@lingui/core/macro'; -import { IconCircleOff, useIcons } from 'twenty-ui/display'; +import { useNavigate } from 'react-router-dom'; +import { IconCircleOff, IconPlus, useIcons } from 'twenty-ui/display'; import { SelectOption } from 'twenty-ui/input'; export const settingsDataModelObjectIdentifiersFormSchema = @@ -100,6 +101,9 @@ export const SettingsDataModelObjectIdentifiersForm = ({ label: 'None', value: null, }; + + const navigate = useNavigate(); + return ( {[ @@ -124,12 +128,23 @@ export const SettingsDataModelObjectIdentifiersForm = ({ render={({ field: { onChange, value } }) => (