diff --git a/.changeset/four-walls-perform.md b/.changeset/four-walls-perform.md new file mode 100644 index 0000000000..5275da7b79 --- /dev/null +++ b/.changeset/four-walls-perform.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Updating the `EntityPicker` to only select `kind` `metadata.name` and `metadata.namespace` by default to improve performance on larger datasets. diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index 4329b2208b..8016a6ae83 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -89,7 +89,10 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith(undefined); + expect(catalogApi.getEntities).toHaveBeenCalledWith({ + fields: ['metadata.name', 'metadata.namespace', 'kind'], + filter: undefined, + }); }); it('updates even if there is not an exact match', async () => { @@ -130,11 +133,13 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: { - kind: ['User'], - }, - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: { + kind: ['User'], + }, + }), + ); }); }); @@ -173,18 +178,20 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: [ - { - kind: ['Group'], - 'metadata.name': 'test-entity', - }, - { - kind: ['User'], - 'metadata.name': 'test-entity', - }, - ], - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: [ + { + kind: ['Group'], + 'metadata.name': 'test-entity', + }, + { + kind: ['User'], + 'metadata.name': 'test-entity', + }, + ], + }), + ); }); it('allow single top level filter', async () => { uiSchema = { @@ -204,12 +211,14 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: { - kind: ['Group'], - 'metadata.name': 'test-entity', - }, - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: { + kind: ['Group'], + 'metadata.name': 'test-entity', + }, + }), + ); }); it('search for entitities containing an specific key', async () => { @@ -230,14 +239,16 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: [ - { - kind: ['User'], - 'metadata.annotation.some/anotation': CATALOG_FILTER_EXISTS, - }, - ], - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: [ + { + kind: ['User'], + 'metadata.annotation.some/anotation': CATALOG_FILTER_EXISTS, + }, + ], + }), + ); }); }); @@ -273,14 +284,16 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: [ - { - kind: ['Group'], - 'metadata.name': 'test-group', - }, - ], - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: [ + { + kind: ['Group'], + 'metadata.name': 'test-group', + }, + ], + }), + ); }); }); diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 0d45fe771c..76dbe42332 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -67,8 +67,11 @@ export const EntityPicker = (props: EntityPickerProps) => { const catalogApi = useApi(catalogApiRef); const { value: entities, loading } = useAsync(async () => { + const fields = ['metadata.name', 'metadata.namespace', 'kind']; const { items } = await catalogApi.getEntities( - catalogFilter ? { filter: catalogFilter } : undefined, + catalogFilter + ? { filter: catalogFilter, fields } + : { filter: undefined, fields }, ); return items; }); diff --git a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx index 3c948b8261..57ca8e53ab 100644 --- a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx @@ -94,11 +94,14 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: { - kind: ['Group', 'User'], - }, - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: { + kind: ['Group', 'User'], + }, + fields: ['metadata.name', 'metadata.namespace', 'kind'], + }), + ); }); }); @@ -124,11 +127,14 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: { - kind: ['User'], - }, - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: { + kind: ['User'], + }, + fields: ['metadata.name', 'metadata.namespace', 'kind'], + }), + ); }); }); @@ -163,14 +169,16 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: [ - { - kind: ['Group'], - 'spec.type': 'team', - }, - ], - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: [ + { + kind: ['Group'], + 'spec.type': 'team', + }, + ], + }), + ); }); }); @@ -208,16 +216,18 @@ describe('', () => { , ); - expect(catalogApi.getEntities).toHaveBeenCalledWith({ - filter: [ - { - kind: ['Group', 'User'], - }, - { - 'spec.type': ['team', 'business-unit'], - }, - ], - }); + expect(catalogApi.getEntities).toHaveBeenCalledWith( + expect.objectContaining({ + filter: [ + { + kind: ['Group', 'User'], + }, + { + 'spec.type': ['team', 'business-unit'], + }, + ], + }), + ); }); }); });