diff --git a/.changeset/hot-years-sell.md b/.changeset/hot-years-sell.md new file mode 100644 index 0000000000..bc2c63e826 --- /dev/null +++ b/.changeset/hot-years-sell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Use default value for `MyGroupsPicker` if provided diff --git a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.test.tsx b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.test.tsx index 521c4029b3..94261ce0e4 100644 --- a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.test.tsx @@ -274,4 +274,51 @@ describe('', () => { expect(onChange).toHaveBeenCalledWith('group:default/group1'); }); }); + + it('should use the pre-existed formdata value if set with the form', async () => { + const userGroups = [ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group1', title: 'My First Group' }, + spec: { members: ['Bob'] }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group2', title: 'My Second Group' }, + spec: { members: ['Bob'] }, + }, + ]; + + catalogApi.getEntities.mockResolvedValue({ items: userGroups }); + + const props = { + onChange, + schema, + required, + formData: 'group:default/group1', + } as unknown as FieldProps; + + const { getByRole } = render( + + + , + ); + + await waitFor(() => + expect(catalogApi.getEntities).toHaveBeenCalledTimes(1), + ); + + const inputField = getByRole('combobox'); + const inputFieldValue = inputField?.querySelector('input')?.value; + + expect(inputFieldValue).toEqual(userGroups[0].metadata.title); + }); }); diff --git a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx index 0314240b40..1e78fa45a1 100644 --- a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx +++ b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx @@ -37,6 +37,7 @@ export const MyGroupsPicker = (props: MyGroupsPickerProps) => { required, rawErrors, onChange, + formData, } = props; const identityApi = useApi(identityApiRef); @@ -48,10 +49,6 @@ export const MyGroupsPicker = (props: MyGroupsPickerProps) => { ref: string; }[] >([]); - const [selectedGroup, setSelectedGroup] = useState(null); useAsync(async () => { const { userEntityRef } = await identityApi.getBackstageIdentity(); @@ -82,10 +79,11 @@ export const MyGroupsPicker = (props: MyGroupsPickerProps) => { _: React.ChangeEvent<{}>, value: { label: string; ref: string } | null, ) => { - setSelectedGroup(value); onChange(value?.ref ?? ''); }; + const selectedEntity = groups?.find(e => e.ref === formData) || null; + return ( { group.label} renderInput={params => (