From 84822daea6914e82967a03c05ae7b8ab5c339630 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Tue, 20 Jun 2023 13:59:41 +0200 Subject: [PATCH] catalog-react: send proper filters Signed-off-by: Vincenzo Scamporlino --- .../UserListPicker/useOwnedEntitiesCount.ts | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts index 5eac3ced60..605c006f44 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts +++ b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts @@ -20,7 +20,7 @@ import { compact, intersection, isEqual } from 'lodash'; import { useMemo, useRef } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { catalogApiRef } from '../../api'; -import { EntityUserListFilter } from '../../filters'; +import { EntityOwnerFilter, EntityUserListFilter } from '../../filters'; import { useEntityList } from '../../hooks'; import { reduceCatalogFilters } from '../../utils'; @@ -39,30 +39,25 @@ export function useOwnedEntitiesCount() { const prevRequest = useRef(); const request = useMemo(() => { - const compacted = compact(Object.values(filters)); + const { user, owners, ...allFilters } = filters; + const compacted = compact(Object.values(allFilters)); const allFilter = reduceCatalogFilters(compacted); const { ['metadata.name']: metadata, ...filter } = allFilter; - const facet = 'relations.ownedBy'; + const countFilter = getOwnedCountClaims(owners, ownershipEntityRefs); - const ownedByFilter = Array.isArray(filter[facet]) - ? (filter[facet] as string[]) - : []; - - const commonOwnedBy = intersection(ownedByFilter, ownershipEntityRefs); - - const ownedBy = - ownedByFilter.length > 0 ? ownedByFilter : ownershipEntityRefs; - if (ownedByFilter.length > 0 && commonOwnedBy.length === 0) { - // detect whether another filter sets values that will produce - // empty results in order to avoid sending an additional request. + if ( + ownershipEntityRefs?.length === 0 || + countFilter === undefined || + Object.keys(filter).length === 0 + ) { prevRequest.current = undefined; return undefined; } const newRequest: QueryEntitiesInitialRequest = { filter: { ...filter, - 'relations.ownedBy': ownedBy ?? [], + 'relations.ownedBy': countFilter, }, limit: 0, }; @@ -78,14 +73,10 @@ export function useOwnedEntitiesCount() { const { value: count, loading: loadingEntityOwnership } = useAsync(async () => { - if (!ownershipEntityRefs?.length) { - return 0; - } if (!request) { return 0; } const { totalItems } = await catalogApi.queryEntities(request); - return totalItems; }, [request]); @@ -102,3 +93,21 @@ export function useOwnedEntitiesCount() { ownershipEntityRefs, }; } + +function getOwnedCountClaims( + owners: EntityOwnerFilter | undefined, + ownershipEntityRefs: string[] | undefined, +) { + if (ownershipEntityRefs === undefined) { + return undefined; + } + const ownersRefs = owners?.values ?? []; + if (ownersRefs.length) { + const commonOwnedBy = intersection(ownersRefs, ownershipEntityRefs); + if (commonOwnedBy.length === 0) { + return undefined; + } + return commonOwnedBy; + } + return ownershipEntityRefs; +}