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:
@ -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,
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user