2021-03-01 13:55:58 +01:00
|
|
|
|
2021-04-08 17:06:09 +02:00
|
|
|
import { useCallback, useReducer } from "react";
|
2021-03-02 23:48:31 +01:00
|
|
|
import { useKcLanguageTag } from "./useKcLanguageTag";
|
2021-04-08 17:06:09 +02:00
|
|
|
import { kcMessages, evtTermsUpdated } from "./kcMessages/login";
|
2021-03-01 20:45:37 +01:00
|
|
|
import type { ReactNode } from "react";
|
2021-04-08 17:06:09 +02:00
|
|
|
import { useEvt } from "evt/hooks";
|
2021-04-08 15:41:40 +02:00
|
|
|
//@ts-ignore
|
|
|
|
import * as markdown from "markdown";
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-04-08 17:06:09 +02:00
|
|
|
export type MessageKey = keyof typeof kcMessages["en"];
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-03-07 15:37:37 +01:00
|
|
|
export function useKcMessage() {
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-03-02 23:48:31 +01:00
|
|
|
const { kcLanguageTag } = useKcLanguageTag();
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-04-08 17:06:09 +02:00
|
|
|
const [trigger, forceUpdate] = useReducer((counter: number) => counter + 1, 0);
|
|
|
|
|
|
|
|
useEvt(ctx => evtTermsUpdated.attach(ctx, forceUpdate), []);
|
|
|
|
|
2021-04-08 12:20:06 +02:00
|
|
|
const msgStr = useCallback(
|
2021-03-02 22:48:36 +01:00
|
|
|
(key: MessageKey, ...args: (string | undefined)[]): string => {
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-04-08 17:06:09 +02:00
|
|
|
let str: string = kcMessages[kcLanguageTag as any as "en"][key] ?? kcMessages["en"][key];
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-03-01 20:45:37 +01:00
|
|
|
args.forEach((arg, i) => {
|
|
|
|
|
|
|
|
if (arg === undefined) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-03-02 22:48:36 +01:00
|
|
|
str = str.replace(new RegExp(`\\{${i}\\}`, "g"), arg);
|
2021-03-01 20:45:37 +01:00
|
|
|
|
|
|
|
});
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-03-02 22:48:36 +01:00
|
|
|
return str;
|
2021-03-01 13:55:58 +01:00
|
|
|
|
2021-04-08 12:20:06 +02:00
|
|
|
},
|
2021-04-08 17:06:09 +02:00
|
|
|
[kcLanguageTag, trigger]
|
2021-03-01 13:55:58 +01:00
|
|
|
);
|
|
|
|
|
2021-04-08 15:41:40 +02:00
|
|
|
const msg = useCallback<(...args: Parameters<typeof msgStr>) => ReactNode>(
|
|
|
|
(key, ...args) =>
|
|
|
|
<span
|
|
|
|
className={key}
|
|
|
|
dangerouslySetInnerHTML={{
|
|
|
|
"__html":
|
|
|
|
markdown.toHTML(msgStr(key, ...args))
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
,
|
2021-04-08 17:06:09 +02:00
|
|
|
[kcLanguageTag, trigger]
|
2021-03-02 22:48:36 +01:00
|
|
|
);
|
|
|
|
|
2021-03-07 15:37:37 +01:00
|
|
|
return { msg, msgStr };
|
2021-03-01 13:55:58 +01:00
|
|
|
|
|
|
|
}
|