keycloakify 6.11.8 → 6.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -7
- package/bin/create-keycloak-email-directory.js +1 -1
- package/bin/download-builtin-keycloak-theme.js +1 -1
- package/bin/keycloakify/BuildOptions.d.ts +2 -2
- package/bin/keycloakify/BuildOptions.js.map +1 -1
- package/bin/keycloakify/generateFtl/generateFtl.d.ts +2 -2
- package/bin/keycloakify/generateJavaStackFiles.d.ts +1 -1
- package/bin/keycloakify/generateKeycloakThemeResources.d.ts +1 -1
- package/bin/keycloakify/generateKeycloakThemeResources.js +1 -1
- package/bin/keycloakify/generateStartKeycloakTestingContainer.d.ts +1 -1
- package/bin/keycloakify/keycloakify.js +1 -1
- package/bin/keycloakify/replacers/replaceImportsFromStaticInJsCode.d.ts +1 -1
- package/bin/keycloakify/replacers/replaceImportsInCssCode.d.ts +1 -1
- package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.d.ts +1 -1
- package/bin/promptKeycloakVersion.js +1 -1
- package/bin/tools/NpmModuleVersion.d.ts +1 -1
- package/bin/tools/cliOptions.d.ts +1 -1
- package/bin/tools/deflate.js +1 -1
- package/bin/tools/downloadAndUnzip.js +51 -44
- package/bin/tools/downloadAndUnzip.js.map +1 -1
- package/bin/tools/grant-exec-perms.js +3 -2
- package/bin/tools/grant-exec-perms.js.map +1 -1
- package/bin/tools/jar.d.ts +1 -1
- package/bin/tools/jar.js +1 -1
- package/bin/tools/logger.d.ts +2 -2
- package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js +34 -27
- package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js.map +1 -1
- package/bin/tools/octokit-addons/listTags.js +1 -1
- package/bin/tools/transformCodebase.d.ts +1 -1
- package/bin/tools/walk.js +1 -1
- package/bin/tools/zip.d.ts +2 -2
- package/bin/tools/zip.js +1 -1
- package/bin/tsconfig.tsbuildinfo +1 -1
- package/lib/KcApp.d.ts +6 -0
- package/lib/{components/KcApp.js → KcApp.js} +25 -26
- package/lib/KcApp.js.map +1 -0
- package/lib/{components/KcProps.d.ts → KcProps.d.ts} +30 -6
- package/lib/{components/KcProps.js → KcProps.js} +1 -1
- package/lib/KcProps.js.map +1 -0
- package/lib/Template.d.ts +5 -0
- package/lib/{components/Template.js → Template.js} +12 -14
- package/lib/Template.js.map +1 -0
- package/lib/getKcContext/KcContextBase.d.ts +6 -6
- package/lib/getKcContext/getKcContextFromWindow.d.ts +1 -1
- package/lib/getKcContext/{kcContextMocks/kcContextMocks.d.ts → kcContextMocks.d.ts} +1 -1
- package/lib/getKcContext/{kcContextMocks/kcContextMocks.js → kcContextMocks.js} +8 -5
- package/lib/getKcContext/kcContextMocks.js.map +1 -0
- package/lib/i18n/i18n.d.ts +100 -0
- package/lib/i18n/i18n.js +160 -0
- package/lib/i18n/i18n.js.map +1 -0
- package/lib/i18n/index.d.ts +1 -99
- package/lib/i18n/index.js +1 -159
- package/lib/i18n/index.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/pages/Error.d.ts +5 -0
- package/lib/{components → pages}/Error.js +4 -6
- package/lib/pages/Error.js.map +1 -0
- package/lib/pages/IdpReviewUserProfile.d.ts +5 -0
- package/lib/{components → pages}/IdpReviewUserProfile.js +4 -6
- package/lib/pages/IdpReviewUserProfile.js.map +1 -0
- package/lib/pages/Info.d.ts +5 -0
- package/lib/{components → pages}/Info.js +4 -6
- package/lib/pages/Info.js.map +1 -0
- package/lib/pages/Login.d.ts +5 -0
- package/lib/{components → pages}/Login.js +5 -7
- package/lib/pages/Login.js.map +1 -0
- package/lib/pages/LoginConfigTotp.d.ts +5 -0
- package/lib/{components → pages}/LoginConfigTotp.js +4 -6
- package/lib/pages/LoginConfigTotp.js.map +1 -0
- package/lib/pages/LoginIdpLinkConfirm.d.ts +5 -0
- package/lib/{components → pages}/LoginIdpLinkConfirm.js +4 -6
- package/lib/pages/LoginIdpLinkConfirm.js.map +1 -0
- package/lib/pages/LoginIdpLinkEmail.d.ts +5 -0
- package/lib/{components → pages}/LoginIdpLinkEmail.js +4 -6
- package/lib/pages/LoginIdpLinkEmail.js.map +1 -0
- package/lib/pages/LoginOtp.d.ts +5 -0
- package/lib/{components → pages}/LoginOtp.js +4 -6
- package/lib/pages/LoginOtp.js.map +1 -0
- package/lib/pages/LoginPageExpired.d.ts +5 -0
- package/lib/{components → pages}/LoginPageExpired.js +4 -6
- package/lib/pages/LoginPageExpired.js.map +1 -0
- package/lib/pages/LoginPassword.d.ts +5 -0
- package/lib/{components → pages}/LoginPassword.js +5 -7
- package/lib/pages/LoginPassword.js.map +1 -0
- package/lib/pages/LoginResetPassword.d.ts +5 -0
- package/lib/{components → pages}/LoginResetPassword.js +4 -6
- package/lib/pages/LoginResetPassword.js.map +1 -0
- package/lib/pages/LoginUpdatePassword.d.ts +5 -0
- package/lib/{components → pages}/LoginUpdatePassword.js +4 -6
- package/lib/pages/LoginUpdatePassword.js.map +1 -0
- package/lib/pages/LoginUpdateProfile.d.ts +5 -0
- package/lib/{components → pages}/LoginUpdateProfile.js +4 -6
- package/lib/pages/LoginUpdateProfile.js.map +1 -0
- package/lib/pages/LoginUsername.d.ts +5 -0
- package/lib/{components → pages}/LoginUsername.js +5 -7
- package/lib/pages/LoginUsername.js.map +1 -0
- package/lib/pages/LoginVerifyEmail.d.ts +5 -0
- package/lib/{components → pages}/LoginVerifyEmail.js +4 -6
- package/lib/pages/LoginVerifyEmail.js.map +1 -0
- package/lib/pages/LogoutConfirm.d.ts +5 -0
- package/lib/{components → pages}/LogoutConfirm.js +4 -6
- package/lib/pages/LogoutConfirm.js.map +1 -0
- package/lib/pages/Register.d.ts +5 -0
- package/lib/{components → pages}/Register.js +4 -6
- package/lib/pages/Register.js.map +1 -0
- package/lib/pages/RegisterUserProfile.d.ts +5 -0
- package/lib/{components → pages}/RegisterUserProfile.js +4 -6
- package/lib/pages/RegisterUserProfile.js.map +1 -0
- package/lib/pages/Terms.d.ts +19 -0
- package/lib/{components → pages}/Terms.js +20 -22
- package/lib/pages/Terms.js.map +1 -0
- package/lib/pages/UpdateUserProfile.d.ts +5 -0
- package/lib/{components → pages}/UpdateUserProfile.js +4 -6
- package/lib/pages/UpdateUserProfile.js.map +1 -0
- package/lib/pages/WebauthnAuthenticate.d.ts +5 -0
- package/lib/{components → pages}/WebauthnAuthenticate.js +5 -7
- package/lib/pages/WebauthnAuthenticate.js.map +1 -0
- package/lib/{components → pages}/shared/UserProfileCommons.d.ts +6 -6
- package/lib/{components → pages}/shared/UserProfileCommons.js +4 -4
- package/lib/pages/shared/UserProfileCommons.js.map +1 -0
- package/lib/tools/AndByDiscriminatingKey.d.ts +1 -1
- package/lib/tools/DeepPartial.d.ts +1 -1
- package/lib/tools/ReactComponent.d.ts +1 -1
- package/lib/tools/SetOptional.d.ts +1 -0
- package/lib/tools/SetOptional.js +2 -0
- package/lib/tools/SetOptional.js.map +1 -0
- package/lib/tools/clsx.d.ts +2 -3
- package/lib/tools/clsx.js +39 -3
- package/lib/tools/clsx.js.map +1 -1
- package/lib/tools/deepAssign.js +1 -1
- package/lib/tools/deepAssign.js.map +1 -1
- package/lib/tools/memoize.d.ts +7 -0
- package/lib/tools/memoize.js +38 -0
- package/lib/tools/memoize.js.map +1 -0
- package/lib/tools/useCallbackFactory.d.ts +15 -0
- package/lib/tools/useCallbackFactory.js +28 -0
- package/lib/tools/useCallbackFactory.js.map +1 -0
- package/lib/tools/useConst.d.ts +5 -0
- package/lib/tools/useConst.js +10 -0
- package/lib/tools/useConst.js.map +1 -0
- package/lib/tools/useConstCallback.d.ts +2 -0
- package/lib/tools/useConstCallback.js +8 -0
- package/lib/tools/useConstCallback.js.map +1 -0
- package/lib/tools/useCssAndCx.d.ts +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/useFormValidationSlice.d.ts +4 -4
- package/lib/useFormValidationSlice.js +1 -1
- package/lib/useFormValidationSlice.js.map +1 -1
- package/package.json +133 -124
- package/src/bin/keycloakify/BuildOptions.ts +2 -2
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +1 -1
- package/src/lib/{components/KcApp.tsx → KcApp.tsx} +29 -38
- package/src/lib/{components/KcProps.ts → KcProps.ts} +27 -1
- package/src/lib/{components/Template.tsx → Template.tsx} +23 -38
- package/src/lib/getKcContext/KcContextBase.ts +1 -1
- package/src/lib/getKcContext/{kcContextMocks/kcContextMocks.ts → kcContextMocks.ts} +9 -6
- package/src/lib/i18n/i18n.tsx +292 -0
- package/src/lib/i18n/index.tsx +1 -290
- package/src/lib/index.ts +3 -3
- package/src/lib/{components → pages}/Error.tsx +7 -18
- package/src/lib/{components → pages}/IdpReviewUserProfile.tsx +7 -18
- package/src/lib/{components → pages}/Info.tsx +7 -18
- package/src/lib/{components → pages}/Login.tsx +8 -20
- package/src/lib/{components → pages}/LoginConfigTotp.tsx +7 -18
- package/src/lib/{components → pages}/LoginIdpLinkConfirm.tsx +7 -18
- package/src/lib/{components → pages}/LoginIdpLinkEmail.tsx +7 -18
- package/src/lib/{components → pages}/LoginOtp.tsx +7 -18
- package/src/lib/{components → pages}/LoginPageExpired.tsx +7 -18
- package/src/lib/{components → pages}/LoginPassword.tsx +8 -19
- package/src/lib/{components → pages}/LoginResetPassword.tsx +7 -18
- package/src/lib/{components → pages}/LoginUpdatePassword.tsx +7 -18
- package/src/lib/{components → pages}/LoginUpdateProfile.tsx +7 -18
- package/src/lib/{components → pages}/LoginUsername.tsx +8 -19
- package/src/lib/{components → pages}/LoginVerifyEmail.tsx +7 -18
- package/src/lib/{components → pages}/LogoutConfirm.tsx +7 -18
- package/src/lib/{components → pages}/Register.tsx +7 -18
- package/src/lib/{components → pages}/RegisterUserProfile.tsx +7 -18
- package/src/lib/{components → pages}/Terms.tsx +50 -61
- package/src/lib/{components → pages}/UpdateUserProfile.tsx +7 -18
- package/src/lib/{components → pages}/WebauthnAuthenticate.tsx +9 -19
- package/src/lib/pages/shared/UserProfileCommons.tsx +178 -0
- package/src/lib/tools/SetOptional.ts +1 -0
- package/src/lib/tools/clsx.ts +42 -5
- package/src/lib/tools/deepAssign.ts +1 -1
- package/src/lib/tools/memoize.ts +55 -0
- package/src/lib/tools/useCallbackFactory.ts +45 -0
- package/src/lib/tools/useConst.ts +10 -0
- package/src/lib/tools/useConstCallback.ts +15 -0
- package/src/lib/useFormValidationSlice.tsx +4 -4
- package/bin/generate-i18n-messages.d.ts +0 -1
- package/bin/generate-i18n-messages.js +0 -126
- package/bin/generate-i18n-messages.js.map +0 -1
- package/bin/link_in_test_app.d.ts +0 -1
- package/bin/link_in_test_app.js +0 -141
- package/bin/link_in_test_app.js.map +0 -1
- package/lib/components/Error.d.ts +0 -13
- package/lib/components/Error.js.map +0 -1
- package/lib/components/IdpReviewUserProfile.d.ts +0 -13
- package/lib/components/IdpReviewUserProfile.js.map +0 -1
- package/lib/components/Info.d.ts +0 -13
- package/lib/components/Info.js.map +0 -1
- package/lib/components/KcApp.d.ts +0 -13
- package/lib/components/KcApp.js.map +0 -1
- package/lib/components/KcProps.js.map +0 -1
- package/lib/components/Login.d.ts +0 -13
- package/lib/components/Login.js.map +0 -1
- package/lib/components/LoginConfigTotp.d.ts +0 -13
- package/lib/components/LoginConfigTotp.js.map +0 -1
- package/lib/components/LoginIdpLinkConfirm.d.ts +0 -13
- package/lib/components/LoginIdpLinkConfirm.js.map +0 -1
- package/lib/components/LoginIdpLinkEmail.d.ts +0 -13
- package/lib/components/LoginIdpLinkEmail.js.map +0 -1
- package/lib/components/LoginOtp.d.ts +0 -13
- package/lib/components/LoginOtp.js.map +0 -1
- package/lib/components/LoginPageExpired.d.ts +0 -13
- package/lib/components/LoginPageExpired.js.map +0 -1
- package/lib/components/LoginPassword.d.ts +0 -13
- package/lib/components/LoginPassword.js.map +0 -1
- package/lib/components/LoginResetPassword.d.ts +0 -13
- package/lib/components/LoginResetPassword.js.map +0 -1
- package/lib/components/LoginUpdatePassword.d.ts +0 -13
- package/lib/components/LoginUpdatePassword.js.map +0 -1
- package/lib/components/LoginUpdateProfile.d.ts +0 -13
- package/lib/components/LoginUpdateProfile.js.map +0 -1
- package/lib/components/LoginUsername.d.ts +0 -13
- package/lib/components/LoginUsername.js.map +0 -1
- package/lib/components/LoginVerifyEmail.d.ts +0 -13
- package/lib/components/LoginVerifyEmail.js.map +0 -1
- package/lib/components/LogoutConfirm.d.ts +0 -13
- package/lib/components/LogoutConfirm.js.map +0 -1
- package/lib/components/Register.d.ts +0 -13
- package/lib/components/Register.js.map +0 -1
- package/lib/components/RegisterUserProfile.d.ts +0 -13
- package/lib/components/RegisterUserProfile.js.map +0 -1
- package/lib/components/Template.d.ts +0 -25
- package/lib/components/Template.js.map +0 -1
- package/lib/components/Terms.d.ts +0 -27
- package/lib/components/Terms.js.map +0 -1
- package/lib/components/UpdateUserProfile.d.ts +0 -13
- package/lib/components/UpdateUserProfile.js.map +0 -1
- package/lib/components/WebauthnAuthenticate.d.ts +0 -13
- package/lib/components/WebauthnAuthenticate.js.map +0 -1
- package/lib/components/shared/UserProfileCommons.js.map +0 -1
- package/lib/getKcContext/kcContextMocks/index.d.ts +0 -1
- package/lib/getKcContext/kcContextMocks/index.js +0 -2
- package/lib/getKcContext/kcContextMocks/index.js.map +0 -1
- package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +0 -1
- package/src/bin/generate-i18n-messages.ts +0 -86
- package/src/bin/link_in_test_app.ts +0 -128
- package/src/lib/components/shared/UserProfileCommons.tsx +0 -173
- package/src/lib/getKcContext/kcContextMocks/index.ts +0 -1
package/src/lib/i18n/index.tsx
CHANGED
@@ -1,290 +1 @@
|
|
1
|
-
|
2
|
-
//NOTE for later: https://github.com/remarkjs/react-markdown/blob/236182ecf30bd89c1e5a7652acaf8d0bf81e6170/src/renderers.js#L7-L35
|
3
|
-
import React, { useEffect, useState, useRef } from "react";
|
4
|
-
import type baseMessages from "./generated_messages/18.0.1/login/en";
|
5
|
-
import { assert } from "tsafe/assert";
|
6
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
7
|
-
import { Markdown } from "../tools/Markdown";
|
8
|
-
|
9
|
-
export const fallbackLanguageTag = "en";
|
10
|
-
|
11
|
-
export type KcContextLike = {
|
12
|
-
locale?: {
|
13
|
-
currentLanguageTag: string;
|
14
|
-
supported: { languageTag: string; url: string; label: string }[];
|
15
|
-
};
|
16
|
-
};
|
17
|
-
|
18
|
-
assert<KcContextBase extends KcContextLike ? true : false>();
|
19
|
-
|
20
|
-
export type MessageKeyBase = keyof typeof baseMessages | keyof typeof keycloakifyExtraMessages[typeof fallbackLanguageTag];
|
21
|
-
|
22
|
-
export type I18n<MessageKey extends string = MessageKeyBase> = {
|
23
|
-
/**
|
24
|
-
* e.g: "en", "fr", "zh-CN"
|
25
|
-
*
|
26
|
-
* The current language
|
27
|
-
*/
|
28
|
-
currentLanguageTag: string;
|
29
|
-
/**
|
30
|
-
* To call when the user switch language.
|
31
|
-
* This will cause the page to be reloaded,
|
32
|
-
* on next load currentLanguageTag === newLanguageTag
|
33
|
-
*/
|
34
|
-
changeLocale: (newLanguageTag: string) => never;
|
35
|
-
/**
|
36
|
-
* e.g. "en" => "English", "fr" => "Français", ...
|
37
|
-
*
|
38
|
-
* Used to render a select that enable user to switch language.
|
39
|
-
* ex: https://user-images.githubusercontent.com/6702424/186044799-38801eec-4e89-483b-81dd-8e9233e8c0eb.png
|
40
|
-
* */
|
41
|
-
labelBySupportedLanguageTag: Record<string, string>;
|
42
|
-
/**
|
43
|
-
* Examples assuming currentLanguageTag === "en"
|
44
|
-
*
|
45
|
-
* msg("access-denied") === <span>Access denied</span>
|
46
|
-
* msg("impersonateTitleHtml", "Foo") === <span><strong>Foo</strong> Impersonate User</span>
|
47
|
-
*/
|
48
|
-
msg: (key: MessageKey, ...args: (string | undefined)[]) => JSX.Element;
|
49
|
-
/**
|
50
|
-
* It's the same thing as msg() but instead of returning a JSX.Element it returns a string.
|
51
|
-
* It can be more convenient to manipulate strings but if there are HTML tags it wont render.
|
52
|
-
* msgStr("impersonateTitleHtml", "Foo") === "<strong>Foo</strong> Impersonate User"
|
53
|
-
*/
|
54
|
-
msgStr: (key: MessageKey, ...args: (string | undefined)[]) => string;
|
55
|
-
/**
|
56
|
-
* Examples assuming currentLanguageTag === "en"
|
57
|
-
* advancedMsg("${access-denied} foo bar") === <span>${msgStr("access-denied")} foo bar<span> === <span>Access denied foo bar</span>
|
58
|
-
* advancedMsg("${access-denied}") === advancedMsg("access-denied") === msg("access-denied") === <span>Access denied</span>
|
59
|
-
* advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === <span>not-a-message-key</span>
|
60
|
-
*/
|
61
|
-
advancedMsg: (key: string, ...args: (string | undefined)[]) => JSX.Element;
|
62
|
-
/**
|
63
|
-
* Examples assuming currentLanguageTag === "en"
|
64
|
-
* advancedMsg("${access-denied} foo bar") === msg("access-denied") + " foo bar" === "Access denied foo bar"
|
65
|
-
* advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === "not-a-message-key"
|
66
|
-
*/
|
67
|
-
advancedMsgStr: (key: string, ...args: (string | undefined)[]) => string;
|
68
|
-
};
|
69
|
-
|
70
|
-
export function __unsafe_useI18n<ExtraMessageKey extends string = never>(params: {
|
71
|
-
kcContext: KcContextLike;
|
72
|
-
extraMessages: { [languageTag: string]: { [key in ExtraMessageKey]: string } };
|
73
|
-
doSkip: boolean;
|
74
|
-
}): I18n<MessageKeyBase | ExtraMessageKey> | null {
|
75
|
-
const { kcContext, extraMessages, doSkip } = params;
|
76
|
-
|
77
|
-
const [i18n, setI18n] = useState<I18n<ExtraMessageKey | MessageKeyBase> | undefined>(undefined);
|
78
|
-
|
79
|
-
const refHasStartedFetching = useRef(false);
|
80
|
-
|
81
|
-
useEffect(() => {
|
82
|
-
if (doSkip || refHasStartedFetching.current) {
|
83
|
-
return;
|
84
|
-
}
|
85
|
-
|
86
|
-
refHasStartedFetching.current = true;
|
87
|
-
|
88
|
-
(async () => {
|
89
|
-
const { currentLanguageTag = fallbackLanguageTag } = kcContext.locale ?? {};
|
90
|
-
|
91
|
-
const [fallbackMessages, messages] = await Promise.all([
|
92
|
-
import("./generated_messages/18.0.1/login/en"),
|
93
|
-
(() => {
|
94
|
-
switch (currentLanguageTag) {
|
95
|
-
case "ca":
|
96
|
-
return import("./generated_messages/18.0.1/login/ca");
|
97
|
-
case "cs":
|
98
|
-
return import("./generated_messages/18.0.1/login/cs");
|
99
|
-
case "da":
|
100
|
-
return import("./generated_messages/18.0.1/login/da");
|
101
|
-
case "de":
|
102
|
-
return import("./generated_messages/18.0.1/login/de");
|
103
|
-
case "en":
|
104
|
-
return import("./generated_messages/18.0.1/login/en");
|
105
|
-
case "es":
|
106
|
-
return import("./generated_messages/18.0.1/login/es");
|
107
|
-
case "fi":
|
108
|
-
return import("./generated_messages/18.0.1/login/fi");
|
109
|
-
case "fr":
|
110
|
-
return import("./generated_messages/18.0.1/login/fr");
|
111
|
-
case "hu":
|
112
|
-
return import("./generated_messages/18.0.1/login/hu");
|
113
|
-
case "it":
|
114
|
-
return import("./generated_messages/18.0.1/login/it");
|
115
|
-
case "ja":
|
116
|
-
return import("./generated_messages/18.0.1/login/ja");
|
117
|
-
case "lt":
|
118
|
-
return import("./generated_messages/18.0.1/login/lt");
|
119
|
-
case "lv":
|
120
|
-
return import("./generated_messages/18.0.1/login/lv");
|
121
|
-
case "nl":
|
122
|
-
return import("./generated_messages/18.0.1/login/nl");
|
123
|
-
case "no":
|
124
|
-
return import("./generated_messages/18.0.1/login/no");
|
125
|
-
case "pl":
|
126
|
-
return import("./generated_messages/18.0.1/login/pl");
|
127
|
-
case "pt-BR":
|
128
|
-
return import("./generated_messages/18.0.1/login/pt-BR");
|
129
|
-
case "ru":
|
130
|
-
return import("./generated_messages/18.0.1/login/ru");
|
131
|
-
case "sk":
|
132
|
-
return import("./generated_messages/18.0.1/login/sk");
|
133
|
-
case "sv":
|
134
|
-
return import("./generated_messages/18.0.1/login/sv");
|
135
|
-
case "tr":
|
136
|
-
return import("./generated_messages/18.0.1/login/tr");
|
137
|
-
case "zh-CN":
|
138
|
-
return import("./generated_messages/18.0.1/login/zh-CN");
|
139
|
-
default:
|
140
|
-
return { "default": {} };
|
141
|
-
}
|
142
|
-
})()
|
143
|
-
]).then(modules => modules.map(module => module.default));
|
144
|
-
|
145
|
-
setI18n({
|
146
|
-
...createI18nTranslationFunctions({
|
147
|
-
"fallbackMessages": {
|
148
|
-
...fallbackMessages,
|
149
|
-
...(keycloakifyExtraMessages[fallbackLanguageTag] ?? {}),
|
150
|
-
...(extraMessages[fallbackLanguageTag] ?? {})
|
151
|
-
} as any,
|
152
|
-
"messages": {
|
153
|
-
...messages,
|
154
|
-
...((keycloakifyExtraMessages as any)[currentLanguageTag] ?? {}),
|
155
|
-
...(extraMessages[currentLanguageTag] ?? {})
|
156
|
-
} as any
|
157
|
-
}),
|
158
|
-
currentLanguageTag,
|
159
|
-
"changeLocale": newLanguageTag => {
|
160
|
-
const { locale } = kcContext;
|
161
|
-
|
162
|
-
assert(locale !== undefined, "Internationalization not enabled");
|
163
|
-
|
164
|
-
const targetSupportedLocale = locale.supported.find(({ languageTag }) => languageTag === newLanguageTag);
|
165
|
-
|
166
|
-
assert(targetSupportedLocale !== undefined, `${newLanguageTag} need to be enabled in Keycloak admin`);
|
167
|
-
|
168
|
-
window.location.href = targetSupportedLocale.url;
|
169
|
-
|
170
|
-
assert(false, "never");
|
171
|
-
},
|
172
|
-
"labelBySupportedLanguageTag": Object.fromEntries(
|
173
|
-
(kcContext.locale?.supported ?? []).map(({ languageTag, label }) => [languageTag, label])
|
174
|
-
)
|
175
|
-
});
|
176
|
-
})();
|
177
|
-
}, []);
|
178
|
-
|
179
|
-
return i18n ?? null;
|
180
|
-
}
|
181
|
-
|
182
|
-
const useI18n_private = __unsafe_useI18n;
|
183
|
-
|
184
|
-
export function useI18n<ExtraMessageKey extends string = never>(params: {
|
185
|
-
kcContext: KcContextLike;
|
186
|
-
extraMessages: { [languageTag: string]: { [key in ExtraMessageKey]: string } };
|
187
|
-
}): I18n<MessageKeyBase | ExtraMessageKey> | null {
|
188
|
-
return useI18n_private({
|
189
|
-
...params,
|
190
|
-
"doSkip": false
|
191
|
-
});
|
192
|
-
}
|
193
|
-
|
194
|
-
function createI18nTranslationFunctions<MessageKey extends string>(params: {
|
195
|
-
fallbackMessages: Record<MessageKey, string>;
|
196
|
-
messages: Record<MessageKey, string>;
|
197
|
-
}): Pick<I18n<MessageKey>, "msg" | "msgStr" | "advancedMsg" | "advancedMsgStr"> {
|
198
|
-
const { fallbackMessages, messages } = params;
|
199
|
-
|
200
|
-
function resolveMsg(props: { key: string; args: (string | undefined)[]; doRenderMarkdown: boolean }): string | JSX.Element | undefined {
|
201
|
-
const { key, args, doRenderMarkdown } = props;
|
202
|
-
|
203
|
-
const messageOrUndefined: string | undefined = (messages as any)[key] ?? (fallbackMessages as any)[key];
|
204
|
-
|
205
|
-
if (messageOrUndefined === undefined) {
|
206
|
-
return undefined;
|
207
|
-
}
|
208
|
-
|
209
|
-
const message = messageOrUndefined;
|
210
|
-
|
211
|
-
const messageWithArgsInjectedIfAny = (() => {
|
212
|
-
const startIndex = message
|
213
|
-
.match(/{[0-9]+}/g)
|
214
|
-
?.map(g => g.match(/{([0-9]+)}/)![1])
|
215
|
-
.map(indexStr => parseInt(indexStr))
|
216
|
-
.sort((a, b) => a - b)[0];
|
217
|
-
|
218
|
-
if (startIndex === undefined) {
|
219
|
-
// No {0} in message (no arguments expected)
|
220
|
-
return message;
|
221
|
-
}
|
222
|
-
|
223
|
-
let messageWithArgsInjected = message;
|
224
|
-
|
225
|
-
args.forEach((arg, i) => {
|
226
|
-
if (arg === undefined) {
|
227
|
-
return;
|
228
|
-
}
|
229
|
-
|
230
|
-
messageWithArgsInjected = messageWithArgsInjected.replace(new RegExp(`\\{${i + startIndex}\\}`, "g"), arg);
|
231
|
-
});
|
232
|
-
|
233
|
-
return messageWithArgsInjected;
|
234
|
-
})();
|
235
|
-
|
236
|
-
return doRenderMarkdown ? (
|
237
|
-
<Markdown allowDangerousHtml renderers={{ "paragraph": "span" }}>
|
238
|
-
{messageWithArgsInjectedIfAny}
|
239
|
-
</Markdown>
|
240
|
-
) : (
|
241
|
-
messageWithArgsInjectedIfAny
|
242
|
-
);
|
243
|
-
}
|
244
|
-
|
245
|
-
function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[]; doRenderMarkdown: boolean }): JSX.Element | string {
|
246
|
-
const { key, args, doRenderMarkdown } = props;
|
247
|
-
|
248
|
-
const match = key.match(/^\$\{([^{]+)\}$/);
|
249
|
-
|
250
|
-
const keyUnwrappedFromCurlyBraces = match === null ? key : match[1];
|
251
|
-
|
252
|
-
const out = resolveMsg({
|
253
|
-
"key": keyUnwrappedFromCurlyBraces,
|
254
|
-
args,
|
255
|
-
doRenderMarkdown
|
256
|
-
});
|
257
|
-
|
258
|
-
return (out !== undefined ? out : doRenderMarkdown ? <span>{keyUnwrappedFromCurlyBraces}</span> : keyUnwrappedFromCurlyBraces) as any;
|
259
|
-
}
|
260
|
-
|
261
|
-
return {
|
262
|
-
"msgStr": (key, ...args) => resolveMsg({ key, args, "doRenderMarkdown": false }) as string,
|
263
|
-
"msg": (key, ...args) => resolveMsg({ key, args, "doRenderMarkdown": true }) as JSX.Element,
|
264
|
-
"advancedMsg": (key, ...args) => resolveMsgAdvanced({ key, args, "doRenderMarkdown": true }) as JSX.Element,
|
265
|
-
"advancedMsgStr": (key, ...args) => resolveMsgAdvanced({ key, args, "doRenderMarkdown": false }) as string
|
266
|
-
};
|
267
|
-
}
|
268
|
-
|
269
|
-
const keycloakifyExtraMessages = {
|
270
|
-
"en": {
|
271
|
-
"shouldBeEqual": "{0} should be equal to {1}",
|
272
|
-
"shouldBeDifferent": "{0} should be different to {1}",
|
273
|
-
"shouldMatchPattern": "Pattern should match: `/{0}/`",
|
274
|
-
"mustBeAnInteger": "Must be an integer",
|
275
|
-
"notAValidOption": "Not a valid option"
|
276
|
-
},
|
277
|
-
"fr": {
|
278
|
-
/* spell-checker: disable */
|
279
|
-
"shouldBeEqual": "{0} doit être égal à {1}",
|
280
|
-
"shouldBeDifferent": "{0} doit être différent de {1}",
|
281
|
-
"shouldMatchPattern": "Dois respecter le schéma: `/{0}/`",
|
282
|
-
"mustBeAnInteger": "Doit être un nombre entier",
|
283
|
-
"notAValidOption": "N'est pas une option valide",
|
284
|
-
|
285
|
-
"logoutConfirmTitle": "Déconnexion",
|
286
|
-
"logoutConfirmHeader": "Êtes-vous sûr(e) de vouloir vous déconnecter ?",
|
287
|
-
"doLogout": "Se déconnecter"
|
288
|
-
/* spell-checker: enable */
|
289
|
-
}
|
290
|
-
};
|
1
|
+
export * from "./i18n";
|
package/src/lib/index.ts
CHANGED
@@ -2,12 +2,12 @@ export * from "./getKcContext";
|
|
2
2
|
|
3
3
|
export * from "./i18n";
|
4
4
|
|
5
|
-
export { useDownloadTerms } from "./
|
5
|
+
export { useDownloadTerms } from "./pages/Terms";
|
6
6
|
|
7
|
-
export * from "./
|
7
|
+
export * from "./KcProps";
|
8
8
|
export * from "./keycloakJsAdapter";
|
9
9
|
export * from "./useFormValidationSlice";
|
10
10
|
|
11
|
-
import KcApp from "./
|
11
|
+
import KcApp from "./KcApp";
|
12
12
|
|
13
13
|
export default KcApp;
|
@@ -1,19 +1,10 @@
|
|
1
|
-
import React
|
2
|
-
import
|
3
|
-
import type {
|
4
|
-
import type {
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
6
|
-
import type { I18n } from "../i18n";
|
1
|
+
import React from "react";
|
2
|
+
import type { KcContextBase } from "../getKcContext";
|
3
|
+
import type { PageProps } from "../KcProps";
|
4
|
+
import type { I18nBase } from "../i18n";
|
7
5
|
|
8
|
-
export
|
9
|
-
kcContext
|
10
|
-
i18n: I18n;
|
11
|
-
doFetchDefaultThemeResources?: boolean;
|
12
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
13
|
-
};
|
14
|
-
|
15
|
-
const Error = memo((props: ErrorProps) => {
|
16
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
6
|
+
export default function Error(props: PageProps<KcContextBase.Error, I18nBase>) {
|
7
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
17
8
|
|
18
9
|
const { message, client } = kcContext;
|
19
10
|
|
@@ -38,6 +29,4 @@ const Error = memo((props: ErrorProps) => {
|
|
38
29
|
}
|
39
30
|
/>
|
40
31
|
);
|
41
|
-
}
|
42
|
-
|
43
|
-
export default Error;
|
32
|
+
}
|
@@ -1,21 +1,12 @@
|
|
1
|
-
import React, { useState
|
2
|
-
import DefaultTemplate from "./Template";
|
3
|
-
import type { TemplateProps } from "./Template";
|
4
|
-
import type { KcProps } from "./KcProps";
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
1
|
+
import React, { useState } from "react";
|
6
2
|
import { clsx } from "../tools/clsx";
|
7
|
-
import type { I18n } from "../i18n";
|
8
3
|
import { UserProfileFormFields } from "./shared/UserProfileCommons";
|
4
|
+
import type { KcContextBase } from "../getKcContext";
|
5
|
+
import type { PageProps } from "../KcProps";
|
6
|
+
import type { I18nBase } from "../i18n";
|
9
7
|
|
10
|
-
export
|
11
|
-
kcContext
|
12
|
-
i18n: I18n;
|
13
|
-
doFetchDefaultThemeResources?: boolean;
|
14
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
15
|
-
};
|
16
|
-
|
17
|
-
const IdpReviewUserProfile = memo((props: IdpReviewUserProfileProps) => {
|
18
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
8
|
+
export default function IdpReviewUserProfile(props: PageProps<KcContextBase.IdpReviewUserProfile, I18nBase>) {
|
9
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
19
10
|
|
20
11
|
const { msg, msgStr } = i18n;
|
21
12
|
|
@@ -53,6 +44,4 @@ const IdpReviewUserProfile = memo((props: IdpReviewUserProfileProps) => {
|
|
53
44
|
}
|
54
45
|
/>
|
55
46
|
);
|
56
|
-
}
|
57
|
-
|
58
|
-
export default IdpReviewUserProfile;
|
47
|
+
}
|
@@ -1,20 +1,11 @@
|
|
1
|
-
import React
|
2
|
-
import DefaultTemplate from "./Template";
|
3
|
-
import type { TemplateProps } from "./Template";
|
4
|
-
import type { KcProps } from "./KcProps";
|
1
|
+
import React from "react";
|
5
2
|
import { assert } from "../tools/assert";
|
6
|
-
import type { KcContextBase } from "../getKcContext
|
7
|
-
import type {
|
3
|
+
import type { KcContextBase } from "../getKcContext";
|
4
|
+
import type { PageProps } from "../KcProps";
|
5
|
+
import type { I18nBase } from "../i18n";
|
8
6
|
|
9
|
-
export
|
10
|
-
kcContext
|
11
|
-
i18n: I18n;
|
12
|
-
doFetchDefaultThemeResources?: boolean;
|
13
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
14
|
-
};
|
15
|
-
|
16
|
-
const Info = memo((props: InfoProps) => {
|
17
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
7
|
+
export default function Info(props: PageProps<KcContextBase.Info, I18nBase>) {
|
8
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
18
9
|
|
19
10
|
const { msgStr, msg } = i18n;
|
20
11
|
|
@@ -55,6 +46,4 @@ const Info = memo((props: InfoProps) => {
|
|
55
46
|
}
|
56
47
|
/>
|
57
48
|
);
|
58
|
-
}
|
59
|
-
|
60
|
-
export default Info;
|
49
|
+
}
|
@@ -1,22 +1,12 @@
|
|
1
|
-
import React, { useState,
|
2
|
-
import DefaultTemplate from "./Template";
|
3
|
-
import type { TemplateProps } from "./Template";
|
4
|
-
import type { KcProps } from "./KcProps";
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
1
|
+
import React, { useState, type FormEventHandler } from "react";
|
6
2
|
import { clsx } from "../tools/clsx";
|
7
|
-
import { useConstCallback } from "
|
8
|
-
import type {
|
9
|
-
import type {
|
3
|
+
import { useConstCallback } from "../tools/useConstCallback";
|
4
|
+
import type { KcContextBase } from "../getKcContext";
|
5
|
+
import type { PageProps } from "../KcProps";
|
6
|
+
import type { I18nBase } from "../i18n";
|
10
7
|
|
11
|
-
export
|
12
|
-
kcContext
|
13
|
-
i18n: I18n;
|
14
|
-
doFetchDefaultThemeResources?: boolean;
|
15
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
16
|
-
};
|
17
|
-
|
18
|
-
const Login = memo((props: LoginProps) => {
|
19
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
8
|
+
export default function Login(props: PageProps<KcContextBase.Login, I18nBase>) {
|
9
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
20
10
|
|
21
11
|
const { social, realm, url, usernameEditDisabled, login, auth, registrationDisabled } = kcContext;
|
22
12
|
|
@@ -199,6 +189,4 @@ const Login = memo((props: LoginProps) => {
|
|
199
189
|
}
|
200
190
|
/>
|
201
191
|
);
|
202
|
-
}
|
203
|
-
|
204
|
-
export default Login;
|
192
|
+
}
|
@@ -1,20 +1,11 @@
|
|
1
|
-
import React
|
2
|
-
import DefaultTemplate from "./Template";
|
3
|
-
import type { TemplateProps } from "./Template";
|
4
|
-
import type { KcProps } from "./KcProps";
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
1
|
+
import React from "react";
|
6
2
|
import { clsx } from "../tools/clsx";
|
7
|
-
import type {
|
3
|
+
import type { KcContextBase } from "../getKcContext";
|
4
|
+
import type { PageProps } from "../KcProps";
|
5
|
+
import type { I18nBase } from "../i18n";
|
8
6
|
|
9
|
-
export
|
10
|
-
kcContext
|
11
|
-
i18n: I18n;
|
12
|
-
doFetchDefaultThemeResources?: boolean;
|
13
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
14
|
-
};
|
15
|
-
|
16
|
-
const LoginConfigTotp = memo((props: LoginConfigTotpProps) => {
|
17
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
7
|
+
export default function LoginConfigTotp(props: PageProps<KcContextBase.LoginConfigTotp, I18nBase>) {
|
8
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
18
9
|
|
19
10
|
const { url, isAppInitiatedAction, totp, mode, messagesPerField } = kcContext;
|
20
11
|
|
@@ -188,6 +179,4 @@ const LoginConfigTotp = memo((props: LoginConfigTotpProps) => {
|
|
188
179
|
}
|
189
180
|
/>
|
190
181
|
);
|
191
|
-
}
|
192
|
-
|
193
|
-
export default LoginConfigTotp;
|
182
|
+
}
|
@@ -1,20 +1,11 @@
|
|
1
|
-
import React
|
2
|
-
import DefaultTemplate from "./Template";
|
3
|
-
import type { TemplateProps } from "./Template";
|
4
|
-
import type { KcProps } from "./KcProps";
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
1
|
+
import React from "react";
|
6
2
|
import { clsx } from "../tools/clsx";
|
7
|
-
import type {
|
3
|
+
import type { KcContextBase } from "../getKcContext";
|
4
|
+
import type { PageProps } from "../KcProps";
|
5
|
+
import type { I18nBase } from "../i18n";
|
8
6
|
|
9
|
-
export
|
10
|
-
kcContext
|
11
|
-
i18n: I18n;
|
12
|
-
doFetchDefaultThemeResources?: boolean;
|
13
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
14
|
-
};
|
15
|
-
|
16
|
-
const LoginIdpLinkConfirm = memo((props: LoginIdpLinkConfirmProps) => {
|
17
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
7
|
+
export default function LoginIdpLinkConfirm(props: PageProps<KcContextBase.LoginIdpLinkConfirm, I18nBase>) {
|
8
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
18
9
|
|
19
10
|
const { url, idpAlias } = kcContext;
|
20
11
|
|
@@ -60,6 +51,4 @@ const LoginIdpLinkConfirm = memo((props: LoginIdpLinkConfirmProps) => {
|
|
60
51
|
}
|
61
52
|
/>
|
62
53
|
);
|
63
|
-
}
|
64
|
-
|
65
|
-
export default LoginIdpLinkConfirm;
|
54
|
+
}
|
@@ -1,19 +1,10 @@
|
|
1
|
-
import React
|
2
|
-
import
|
3
|
-
import type {
|
4
|
-
import type {
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
6
|
-
import type { I18n } from "../i18n";
|
1
|
+
import React from "react";
|
2
|
+
import type { KcContextBase } from "../getKcContext";
|
3
|
+
import type { PageProps } from "../KcProps";
|
4
|
+
import type { I18nBase } from "../i18n";
|
7
5
|
|
8
|
-
export
|
9
|
-
kcContext
|
10
|
-
i18n: I18n;
|
11
|
-
doFetchDefaultThemeResources?: boolean;
|
12
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
13
|
-
};
|
14
|
-
|
15
|
-
const LoginIdpLinkEmail = memo((props: LoginIdpLinkEmailProps) => {
|
16
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
6
|
+
export default function LoginIdpLinkEmail(props: PageProps<KcContextBase.LoginIdpLinkEmail, I18nBase>) {
|
7
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
17
8
|
|
18
9
|
const { url, realm, brokerContext, idpAlias } = kcContext;
|
19
10
|
|
@@ -38,6 +29,4 @@ const LoginIdpLinkEmail = memo((props: LoginIdpLinkEmailProps) => {
|
|
38
29
|
}
|
39
30
|
/>
|
40
31
|
);
|
41
|
-
}
|
42
|
-
|
43
|
-
export default LoginIdpLinkEmail;
|
32
|
+
}
|
@@ -1,22 +1,13 @@
|
|
1
|
-
import React, { useEffect
|
2
|
-
import DefaultTemplate from "./Template";
|
3
|
-
import type { TemplateProps } from "./Template";
|
4
|
-
import type { KcProps } from "./KcProps";
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
1
|
+
import React, { useEffect } from "react";
|
6
2
|
import { headInsert } from "../tools/headInsert";
|
7
3
|
import { pathJoin } from "../../bin/tools/pathJoin";
|
8
4
|
import { clsx } from "../tools/clsx";
|
9
|
-
import type {
|
5
|
+
import type { KcContextBase } from "../getKcContext";
|
6
|
+
import type { PageProps } from "../KcProps";
|
7
|
+
import type { I18nBase } from "../i18n";
|
10
8
|
|
11
|
-
export
|
12
|
-
kcContext
|
13
|
-
i18n: I18n;
|
14
|
-
doFetchDefaultThemeResources?: boolean;
|
15
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
16
|
-
};
|
17
|
-
|
18
|
-
const LoginOtp = memo((props: LoginOtpProps) => {
|
19
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
9
|
+
export default function LoginOtp(props: PageProps<KcContextBase.LoginOtp, I18nBase>) {
|
10
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
20
11
|
|
21
12
|
const { otpLogin, url } = kcContext;
|
22
13
|
|
@@ -96,7 +87,7 @@ const LoginOtp = memo((props: LoginOtpProps) => {
|
|
96
87
|
}
|
97
88
|
/>
|
98
89
|
);
|
99
|
-
}
|
90
|
+
}
|
100
91
|
|
101
92
|
declare const $: any;
|
102
93
|
|
@@ -121,5 +112,3 @@ function evaluateInlineScript() {
|
|
121
112
|
}
|
122
113
|
});
|
123
114
|
}
|
124
|
-
|
125
|
-
export default LoginOtp;
|
@@ -1,19 +1,10 @@
|
|
1
|
-
import React
|
2
|
-
import
|
3
|
-
import type {
|
4
|
-
import type {
|
5
|
-
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
6
|
-
import type { I18n } from "../i18n";
|
1
|
+
import React from "react";
|
2
|
+
import type { KcContextBase } from "../getKcContext";
|
3
|
+
import type { PageProps } from "../KcProps";
|
4
|
+
import type { I18nBase } from "../i18n";
|
7
5
|
|
8
|
-
export
|
9
|
-
kcContext
|
10
|
-
i18n: I18n;
|
11
|
-
doFetchDefaultThemeResources?: boolean;
|
12
|
-
Template?: (props: TemplateProps) => JSX.Element | null;
|
13
|
-
};
|
14
|
-
|
15
|
-
const LoginPageExpired = memo((props: LoginPageExpired) => {
|
16
|
-
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template = DefaultTemplate, ...kcProps } = props;
|
6
|
+
export default function LoginPageExpired(props: PageProps<KcContextBase.LoginPageExpired, I18nBase>) {
|
7
|
+
const { kcContext, i18n, doFetchDefaultThemeResources = true, Template, ...kcProps } = props;
|
17
8
|
|
18
9
|
const { url } = kcContext;
|
19
10
|
|
@@ -42,6 +33,4 @@ const LoginPageExpired = memo((props: LoginPageExpired) => {
|
|
42
33
|
}
|
43
34
|
/>
|
44
35
|
);
|
45
|
-
}
|
46
|
-
|
47
|
-
export default LoginPageExpired;
|
36
|
+
}
|