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'],
+ },
+ ],
+ }),
+ );
});
});
});