diff --git a/src/login/lib/useDownloadTerms.ts b/src/login/lib/useDownloadTerms.ts index 01839927..6e1f751e 100644 --- a/src/login/lib/useDownloadTerms.ts +++ b/src/login/lib/useDownloadTerms.ts @@ -7,7 +7,13 @@ import { import { useOnFistMount } from "keycloakify/tools/useOnFirstMount"; import { KcContext } from "../KcContext"; -const obsTermsMarkdown = createStatefulObservable(() => undefined); +const obs = createStatefulObservable< + | { + termsMarkdown: string; + termsLanguageTag: string; + } + | undefined +>(() => undefined); export type KcContextLike = { pageId: string; @@ -22,26 +28,30 @@ assert(); /** Allow to avoid bundling the terms and download it on demand*/ export function useDownloadTerms(params: { kcContext: KcContextLike; - downloadTermMarkdown: (params: { currentLanguageTag: string }) => Promise; + downloadTermsMarkdown: (params: { + currentLanguageTag: string; + }) => Promise<{ termsMarkdown: string; termsLanguageTag: string }>; }) { - const { kcContext, downloadTermMarkdown } = params; + const { kcContext, downloadTermsMarkdown } = params; useOnFistMount(async () => { if (kcContext.pageId === "terms.ftl" || kcContext.termsAcceptanceRequired) { - const termsMarkdown = await downloadTermMarkdown({ + obs.current = await downloadTermsMarkdown({ currentLanguageTag: kcContext.locale?.currentLanguageTag ?? fallbackLanguageTag }); - - obsTermsMarkdown.current = termsMarkdown; } }); } export function useTermsMarkdown() { - useRerenderOnChange(obsTermsMarkdown); + useRerenderOnChange(obs); - const termsMarkdown = obsTermsMarkdown.current; + if (obs.current === undefined) { + return { isDownloadComplete: false as const }; + } - return { termsMarkdown }; + const { termsMarkdown, termsLanguageTag } = obs.current; + + return { isDownloadComplete: true, termsMarkdown, termsLanguageTag }; } diff --git a/src/login/pages/Terms.tsx b/src/login/pages/Terms.tsx index 52bf2fb0..c0168360 100644 --- a/src/login/pages/Terms.tsx +++ b/src/login/pages/Terms.tsx @@ -18,15 +18,15 @@ export default function Terms(props: PageProps -
+
{termsMarkdown}
diff --git a/stories/login/KcApp.tsx b/stories/login/KcApp.tsx index 7627b3d6..5030232f 100644 --- a/stories/login/KcApp.tsx +++ b/stories/login/KcApp.tsx @@ -13,21 +13,26 @@ export default function KcApp(props: { kcContext: KcContext }) { useDownloadTerms({ kcContext, - downloadTermMarkdown: async ({ currentLanguageTag }) => { - const termsFileName = (() => { - switch (currentLanguageTag) { - case "fr": - return "fr.md"; - case "es": - return "es.md"; - default: - return "en.md"; - } - })(); + downloadTermsMarkdown: async ({ currentLanguageTag }) => { + let termsLanguageTag = currentLanguageTag; + let termsFileName: string; - const response = await fetch(`/terms/${termsFileName}`); + switch (currentLanguageTag) { + case "fr": + termsFileName = "fr.md"; + break; + case "es": + termsFileName = "es.md"; + break; + default: + termsFileName = "en.md"; + termsLanguageTag = "en"; + break; + } - return response.text(); + const termsMarkdown = await fetch(`/terms/${termsFileName}`).then(response => response.text()); + + return { termsMarkdown, termsLanguageTag }; } });