From 9b9c05c05501a1a81c3eaf52d70c49b19c73bcd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ladislav=20Vit=C3=A1sek?= Date: Tue, 30 Jan 2024 09:23:51 +0100 Subject: [PATCH] adding fields limitation for EntityPicker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ladislav Vitásek --- .changeset/four-walls-perform.md | 5 +++++ .../components/fields/EntityPicker/EntityPicker.tsx | 12 +++++++++++- .../src/components/fields/EntityPicker/schema.ts | 7 +++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .changeset/four-walls-perform.md diff --git a/.changeset/four-walls-perform.md b/.changeset/four-walls-perform.md new file mode 100644 index 0000000000..bb30a0cc2b --- /dev/null +++ b/.changeset/four-walls-perform.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Scaffolding - EntityPicker component - now it does not load full entity data, only a specified set - defaults to `['metadata.name', 'metadata.namespace', 'metadata.title', 'kind']`. It can significantly reduce loaded time bigger data set. It's possible to set fields to ignore configure via `fieldsToIgnore` in UI options of the EntityPicker component. diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index 0d45fe771c..d2c88a0b03 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -61,14 +61,24 @@ export const EntityPicker = (props: EntityPickerProps) => { } = props; const catalogFilter = buildCatalogFilter(uiSchema); const defaultKind = uiSchema['ui:options']?.defaultKind; + const fieldsToIgnore = uiSchema['ui:options']?.fieldsToIgnore; const defaultNamespace = uiSchema['ui:options']?.defaultNamespace || undefined; const catalogApi = useApi(catalogApiRef); const { value: entities, loading } = useAsync(async () => { + const defaultFieldsToIgnore = [ + 'metadata.name', + 'metadata.namespace', + 'metadata.title', + 'kind', + ]; + const fields = fieldsToIgnore || defaultFieldsToIgnore; const { items } = await catalogApi.getEntities( - catalogFilter ? { filter: catalogFilter } : undefined, + catalogFilter + ? { filter: catalogFilter, fields: fields } + : { filter: undefined, fields: fields }, ); return items; }); diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts b/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts index eb1bba364b..5617ca2073 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts +++ b/plugins/scaffolder/src/components/fields/EntityPicker/schema.ts @@ -41,6 +41,13 @@ export const EntityPickerFieldSchema = makeFieldSchemaFromZod( .describe( 'DEPRECATED: Use `catalogFilter` instead. List of kinds of entities to derive options from', ), + fieldsToIgnore: z + .array(z.string()) + .optional() + .describe( + 'Fields to ignore from loading - download only the parts of each entity that match the field declarations.' + + " Defaults to: fields: ['metadata.name', 'metadata.namespace', 'metadata.title', 'kind']", + ), defaultKind: z .string() .optional()