From 65e3e8daad64289f9f00a3e19e21db31ecd84689 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Wed, 7 Dec 2022 15:01:26 +0000 Subject: [PATCH] optimization to call the catalog only once per pu Signed-off-by: Brian Fletcher --- .../EntityRefLink/EntityRefLink.tsx | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx index 7cde1662cf..88d0bb9d69 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx +++ b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx @@ -22,7 +22,7 @@ import { isUserEntity, isGroupEntity, } from '@backstage/catalog-model'; -import React, { forwardRef } from 'react'; +import React, { forwardRef, useState } from 'react'; import { entityRouteRef } from '../../routes'; import { humanizeEntityRef } from './humanize'; import { Link, LinkProps, Progress } from '@backstage/core-components'; @@ -81,23 +81,21 @@ export const PeekAheadPopover = ({ const entityRoute = useRouteRef(entityRouteRef); const classes = useStyles(); const apiHolder = useApiHolder(); + const [entity, setEntity] = useState(); - const { - value: entity, - loading, - error, - } = useAsync(async () => { - if (popupState.isOpen) { - const catalogApi = apiHolder.get(catalogApiRef); - if (catalogApi) { - const retrievedEntity = await catalogApi.getEntityByRef(entityRef); - if (!retrievedEntity) { - throw new Error(`${entityRef.name} was not found`); + const { loading, error } = useAsync(async () => { + if (!entity) { + if (popupState.isOpen) { + const catalogApi = apiHolder.get(catalogApiRef); + if (catalogApi) { + const retrievedEntity = await catalogApi.getEntityByRef(entityRef); + if (!retrievedEntity) { + throw new Error(`${entityRef.name} was not found`); + } + setEntity(retrievedEntity); } - return retrievedEntity; } } - return undefined; }, [popupState.isOpen, apiHolder, entityRef]); return (