import { useEffect } from "react"; import { clsx } from "keycloakify/tools/clsx"; import { kcSanitize } from "keycloakify/lib/kcSanitize"; import type { TemplateProps } from "keycloakify/login/TemplateProps"; import { getKcClsx } from "keycloakify/login/lib/kcClsx"; import { useSetClassName } from "keycloakify/tools/useSetClassName"; import { useInitialize } from "keycloakify/login/Template.useInitialize"; import type { I18n } from "./i18n"; import type { KcContext } from "./KcContext"; export default function Template(props: TemplateProps) { 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, currentLanguage, enabledLanguages } = i18n; const { realm, auth, url, message, isAppInitiatedAction } = kcContext; useEffect(() => { document.title = documentTitle ?? msgStr("loginTitle", kcContext.realm.displayName); }, []); useSetClassName({ qualifiedName: "html", className: kcClsx("kcHtmlClass") }); useSetClassName({ qualifiedName: "body", className: bodyClassName ?? kcClsx("kcBodyClass") }); const { isReadyToRender } = useInitialize({ kcContext, doUseDefaultCss }); if (!isReadyToRender) { return null; } return (
{msg("loginTitleHtml", realm.displayNameHtml)}
{enabledLanguages.length > 1 && (
)} {(() => { const node = !(auth !== undefined && auth.showUsername && !auth.showResetCredentials) ? (

{headerNode}

) : (
{msg("restartLoginTooltip")}
); if (displayRequiredFields) { return (
* {msg("requiredFields")}
{node}
); } return node; })()}
{/* App-initiated actions should not see warning messages about the need to complete the action during login. */} {displayMessage && message !== undefined && (message.type !== "warning" || !isAppInitiatedAction) && (
{message.type === "success" && } {message.type === "warning" && } {message.type === "error" && } {message.type === "info" && }
)} {children} {auth !== undefined && auth.showTryAnotherWayLink && (
)} {socialProvidersNode} {displayInfo && (
{infoNode}
)}
); }