diff --git a/.changeset/lazy-pumas-sniff.md b/.changeset/lazy-pumas-sniff.md new file mode 100644 index 0000000000..997c318b30 --- /dev/null +++ b/.changeset/lazy-pumas-sniff.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Adds an argument for which filters should be applied when fetching/counting available values diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 39db26df74..20831da43f 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -204,6 +204,7 @@ export type EntityAutocompletePickerProps< }; InputProps?: TextFieldProps; initialSelectedOptions?: string[]; + filtersForAvailableValues?: Array; }; // @public diff --git a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx index 1b7539b912..1a9f1f48c7 100644 --- a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx +++ b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx @@ -50,6 +50,7 @@ export type EntityAutocompletePickerProps< Filter: { new (values: string[]): NonNullable }; InputProps?: TextFieldProps; initialSelectedOptions?: string[]; + filtersForAvailableValues?: Array; }; /** @public */ @@ -76,6 +77,7 @@ export function EntityAutocompletePicker< Filter, InputProps, initialSelectedOptions = [], + filtersForAvailableValues = ['kind'], } = props; const classes = useStyles(); @@ -87,17 +89,26 @@ export function EntityAutocompletePicker< } = useEntityList(); const catalogApi = useApi(catalogApiRef); + const availableValuesFilters = filtersForAvailableValues.map( + f => filters[f] as EntityFilter | undefined, + ); const { value: availableValues } = useAsync(async () => { const facet = path; const { facets } = await catalogApi.getEntityFacets({ facets: [facet], - filter: filters.kind?.getCatalogFilters(), + filter: availableValuesFilters + .map(f => + f && typeof f.getCatalogFilters === 'function' + ? f.getCatalogFilters() + : {}, + ) + .reduce((a, b) => ({ ...a, ...b }), {}), }); return Object.fromEntries( facets[facet].map(({ value, count }) => [value, count]), ); - }, [filters.kind]); + }, [...availableValuesFilters]); const queryParameters = useMemo( () => [queryParameter].flat().filter(Boolean) as string[],