@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
JavaScript
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