/* eslint-disable */ // @ts-nocheck import { Spinner } from "../../@patternfly/react-core"; import { Keycloak } from "oidc-spa/keycloak-js"; import { PropsWithChildren, createContext, useContext, useEffect, useMemo, useRef, useState, } from "react"; import { AlertProvider } from "../alerts/Alerts"; import { ErrorPage } from "./ErrorPage"; import { Help } from "./HelpContext"; import { BaseEnvironment } from "./environment"; export type KeycloakContext = KeycloakContextProps & { keycloak: Keycloak; }; const createKeycloakEnvContext = () => createContext | undefined>(undefined); let KeycloakEnvContext: any; export const useEnvironment = < T extends BaseEnvironment = BaseEnvironment, >() => { const context = useContext | undefined>( KeycloakEnvContext, ); if (!context) throw Error( "no environment provider in the hierarchy make sure to add the provider", ); return context; }; interface KeycloakContextProps { environment: T; keycloak?: Keycloak; } export const KeycloakProvider = ({ environment, keycloak: externalKeycloak, children, }: PropsWithChildren>) => { KeycloakEnvContext = createKeycloakEnvContext(); const calledOnce = useRef(false); const [init, setInit] = useState(!!externalKeycloak); const [error, setError] = useState(); const keycloak = useMemo(() => { if (externalKeycloak) { return externalKeycloak; } const keycloak = new Keycloak({ url: environment.serverBaseUrl, realm: environment.realm, clientId: environment.clientId, }); return keycloak; }, [environment, externalKeycloak]); useEffect(() => { // Skip initialization if using external keycloak (already initialized) if (externalKeycloak) { return; } // only needed in dev mode if (calledOnce.current) { return; } const init = () => keycloak.init({ onLoad: "login-required", pkceMethod: "S256", scope: environment.scope, }); init() .then(() => setInit(true)) .catch((error) => setError(error)); calledOnce.current = true; }, [keycloak, externalKeycloak]); if (error) { return ; } if (!init) { return ; } return ( {children} ); };