Exclude workflows from relation field object dropdown when inactive (#12033)

closes #11996
- Switched the “Object destination” select in
SettingsDataModelFieldRelationForm to use
activeObjectMetadataItems.filter(...) so workflows, system, and remote
objects are excluded
- Updated useRelationSettingsFormInitialValues to fall back on the same
filtered activeObjectMetadataItems list for its initial value

This ensures workflows (and any unwanted system/remote objects) no
longer show up in the dropdown or as the default.
This commit is contained in:
nitin
2025-05-15 17:04:10 +05:30
committed by GitHub
parent 6a40ec604c
commit 93c91c88dc
2 changed files with 22 additions and 13 deletions

View File

@ -15,9 +15,9 @@ import { IconPicker } from '@/ui/input/components/IconPicker';
import { Select } from '@/ui/input/components/Select'; import { Select } from '@/ui/input/components/Select';
import { TextInput } from '@/ui/input/components/TextInput'; import { TextInput } from '@/ui/input/components/TextInput';
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { RelationDefinitionType } from '~/generated-metadata/graphql';
import { useLingui } from '@lingui/react/macro'; import { useLingui } from '@lingui/react/macro';
import { useIcons } from 'twenty-ui/display'; import { useIcons } from 'twenty-ui/display';
import { RelationDefinitionType } from '~/generated-metadata/graphql';
export const settingsDataModelFieldRelationFormSchema = z.object({ export const settingsDataModelFieldRelationFormSchema = z.object({
relation: z.object({ relation: z.object({
@ -98,7 +98,7 @@ export const SettingsDataModelFieldRelationForm = ({
const { control, watch: watchFormValue } = const { control, watch: watchFormValue } =
useFormContext<SettingsDataModelFieldRelationFormValues>(); useFormContext<SettingsDataModelFieldRelationFormValues>();
const { getIcon } = useIcons(); const { getIcon } = useIcons();
const { objectMetadataItems, findObjectMetadataItemById } = const { activeObjectMetadataItems, findObjectMetadataItemById } =
useFilteredObjectMetadataItems(); useFilteredObjectMetadataItems();
const { const {
@ -156,7 +156,7 @@ export const SettingsDataModelFieldRelationForm = ({
fullWidth fullWidth
disabled={disableRelationEdition} disabled={disableRelationEdition}
value={value} value={value}
options={objectMetadataItems options={activeObjectMetadataItems
.filter(isObjectMetadataAvailableForRelation) .filter(isObjectMetadataAvailableForRelation)
.map((objectMetadataItem) => ({ .map((objectMetadataItem) => ({
label: objectMetadataItem.labelPlural, label: objectMetadataItem.labelPlural,

View File

@ -5,6 +5,7 @@ import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMe
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { isObjectMetadataAvailableForRelation } from '@/object-metadata/utils/isObjectMetadataAvailableForRelation'; import { isObjectMetadataAvailableForRelation } from '@/object-metadata/utils/isObjectMetadataAvailableForRelation';
import { SettingsDataModelFieldPreviewCardProps } from '@/settings/data-model/fields/preview/components/SettingsDataModelFieldPreviewCard'; import { SettingsDataModelFieldPreviewCardProps } from '@/settings/data-model/fields/preview/components/SettingsDataModelFieldPreviewCard';
import { isDefined } from 'twenty-shared/utils';
import { RelationDefinitionType } from '~/generated-metadata/graphql'; import { RelationDefinitionType } from '~/generated-metadata/graphql';
export const useRelationSettingsFormInitialValues = ({ export const useRelationSettingsFormInitialValues = ({
@ -14,7 +15,7 @@ export const useRelationSettingsFormInitialValues = ({
fieldMetadataItem?: Pick<FieldMetadataItem, 'type' | 'relationDefinition'>; fieldMetadataItem?: Pick<FieldMetadataItem, 'type' | 'relationDefinition'>;
objectMetadataItem?: SettingsDataModelFieldPreviewCardProps['objectMetadataItem']; objectMetadataItem?: SettingsDataModelFieldPreviewCardProps['objectMetadataItem'];
}) => { }) => {
const { objectMetadataItems } = useFilteredObjectMetadataItems(); const { activeObjectMetadataItems } = useFilteredObjectMetadataItems();
const getRelationMetadata = useGetRelationMetadata(); const getRelationMetadata = useGetRelationMetadata();
const { const {
@ -27,17 +28,25 @@ export const useRelationSettingsFormInitialValues = ({
[fieldMetadataItem, getRelationMetadata], [fieldMetadataItem, getRelationMetadata],
) ?? {}; ) ?? {};
const initialRelationObjectMetadataItem = useMemo( const initialRelationObjectMetadataItem = useMemo(() => {
() => const availableItems = activeObjectMetadataItems.filter(
isObjectMetadataAvailableForRelation,
);
const initialObjectCandidate =
relationObjectMetadataItemFromFieldMetadata ?? relationObjectMetadataItemFromFieldMetadata ??
objectMetadataItem ?? objectMetadataItem ??
objectMetadataItems.filter(isObjectMetadataAvailableForRelation)[0], availableItems[0];
[ if (!isDefined(initialObjectCandidate)) {
objectMetadataItem, throw new Error(
objectMetadataItems, 'Relation Form initialization error: invariant violated no valid object available for relation (this should never happen).',
relationObjectMetadataItemFromFieldMetadata, );
], }
); return initialObjectCandidate;
}, [
objectMetadataItem,
activeObjectMetadataItems,
relationObjectMetadataItemFromFieldMetadata,
]);
const initialRelationType = const initialRelationType =
relationTypeFromFieldMetadata ?? RelationDefinitionType.ONE_TO_MANY; relationTypeFromFieldMetadata ?? RelationDefinitionType.ONE_TO_MANY;