import type { ReactNode } from "react"; import { useEffect } from "react"; import { clsx } from "@keycloakify/keycloak-login-ui/tools/clsx"; import { kcSanitize } from "@keycloakify/keycloak-login-ui/kcSanitize"; import { useSetClassName } from "@keycloakify/keycloak-login-ui/tools/useSetClassName"; import { useInitializeTemplate } from "./useInitializeTemplate"; import { useKcClsx } from "@keycloakify/keycloak-login-ui/useKcClsx"; import { useI18n } from "../../i18n"; import { useKcContext } from "../../KcContext"; export function Template(props: { displayInfo?: boolean; displayMessage?: boolean; displayRequiredFields?: boolean; headerNode: ReactNode; socialProvidersNode?: ReactNode; infoNode?: ReactNode; documentTitle?: string; bodyClassName?: string; children: ReactNode; }) { const { displayInfo = false, displayMessage = true, displayRequiredFields = false, headerNode, socialProvidersNode = null, infoNode = null, documentTitle, bodyClassName, children } = props; const { kcContext } = useKcContext(); const { msg, msgStr, currentLanguage, enabledLanguages } = useI18n(); const { kcClsx } = useKcClsx(); useEffect(() => { document.title = documentTitle ?? msgStr("loginTitle", kcContext.realm.displayName); }, []); useSetClassName({ qualifiedName: "html", className: kcClsx("kcHtmlClass") }); useSetClassName({ qualifiedName: "body", className: bodyClassName ?? kcClsx("kcBodyClass") }); const { isReadyToRender } = useInitializeTemplate(); if (!isReadyToRender) { return null; } return (
{msg("loginTitleHtml", kcContext.realm.displayNameHtml)}
{enabledLanguages.length > 1 && (
)} {(() => { const node = !( kcContext.auth !== undefined && kcContext.auth.showUsername && !kcContext.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 && kcContext.message !== undefined && (kcContext.message.type !== "warning" || !kcContext.isAppInitiatedAction) && (
{kcContext.message.type === "success" && ( )} {kcContext.message.type === "warning" && ( )} {kcContext.message.type === "error" && ( )} {kcContext.message.type === "info" && ( )}
)} {children} {kcContext.auth !== undefined && kcContext.auth.showTryAnotherWayLink && (
)} {socialProvidersNode} {displayInfo && (
{infoNode}
)}
); }