Copy import { useEffect } from "react";
import { assert } from "keycloakify/tools/assert";
import { clsx } from "keycloakify/tools/clsx";
import type { TemplateProps } from "keycloakify/login/TemplateProps";
import { getKcClsx } from "keycloakify/login/lib/kcClsx";
-import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
-import { useInsertLinkTags } from "keycloakify/tools/useInsertLinkTags";
+import { useInitialize } from "keycloakify/login/Template.useInitialize";
import { useSetClassName } from "keycloakify/tools/useSetClassName";
import type { I18n } from "./i18n";
import type { KcContext } from "./KcContext";
export default function Template(props: TemplateProps<KcContext, I18n>) {
const {
displayInfo = false,
displayMessage = true,
displayRequiredFields = false,
headerNode,
socialProvidersNode = null,
infoNode = null,
documentTitle,
bodyClassName,
kcContext,
i18n,
doUseDefaultCss,
classes,
children
} = props;
const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
const { msg, msgStr, getChangeLocaleUrl, labelBySupportedLanguageTag, currentLanguageTag } = i18n;
const { realm, locale, auth, url, message, isAppInitiatedAction, authenticationSession, scripts } = kcContext;
useEffect(() => {
document.title = documentTitle ?? msgStr("loginTitle", kcContext.realm.displayName);
}, []);
useSetClassName({
qualifiedName: "html",
className: kcClsx("kcHtmlClass")
});
useSetClassName({
qualifiedName: "body",
className: bodyClassName ?? kcClsx("kcBodyClass")
});
- const { areAllStyleSheetsLoaded } = useInsertLinkTags({
- componentOrHookName: "Template",
- hrefs: !doUseDefaultCss
- ? []
- : [
- `${url.resourcesCommonPath}/node_modules/@patternfly/patternfly/patternfly.min.css`,
- `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`,
- `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`,
- `${url.resourcesCommonPath}/lib/pficon/pficon.css`,
- `${url.resourcesPath}/css/login.css`
- ]
- });
- const { insertScriptTags } = useInsertScriptTags({
- componentOrHookName: "Template",
- scriptTags: [
- {
- type: "module",
- src: `${url.resourcesPath}/js/menu-button-links.js`
- },
- ...(authenticationSession === undefined
- ? []
- : [
- {
- type: "module",
- textContent: [
- `import { checkCookiesAndSetTimer } from "${url.resourcesPath}/js/authChecker.js";`,
- ``,
- `checkCookiesAndSetTimer(`,
- ` "${authenticationSession.authSessionId}",`,
- ` "${authenticationSession.tabId}",`,
- ` "${url.ssoLoginInOtherTabsUrl}"`,
- `);`
- ].join("\n")
- } as const
- ]),
- ...scripts.map(
- script =>
- ({
- type: "text/javascript",
- src: script
- }) as const
- )
- ]
- });
- useEffect(() => {
- if (areAllStyleSheetsLoaded) {
- insertScriptTags();
- }
- }, [areAllStyleSheetsLoaded]);
- if (!areAllStyleSheetsLoaded) {
- return null;
- }
+ const { isReadyToRender } = useInitialize({ kcContext, doUseDefaultCss });
+ if (!isReadyToRender) {
+ return null;
+ }
return (
<div className={kcClsx("kcLoginClass")}>