diff --git a/.changeset/gorgeous-months-fix.md b/.changeset/gorgeous-months-fix.md index ca899b4e2f..f248afad46 100644 --- a/.changeset/gorgeous-months-fix.md +++ b/.changeset/gorgeous-months-fix.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': patch --- -Change behavior of scaffolder entity pickers (EntityPicker, MultiEntityPicker, MyGroupsPicker) to not auto-fill and disable the field if there is only a single value option. +Fix behavior of scaffolder entity pickers (EntityPicker, MultiEntityPicker, MyGroupsPicker) to not auto-fill and disable the field if there is only a single value option and the field is not required. diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 67da593a9e..aa5cd44f4d 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -35,7 +35,7 @@ import Autocomplete, { AutocompleteChangeReason, createFilterOptions, } from '@material-ui/lab/Autocomplete'; -import React, { useCallback } from 'react'; +import React, { useCallback, useEffect } from 'react'; import useAsync from 'react-use/esm/useAsync'; import { EntityPickerFilterQueryValue, @@ -166,6 +166,17 @@ export const EntityPicker = (props: EntityPickerProps) => { entities?.catalogEntities.find(e => stringifyEntityRef(e) === formData) ?? (allowArbitraryValues && formData ? getLabel(formData) : ''); + useEffect(() => { + if ( + required && + !allowArbitraryValues && + entities?.catalogEntities.length === 1 && + selectedEntity === '' + ) { + onChange(stringifyEntityRef(entities.catalogEntities[0])); + } + }, [entities, onChange, selectedEntity, required, allowArbitraryValues]); + return ( { error={rawErrors?.length > 0 && !formData} > { [onChange, formData, defaultKind, defaultNamespace, allowArbitraryValues], ); + useEffect(() => { + if (required && !allowArbitraryValues && entities?.entities?.length === 1) { + onChange([stringifyEntityRef(entities?.entities[0])]); + } + }, [entities, onChange, required, allowArbitraryValues]); + return ( { { groups?.catalogEntities.find(e => stringifyEntityRef(e) === formData) || null; + useEffect(() => { + if (required && groups?.catalogEntities.length === 1 && !selectedEntity) { + onChange(stringifyEntityRef(groups.catalogEntities[0])); + } + }, [groups, onChange, selectedEntity, required]); + return ( { error={rawErrors?.length > 0} >