Set html lang property and page title in usePrepareTemplate

This commit is contained in:
Joseph Garrone 2024-04-10 01:22:49 +02:00
parent 85cc665d17
commit 6991d868be
2 changed files with 25 additions and 4 deletions

View File

@ -1,6 +1,7 @@
import { useReducer, useEffect } from "react"; import { useReducer, useEffect } from "react";
import { headInsert } from "keycloakify/tools/headInsert"; import { headInsert } from "keycloakify/tools/headInsert";
import { clsx } from "keycloakify/tools/clsx"; import { clsx } from "keycloakify/tools/clsx";
import { assert } from "tsafe/assert";
export function usePrepareTemplate(params: { export function usePrepareTemplate(params: {
doFetchDefaultThemeResources: boolean; doFetchDefaultThemeResources: boolean;
@ -8,11 +9,31 @@ export function usePrepareTemplate(params: {
scripts?: string[]; scripts?: string[];
htmlClassName: string | undefined; htmlClassName: string | undefined;
bodyClassName: string | undefined; bodyClassName: string | undefined;
htmlLangProperty?: string | undefined;
documentTitle?: string;
}) { }) {
const { doFetchDefaultThemeResources, styles = [], scripts = [], htmlClassName, bodyClassName } = params; const { doFetchDefaultThemeResources, styles = [], scripts = [], htmlClassName, bodyClassName, htmlLangProperty, documentTitle } = params;
const [isReady, setReady] = useReducer(() => true, !doFetchDefaultThemeResources); const [isReady, setReady] = useReducer(() => true, !doFetchDefaultThemeResources);
useEffect(() => {
if (htmlLangProperty === undefined) {
return;
}
const html = document.querySelector("html");
assert(html !== null);
html.lang = htmlLangProperty;
}, [htmlLangProperty]);
useEffect(() => {
if (documentTitle === undefined) {
return;
}
document.title = documentTitle;
}, [documentTitle]);
useEffect(() => { useEffect(() => {
if (!doFetchDefaultThemeResources) { if (!doFetchDefaultThemeResources) {
return; return;

View File

@ -38,15 +38,15 @@ export default function Template(props: TemplateProps<KcContext, I18n>) {
`${url.resourcesPath}/css/login.css` `${url.resourcesPath}/css/login.css`
], ],
"htmlClassName": getClassName("kcHtmlClass"), "htmlClassName": getClassName("kcHtmlClass"),
"bodyClassName": getClassName("kcBodyClass") "bodyClassName": getClassName("kcBodyClass"),
"htmlLangProperty": locale?.currentLanguageTag,
"documentTitle": i18n.msgStr("loginTitle", kcContext.realm.displayName)
}); });
if (!isReady) { if (!isReady) {
return null; return null;
} }
document.title = i18n.msgStr("loginTitle", kcContext.realm.displayName);
return ( return (
<div className={getClassName("kcLoginClass")}> <div className={getClassName("kcLoginClass")}>
<div id="kc-header" className={getClassName("kcHeaderClass")}> <div id="kc-header" className={getClassName("kcHeaderClass")}>