first step in the show record page with a morph relation. (#15109)

Adds the field on the Show page and side panel for Morph relation
fields.

Updates
`packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenMorphRelationOneToManyFieldInput.tsx`
to use the correct `recordPickerInstanceId` when opening the picker so
the helper consistently renders (fixes [core-team-issues
#1324](https://github.com/twentyhq/core-team-issues/issues/1324)).

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
This commit is contained in:
Guillim
2025-10-23 17:21:49 +02:00
committed by GitHub
parent eb2fd7c383
commit 4e767799c6
25 changed files with 1019 additions and 162 deletions
@@ -4,7 +4,7 @@ import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataIte
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
import { generateEmptyFieldValue } from '@/object-record/utils/generateEmptyFieldValue';
import { isDefined } from 'twenty-shared/utils';
import { computeMorphRelationFieldName, isDefined } from 'twenty-shared/utils';
import { FieldMetadataType, RelationType } from '~/generated/graphql';
type PrefillRecordArgs = {
@@ -35,6 +35,28 @@ export const prefillRecord = <T extends ObjectRecord>({
[fieldMetadataItem.settings?.joinColumnName, joinColumnValue],
];
}
if (
fieldMetadataItem.type === FieldMetadataType.MORPH_RELATION &&
fieldMetadataItem.settings?.relationType === RelationType.MANY_TO_ONE
) {
const gqlFields = fieldMetadataItem.morphRelations?.map(
(morphRelation) => {
return computeMorphRelationFieldName({
fieldName: fieldMetadataItem.name,
relationType: morphRelation.type,
targetObjectMetadataNameSingular:
morphRelation.targetObjectMetadata.nameSingular,
targetObjectMetadataNamePlural:
morphRelation.targetObjectMetadata.namePlural,
});
},
);
return gqlFields?.flatMap((gqlField) => [
[gqlField, fieldValue],
[`${gqlField}Id`, input[`${gqlField}Id`] ?? null],
]);
}
return [[fieldMetadataItem.name, fieldValue]];
})