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 { 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<SettingsDataModelFieldRelationFormValues>();
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,

View File

@ -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<FieldMetadataItem, 'type' | 'relationDefinition'>;
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;