import { useEffect } from "react"; import { assert } from "keycloakify/tools/assert"; import { clsx } from "keycloakify/tools/clsx"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; import { useInsertLinkTags } from "keycloakify/tools/useInsertLinkTags"; import { useSetClassName } from "keycloakify/tools/useSetClassName"; import type { TemplateProps } from "keycloakify/account/TemplateProps"; import type { KcContext } from "./KcContext"; import { useI18n } from "./i18n"; export default function Template(props: TemplateProps) { const { kcContext, doUseDefaultCss, active, classes, children } = props; const { getClassName } = useGetClassName({ doUseDefaultCss, classes }); const { msg, msgStr, getChangeLocalUrl, labelBySupportedLanguageTag, currentLanguageTag } = useI18n({ kcContext }); const { locale, url, features, realm, message, referrer } = kcContext; useEffect(() => { document.title = msgStr("accountManagementTitle"); }, []); useSetClassName({ qualifiedName: "html", className: getClassName("kcHtmlClass") }); useSetClassName({ qualifiedName: "body", className: clsx("admin-console", "user", getClassName("kcBodyClass")) }); useEffect(() => { const { currentLanguageTag } = locale ?? {}; if (currentLanguageTag === undefined) { return; } const html = document.querySelector("html"); assert(html !== null); html.lang = currentLanguageTag; }, []); const { areAllStyleSheetsLoaded } = useInsertLinkTags({ componentOrHookName: "Template", hrefs: !doUseDefaultCss ? [] : [ `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`, `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`, `${url.resourcesPath}/css/account.css` ] }); if (!areAllStyleSheetsLoaded) { return null; } return ( <>
{message !== undefined && (
{message.type === "success" && } {message.type === "error" && } {message.summary}
)} {children}
); }