diff --git a/.changeset/little-ligers-cheat.md b/.changeset/little-ligers-cheat.md new file mode 100644 index 0000000000..30b4238c59 --- /dev/null +++ b/.changeset/little-ligers-cheat.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Make entity picker more reliable with only one available entity diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 0f698919d5..0d45fe771c 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -123,11 +123,17 @@ export const EntityPicker = (props: EntityPickerProps) => { [onChange, formData, defaultKind, defaultNamespace, allowArbitraryValues], ); + // Since free solo can be enabled, attempt to parse as a full entity ref first, then fall + // back to the given value. + const selectedEntity = + entities?.find(e => stringifyEntityRef(e) === formData) ?? + (allowArbitraryValues && formData ? getLabel(formData) : ''); + useEffect(() => { - if (entities?.length === 1) { + if (entities?.length === 1 && selectedEntity === '') { onChange(stringifyEntityRef(entities[0])); } - }, [entities, onChange]); + }, [entities, onChange, selectedEntity]); return ( { stringifyEntityRef(e) === formData) ?? - (allowArbitraryValues && formData ? getLabel(formData) : '') - } + value={selectedEntity} loading={loading} onChange={onSelect} options={entities || []}