diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/components/SettingsDataModelFieldRelationForm.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/components/SettingsDataModelFieldRelationForm.tsx index 651bb459b..9fea4fc20 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/components/SettingsDataModelFieldRelationForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/components/SettingsDataModelFieldRelationForm.tsx @@ -15,9 +15,9 @@ import { IconPicker } from '@/ui/input/components/IconPicker'; import { Select } from '@/ui/input/components/Select'; import { TextInput } from '@/ui/input/components/TextInput'; import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; -import { RelationDefinitionType } from '~/generated-metadata/graphql'; import { useLingui } from '@lingui/react/macro'; import { useIcons } from 'twenty-ui/display'; +import { RelationDefinitionType } from '~/generated-metadata/graphql'; export const settingsDataModelFieldRelationFormSchema = z.object({ relation: z.object({ @@ -98,7 +98,7 @@ export const SettingsDataModelFieldRelationForm = ({ const { control, watch: watchFormValue } = useFormContext(); const { getIcon } = useIcons(); - const { objectMetadataItems, findObjectMetadataItemById } = + const { activeObjectMetadataItems, findObjectMetadataItemById } = useFilteredObjectMetadataItems(); const { @@ -156,7 +156,7 @@ export const SettingsDataModelFieldRelationForm = ({ fullWidth disabled={disableRelationEdition} value={value} - options={objectMetadataItems + options={activeObjectMetadataItems .filter(isObjectMetadataAvailableForRelation) .map((objectMetadataItem) => ({ label: objectMetadataItem.labelPlural, diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/hooks/useRelationSettingsFormInitialValues.ts b/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/hooks/useRelationSettingsFormInitialValues.ts index 2027e5f8e..b270f1610 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/hooks/useRelationSettingsFormInitialValues.ts +++ b/packages/twenty-front/src/modules/settings/data-model/fields/forms/relation/hooks/useRelationSettingsFormInitialValues.ts @@ -5,6 +5,7 @@ import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMe import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { isObjectMetadataAvailableForRelation } from '@/object-metadata/utils/isObjectMetadataAvailableForRelation'; import { SettingsDataModelFieldPreviewCardProps } from '@/settings/data-model/fields/preview/components/SettingsDataModelFieldPreviewCard'; +import { isDefined } from 'twenty-shared/utils'; import { RelationDefinitionType } from '~/generated-metadata/graphql'; export const useRelationSettingsFormInitialValues = ({ @@ -14,7 +15,7 @@ export const useRelationSettingsFormInitialValues = ({ fieldMetadataItem?: Pick; objectMetadataItem?: SettingsDataModelFieldPreviewCardProps['objectMetadataItem']; }) => { - const { objectMetadataItems } = useFilteredObjectMetadataItems(); + const { activeObjectMetadataItems } = useFilteredObjectMetadataItems(); const getRelationMetadata = useGetRelationMetadata(); const { @@ -27,17 +28,25 @@ export const useRelationSettingsFormInitialValues = ({ [fieldMetadataItem, getRelationMetadata], ) ?? {}; - const initialRelationObjectMetadataItem = useMemo( - () => + const initialRelationObjectMetadataItem = useMemo(() => { + const availableItems = activeObjectMetadataItems.filter( + isObjectMetadataAvailableForRelation, + ); + const initialObjectCandidate = relationObjectMetadataItemFromFieldMetadata ?? objectMetadataItem ?? - objectMetadataItems.filter(isObjectMetadataAvailableForRelation)[0], - [ - objectMetadataItem, - objectMetadataItems, - relationObjectMetadataItemFromFieldMetadata, - ], - ); + availableItems[0]; + if (!isDefined(initialObjectCandidate)) { + throw new Error( + 'Relation Form initialization error: invariant violated – no valid object available for relation (this should never happen).', + ); + } + return initialObjectCandidate; + }, [ + objectMetadataItem, + activeObjectMetadataItems, + relationObjectMetadataItemFromFieldMetadata, + ]); const initialRelationType = relationTypeFromFieldMetadata ?? RelationDefinitionType.ONE_TO_MANY;