From 35a6cfe2573de2050df7062d8629d9c9e68b020b Mon Sep 17 00:00:00 2001 From: Matthew Clarke Date: Mon, 26 Sep 2022 17:22:34 -0400 Subject: [PATCH] fix: useCustomResource hook infinite call (#13835) * fix: useCustomResource hook infinite call Signed-off-by: Matthew Clarke * prettier Signed-off-by: Matthew Clarke Signed-off-by: Matthew Clarke --- .changeset/sixty-items-nail.md | 5 ++++ .../src/hooks/useCustomResources.ts | 16 +++++------ .../src/hooks/useKubernetesObjects.ts | 27 +++++++++---------- 3 files changed, 25 insertions(+), 23 deletions(-) create mode 100644 .changeset/sixty-items-nail.md diff --git a/.changeset/sixty-items-nail.md b/.changeset/sixty-items-nail.md new file mode 100644 index 0000000000..bf8f9b8161 --- /dev/null +++ b/.changeset/sixty-items-nail.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes': patch +--- + +Fix infinite call bug in `useCustomResources` hook diff --git a/plugins/kubernetes/src/hooks/useCustomResources.ts b/plugins/kubernetes/src/hooks/useCustomResources.ts index c0ec7d91ea..c53e00d81c 100644 --- a/plugins/kubernetes/src/hooks/useCustomResources.ts +++ b/plugins/kubernetes/src/hooks/useCustomResources.ts @@ -40,9 +40,9 @@ export const useCustomResources = ( ): KubernetesObjects => { const kubernetesApi = useApi(kubernetesApiRef); const kubernetesAuthProvidersApi = useApi(kubernetesAuthProvidersApiRef); - - const getCustomObjects = - useCallback(async (): Promise => { + const matchersString = JSON.stringify(customResourceMatchers); + const getCustomObjects = useCallback( + async (): Promise => { const auth = await generateAuth( entity, kubernetesApi, @@ -53,12 +53,10 @@ export const useCustomResources = ( customResources: customResourceMatchers, entity, }); - }, [ - kubernetesApi, - entity, - kubernetesAuthProvidersApi, - customResourceMatchers, - ]); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [kubernetesApi, entity, kubernetesAuthProvidersApi, matchersString], + ); const { value, loading, error, retry } = useAsyncRetry( () => getCustomObjects(), diff --git a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts index 87d6a0fe8b..aad2f48fd3 100644 --- a/plugins/kubernetes/src/hooks/useKubernetesObjects.ts +++ b/plugins/kubernetes/src/hooks/useKubernetesObjects.ts @@ -36,22 +36,21 @@ export const useKubernetesObjects = ( ): KubernetesObjects => { const kubernetesApi = useApi(kubernetesApiRef); const kubernetesAuthProvidersApi = useApi(kubernetesAuthProvidersApiRef); - const getCustomObjects = - useCallback(async (): Promise => { - const auth = await generateAuth( - entity, - kubernetesApi, - kubernetesAuthProvidersApi, - ); - return await kubernetesApi.getObjectsByEntity({ - auth, - entity, - }); - }, [kubernetesApi, entity, kubernetesAuthProvidersApi]); + const getObjects = useCallback(async (): Promise => { + const auth = await generateAuth( + entity, + kubernetesApi, + kubernetesAuthProvidersApi, + ); + return await kubernetesApi.getObjectsByEntity({ + auth, + entity, + }); + }, [kubernetesApi, entity, kubernetesAuthProvidersApi]); const { value, loading, error, retry } = useAsyncRetry( - () => getCustomObjects(), - [getCustomObjects], + () => getObjects(), + [getObjects], ); useInterval(() => retry(), intervalMs);