UNPKG

@janus-idp/shared-react

Version:

Shared code for utils, types, and React components for the Janus frontend plugins.

54 lines (51 loc) 1.62 kB
import { useCallback } from 'react'; import useAsyncRetry from 'react-use/esm/useAsyncRetry'; import useInterval from 'react-use/esm/useInterval'; import { useApi } from '@backstage/core-plugin-api'; const generateAuth = async (entity, kubernetesApi, kubernetesAuthProvidersApi) => { const clusters = await kubernetesApi.getClusters(); const authProviders = [ ...new Set( clusters.map( (c) => `${c.authProvider}${c.oidcTokenProvider ? `.${c.oidcTokenProvider}` : ""}` ) ) ]; let requestBody = { entity }; for (const authProviderStr of authProviders) { requestBody = await kubernetesAuthProvidersApi.decorateRequestBodyForAuth( authProviderStr, requestBody ); } return requestBody.auth ?? {}; }; const useKubernetesObjects = (entity, kubernetesApiRef, kubernetesAuthProvidersApiRef, intervalMs = 1e4) => { const kubernetesApi = useApi(kubernetesApiRef); const kubernetesAuthProvidersApi = useApi(kubernetesAuthProvidersApiRef); const getObjects = useCallback(async () => { const auth = await generateAuth( entity, kubernetesApi, kubernetesAuthProvidersApi ); return await kubernetesApi.getObjectsByEntity({ auth, entity }); }, [kubernetesApi, entity, kubernetesAuthProvidersApi]); const { value, loading, error, retry } = useAsyncRetry( () => getObjects(), [getObjects] ); useInterval(() => retry(), intervalMs); return { kubernetesObjects: value, loading, error: error?.message }; }; export { useKubernetesObjects }; //# sourceMappingURL=useKubernetesObjects.esm.js.map