From a287edd91bf23e9c9af2adf30dd5b282be683011 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Fri, 1 Nov 2024 09:19:55 +0100 Subject: [PATCH] Kanban full name (#8261) --- .../hooks/useAddNewCard.ts | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts index 97cb8c5d6..533a834e4 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts @@ -7,7 +7,9 @@ import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { useCallback, useContext } from 'react'; import { RecoilState, useRecoilCallback } from 'recoil'; +import { isDefined } from 'twenty-ui'; import { v4 as uuidv4 } from 'uuid'; +import { FieldMetadataType } from '~/generated-metadata/graphql'; type SetFunction = ( recoilVal: RecoilState, @@ -16,7 +18,7 @@ type SetFunction = ( export const useAddNewCard = () => { const columnContext = useContext(RecordBoardColumnContext); - const { createOneRecord, selectFieldMetadataItem } = + const { createOneRecord, selectFieldMetadataItem, objectMetadataItem } = useContext(RecordBoardContext); const { resetSearchFilter } = useEntitySelectSearch({ relationPickerScopeId: 'relation-picker', @@ -75,16 +77,47 @@ export const useAddNewCard = () => { (isOpportunity && company !== null) || (!isOpportunity && labelValue !== '') ) { + // TODO: Refactor this whole section (Add new card): this should be: + // - simpler + // - piloted by metadata, + // - avoid drill down props, especially internal stuff + // - and follow record table pending record creation logic + let computedLabelIdentifierValue: any = labelValue; + + const labelIdentifierField = objectMetadataItem?.fields.find( + (field) => + field.id === objectMetadataItem.labelIdentifierFieldMetadataId, + ); + + if (!isDefined(labelIdentifierField)) { + throw new Error('Label identifier field not found'); + } + + if (labelIdentifierField.type === FieldMetadataType.FullName) { + computedLabelIdentifierValue = { + firstName: labelValue, + lastName: '', + }; + } + createOneRecord({ [selectFieldMetadataItem.name]: columnContext?.columnDefinition.value, position, ...(isOpportunity ? { companyId: company?.id, name: company?.name } - : { [labelIdentifier.toLowerCase()]: labelValue }), + : { + [labelIdentifier.toLowerCase()]: computedLabelIdentifierValue, + }), }); } }, - [createOneRecord, columnContext, selectFieldMetadataItem], + [ + objectMetadataItem?.fields, + objectMetadataItem?.labelIdentifierFieldMetadataId, + createOneRecord, + selectFieldMetadataItem?.name, + columnContext?.columnDefinition?.value, + ], ); const handleAddNewCardClick = useRecoilCallback(