keycloakify 4.8.7 → 5.0.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/CHANGELOG.md +16 -0
- package/README.md +4 -0
- package/bin/build-keycloak-theme/build-keycloak-theme.js +3 -3
- package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
- package/bin/build-keycloak-theme/generateFtl/generateFtl.d.ts +1 -1
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js +1 -0
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
- package/lib/components/Error.js +2 -2
- package/lib/components/Error.js.map +1 -1
- package/lib/components/Info.js +2 -2
- package/lib/components/Info.js.map +1 -1
- package/lib/components/KcApp.js +3 -0
- package/lib/components/KcApp.js.map +1 -1
- package/lib/components/Login.js +2 -2
- package/lib/components/Login.js.map +1 -1
- package/lib/components/LoginIdpLinkConfirm.js +2 -2
- package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
- package/lib/components/LoginIdpLinkEmail.d.ts +6 -0
- package/lib/components/LoginIdpLinkEmail.js +36 -0
- package/lib/components/LoginIdpLinkEmail.js.map +1 -0
- package/lib/components/LoginOtp.js +2 -2
- package/lib/components/LoginOtp.js.map +1 -1
- package/lib/components/LoginPageExpired.js +2 -2
- package/lib/components/LoginPageExpired.js.map +1 -1
- package/lib/components/LoginResetPassword.js +2 -2
- package/lib/components/LoginResetPassword.js.map +1 -1
- package/lib/components/LoginUpdatePassword.js +2 -2
- package/lib/components/LoginUpdatePassword.js.map +1 -1
- package/lib/components/LoginUpdateProfile.js +2 -2
- package/lib/components/LoginUpdateProfile.js.map +1 -1
- package/lib/components/LoginVerifyEmail.js +2 -2
- package/lib/components/LoginVerifyEmail.js.map +1 -1
- package/lib/components/Register.js +2 -2
- package/lib/components/Register.js.map +1 -1
- package/lib/components/RegisterUserProfile.js +3 -3
- package/lib/components/RegisterUserProfile.js.map +1 -1
- package/lib/components/Template.js +10 -28
- package/lib/components/Template.js.map +1 -1
- package/lib/components/Terms.d.ts +8 -0
- package/lib/components/Terms.js +33 -3
- package/lib/components/Terms.js.map +1 -1
- package/lib/getKcContext/KcContextBase.d.ts +12 -5
- package/lib/getKcContext/KcContextBase.js.map +1 -1
- package/lib/getKcContext/kcContextMocks/kcContextMocks.js +24 -8
- package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +1 -1
- package/lib/i18n/{kcMessages/login.d.ts → index.d.ts} +62 -4
- package/lib/i18n/{useKcMessage.js → index.js} +47 -33
- package/lib/i18n/index.js.map +1 -0
- package/lib/index.d.ts +2 -11
- package/lib/index.js +4 -11
- package/lib/index.js.map +1 -1
- package/lib/useFormValidationSlice.d.ts +4 -12
- package/lib/useFormValidationSlice.js +4 -3
- package/lib/useFormValidationSlice.js.map +1 -1
- package/package.json +11 -17
- package/src/bin/build-keycloak-theme/build-keycloak-theme.ts +3 -3
- package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +1 -0
- package/src/lib/components/Error.tsx +2 -2
- package/src/lib/components/Info.tsx +2 -2
- package/src/lib/components/KcApp.tsx +3 -0
- package/src/lib/components/Login.tsx +2 -2
- package/src/lib/components/LoginIdpLinkConfirm.tsx +2 -2
- package/src/lib/components/LoginIdpLinkEmail.tsx +32 -0
- package/src/lib/components/LoginOtp.tsx +2 -2
- package/src/lib/components/LoginPageExpired.tsx +2 -2
- package/src/lib/components/LoginResetPassword.tsx +2 -2
- package/src/lib/components/LoginUpdatePassword.tsx +2 -2
- package/src/lib/components/LoginUpdateProfile.tsx +2 -2
- package/src/lib/components/LoginVerifyEmail.tsx +2 -2
- package/src/lib/components/Register.tsx +2 -2
- package/src/lib/components/RegisterUserProfile.tsx +3 -3
- package/src/lib/components/Template.tsx +11 -31
- package/src/lib/components/Terms.tsx +24 -3
- package/src/lib/getKcContext/KcContextBase.ts +13 -8
- package/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +29 -9
- package/src/lib/i18n/index.tsx +180 -0
- package/src/lib/index.ts +3 -11
- package/src/lib/useFormValidationSlice.tsx +10 -15
- package/lib/i18n/KcLanguageTag.d.ts +0 -35
- package/lib/i18n/KcLanguageTag.js +0 -57
- package/lib/i18n/KcLanguageTag.js.map +0 -1
- package/lib/i18n/kcMessages/login.js +0 -38
- package/lib/i18n/kcMessages/login.js.map +0 -1
- package/lib/i18n/useKcLanguageTag.d.ts +0 -4
- package/lib/i18n/useKcLanguageTag.js +0 -22
- package/lib/i18n/useKcLanguageTag.js.map +0 -1
- package/lib/i18n/useKcMessage.d.ts +0 -23
- package/lib/i18n/useKcMessage.js.map +0 -1
- package/src/lib/i18n/KcLanguageTag.ts +0 -63
- package/src/lib/i18n/kcMessages/login.ts +0 -50
- package/src/lib/i18n/useKcLanguageTag.ts +0 -28
- package/src/lib/i18n/useKcMessage.tsx +0 -115
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"KcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/KcLanguageTag.ts"],"names":[],"mappings":";;;AAAA,+CAA8C;AAC9C,4CAAgD;AAIhD,IAAM,oBAAoB,GAAG;IACzB,4BAA4B;IAC5B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,QAAQ;IACd,2BAA2B;CACrB,CAAC;AAIX,SAAgB,qBAAqB,CAAC,QAAuB;;IACzD,OAAO,MAAA,oBAAoB,CAAC,QAAQ,CAAC,mCAAI,QAAQ,CAAC;AACtD,CAAC;AAFD,sDAEC;AAEY,QAAA,cAAc,GAAG,IAAA,uBAAU,EAAC,kBAAU,CAAC,CAAC;AAErD;;;;;GAKG;AACH,SAAgB,8BAA8B,CAAC,YAAoB;IAC/D,IAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAElE,IAAM,aAAa,GAAG,sBAAc,CAAC,IAAI,CACrC,UAAA,QAAQ;QACJ,OAAA,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjD,qBAAqB,CAAC,QAAQ,CAAC,CAAC,iBAAiB,EAAE,KAAK,YAAY,CAAC,iBAAiB,EAAE;IADxF,CACwF,CAC/F,CAAC;IAEF,IAAI,aAAa,KAAK,SAAS,EAAE;QAC7B,OAAO,aAAa,CAAC;KACxB;IAED,IAAI,YAAY,KAAK,SAAS,CAAC,QAAQ,EAAE;QACrC,OAAO,8BAA8B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC7D;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAlBD,wEAkBC"}
|
@@ -1,38 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
3
|
-
__assign = Object.assign || function(t) {
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
-
s = arguments[i];
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
-
t[p] = s[p];
|
8
|
-
}
|
9
|
-
return t;
|
10
|
-
};
|
11
|
-
return __assign.apply(this, arguments);
|
12
|
-
};
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
14
|
-
exports.kcMessages = exports.evtTermsUpdated = void 0;
|
15
|
-
var login_1 = require("../generated_kcMessages/15.0.2/login");
|
16
|
-
var evt_1 = require("evt");
|
17
|
-
var objectKeys_1 = require("tsafe/objectKeys");
|
18
|
-
var kcMessages = __assign(__assign({}, login_1.kcMessages), { "en": __assign(__assign({}, login_1.kcMessages["en"]), { "shouldBeEqual": "{0} should be equal to {1}", "shouldBeDifferent": "{0} should be different to {1}", "shouldMatchPattern": "Pattern should match: `/{0}/`", "mustBeAnInteger": "Must be an integer", "notAValidOption": "Not a valid option" }), "fr": __assign(__assign({}, login_1.kcMessages["fr"]), {
|
19
|
-
/* spell-checker: disable */
|
20
|
-
"shouldBeEqual": "{0} doit être egale à {1}", "shouldBeDifferent": "{0} doit être différent de {1}", "shouldMatchPattern": "Dois respecter le schéma: `/{0}/`", "mustBeAnInteger": "Doit être un nombre entiers", "notAValidOption": "N'est pas une option valide" }) });
|
21
|
-
exports.kcMessages = kcMessages;
|
22
|
-
exports.evtTermsUpdated = evt_1.Evt.asNonPostable(evt_1.Evt.create());
|
23
|
-
["termsText", "doAccept", "doDecline", "termsTitle"].forEach(function (key) {
|
24
|
-
return (0, objectKeys_1.objectKeys)(kcMessages).forEach(function (kcLanguage) {
|
25
|
-
return Object.defineProperty(kcMessages[kcLanguage], key, (function () {
|
26
|
-
var value = key === "termsText" ? "⏳" : kcMessages[kcLanguage][key];
|
27
|
-
return {
|
28
|
-
"enumerable": true,
|
29
|
-
"get": function () { return value; },
|
30
|
-
"set": function (newValue) {
|
31
|
-
value = newValue;
|
32
|
-
evt_1.Evt.asPostable(exports.evtTermsUpdated).post();
|
33
|
-
},
|
34
|
-
};
|
35
|
-
})());
|
36
|
-
});
|
37
|
-
});
|
38
|
-
//# sourceMappingURL=login.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/lib/i18n/kcMessages/login.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8DAAoF;AACpF,2BAA0B;AAC1B,+CAA8C;AAE9C,IAAM,UAAU,yBACT,kBAAc,KACjB,IAAI,wBACG,kBAAc,CAAC,IAAI,CAAC,KACvB,eAAe,EAAE,4BAA4B,EAC7C,mBAAmB,EAAE,gCAAgC,EACrD,oBAAoB,EAAE,+BAA+B,EACrD,iBAAiB,EAAE,oBAAoB,EACvC,iBAAiB,EAAE,oBAAoB,KAE3C,IAAI,wBACG,kBAAc,CAAC,IAAI,CAAC;QACvB,4BAA4B;QAC5B,eAAe,EAAE,2BAA2B,EAC5C,mBAAmB,EAAE,gCAAgC,EACrD,oBAAoB,EAAE,mCAAmC,EACzD,iBAAiB,EAAE,6BAA6B,EAChD,iBAAiB,EAAE,6BAA6B,MAGvD,CAAC;AAyBO,gCAAU;AAvBN,QAAA,eAAe,GAAG,SAAG,CAAC,aAAa,CAAC,SAAG,CAAC,MAAM,EAAQ,CAAC,CAAC;AAEpE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAW,CAAC,OAAO,CAAC,UAAA,GAAG;IACvE,OAAA,IAAA,uBAAU,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAA,UAAU;QACrC,OAAA,MAAM,CAAC,cAAc,CACjB,UAAU,CAAC,UAAU,CAAC,EACtB,GAAG,EACH,CAAC;YACG,IAAI,KAAK,GAAG,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;YAEpE,OAAO;gBACH,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;gBAClB,KAAK,EAAE,UAAC,QAAgB;oBACpB,KAAK,GAAG,QAAQ,CAAC;oBACjB,SAAG,CAAC,UAAU,CAAC,uBAAe,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3C,CAAC;aACJ,CAAC;QACN,CAAC,CAAC,EAAE,CACP;IAfD,CAeC,CACJ;AAjBD,CAiBC,CACJ,CAAC"}
|
@@ -1,4 +0,0 @@
|
|
1
|
-
import type { StatefulEvt } from "powerhooks";
|
2
|
-
import { KcLanguageTag } from "./KcLanguageTag";
|
3
|
-
export declare const useKcLanguageTag: () => import("powerhooks").UseNamedStateReturnType<"tr" | "no" | "ca" | "en" | "fr" | "cs" | "da" | "de" | "es" | "hu" | "it" | "ja" | "lt" | "nl" | "pl" | "pt-BR" | "ru" | "sk" | "sv" | "zh-CN", "kcLanguageTag">;
|
4
|
-
export declare function getEvtKcLanguage(): StatefulEvt<KcLanguageTag>;
|
@@ -1,22 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getEvtKcLanguage = exports.useKcLanguageTag = void 0;
|
4
|
-
var useGlobalState_1 = require("powerhooks/useGlobalState");
|
5
|
-
var getKcContextFromWindow_1 = require("../getKcContext/getKcContextFromWindow");
|
6
|
-
var KcLanguageTag_1 = require("./KcLanguageTag");
|
7
|
-
//export const { useKcLanguageTag, evtKcLanguageTag } = createUseGlobalState(
|
8
|
-
var wrap = (0, useGlobalState_1.createUseGlobalState)("kcLanguageTag", function () {
|
9
|
-
var _a, _b;
|
10
|
-
var kcContext = (0, getKcContextFromWindow_1.getKcContextFromWindow)();
|
11
|
-
var languageLike = (_b = (_a = kcContext === null || kcContext === void 0 ? void 0 : kcContext.locale) === null || _a === void 0 ? void 0 : _a.current) !== null && _b !== void 0 ? _b : (typeof navigator === "undefined" ? undefined : navigator.language);
|
12
|
-
if (languageLike === undefined) {
|
13
|
-
return "en";
|
14
|
-
}
|
15
|
-
return (0, KcLanguageTag_1.getBestMatchAmongKcLanguageTag)(languageLike);
|
16
|
-
}, { "persistance": "localStorage" });
|
17
|
-
exports.useKcLanguageTag = wrap.useKcLanguageTag;
|
18
|
-
function getEvtKcLanguage() {
|
19
|
-
return wrap.evtKcLanguageTag;
|
20
|
-
}
|
21
|
-
exports.getEvtKcLanguage = getEvtKcLanguage;
|
22
|
-
//# sourceMappingURL=useKcLanguageTag.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"useKcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcLanguageTag.ts"],"names":[],"mappings":";;;AAAA,4DAAiE;AACjE,iFAAgF;AAChF,iDAAiE;AAIjE,6EAA6E;AAC7E,IAAM,IAAI,GAAG,IAAA,qCAAoB,EAC7B,eAAe,EACf;;IACI,IAAM,SAAS,GAAG,IAAA,+CAAsB,GAAE,CAAC;IAE3C,IAAM,YAAY,GAAG,MAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,0CAAE,OAAO,mCAAI,CAAC,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEvH,IAAI,YAAY,KAAK,SAAS,EAAE;QAC5B,OAAO,IAAI,CAAC;KACf;IAED,OAAO,IAAA,8CAA8B,EAAC,YAAY,CAAC,CAAC;AACxD,CAAC,EACD,EAAE,aAAa,EAAE,cAAc,EAAE,CACpC,CAAC;AAEa,QAAA,gBAAgB,GAAK,IAAI,kBAAC;AAEzC,SAAgB,gBAAgB;IAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC;AACjC,CAAC;AAFD,4CAEC"}
|
@@ -1,23 +0,0 @@
|
|
1
|
-
/// <reference types="react" />
|
2
|
-
import "minimal-polyfills/Object.fromEntries";
|
3
|
-
import { kcMessages } from "./kcMessages/login";
|
4
|
-
export { kcMessages };
|
5
|
-
export declare type MessageKey = keyof typeof kcMessages["en"];
|
6
|
-
/**
|
7
|
-
* When the language is switched the page is reloaded, this may appear
|
8
|
-
* as a bug as you might notice that the language successfully switch before
|
9
|
-
* reload.
|
10
|
-
* However we need to tell Keycloak that the user have changed the language
|
11
|
-
* during login so we can retrieve the "local" field of the JWT encoded accessToken.
|
12
|
-
* https://user-images.githubusercontent.com/6702424/138096682-351bb61f-f24e-4caf-91b7-cca8cfa2cb58.mov
|
13
|
-
*
|
14
|
-
* advancedMsg("${access-denied}") === advancedMsg("access-denied") === msg("access-denied")
|
15
|
-
* advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === "not-a-message-key"
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
export declare function useKcMessage(): {
|
19
|
-
msgStr: (key: MessageKey, ...args: (string | undefined)[]) => string;
|
20
|
-
msg: (key: MessageKey, ...args: (string | undefined)[]) => JSX.Element;
|
21
|
-
advancedMsg: <Key extends string>(key: Key, ...args: (string | undefined)[]) => JSX.Element;
|
22
|
-
advancedMsgStr: <Key_1 extends string>(key: Key_1, ...args: (string | undefined)[]) => string;
|
23
|
-
};
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"useKcMessage.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcMessage.tsx"],"names":[],"mappings":"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"}
|
@@ -1,63 +0,0 @@
|
|
1
|
-
import { objectKeys } from "tsafe/objectKeys";
|
2
|
-
import { kcMessages } from "./kcMessages/login";
|
3
|
-
|
4
|
-
export type KcLanguageTag = keyof typeof kcMessages;
|
5
|
-
|
6
|
-
const kcLanguageByTagLabel = {
|
7
|
-
/* spell-checker: disable */
|
8
|
-
"es": "Español",
|
9
|
-
"it": "Italiano",
|
10
|
-
"fr": "Français",
|
11
|
-
"ca": "Català",
|
12
|
-
"en": "English",
|
13
|
-
"de": "Deutsch",
|
14
|
-
"no": "Norsk",
|
15
|
-
"pt-BR": "Português (Brasil)",
|
16
|
-
"ru": "Русский",
|
17
|
-
"sk": "Slovenčina",
|
18
|
-
"ja": "日本語",
|
19
|
-
"pl": "Polski",
|
20
|
-
"zh-CN": "中文简体",
|
21
|
-
"sv": "Svenska",
|
22
|
-
"lt": "Lietuvių",
|
23
|
-
"cs": "Čeština",
|
24
|
-
"nl": "Nederlands",
|
25
|
-
"tr": "Türkçe",
|
26
|
-
"da": "Dansk",
|
27
|
-
"hu": "Magyar",
|
28
|
-
/* spell-checker: enable */
|
29
|
-
} as const;
|
30
|
-
|
31
|
-
export type LanguageLabel = typeof kcLanguageByTagLabel[keyof typeof kcLanguageByTagLabel];
|
32
|
-
|
33
|
-
export function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel {
|
34
|
-
return kcLanguageByTagLabel[language] ?? language;
|
35
|
-
}
|
36
|
-
|
37
|
-
export const kcLanguageTags = objectKeys(kcMessages);
|
38
|
-
|
39
|
-
/**
|
40
|
-
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
|
41
|
-
* it corresponds to: "fr".
|
42
|
-
* If there is no reasonable match it's guessed from navigator.language.
|
43
|
-
* If still no matches "en" is returned.
|
44
|
-
*/
|
45
|
-
export function getBestMatchAmongKcLanguageTag(languageLike: string): KcLanguageTag {
|
46
|
-
const iso2LanguageLike = languageLike.split("-")[0].toLowerCase();
|
47
|
-
|
48
|
-
const kcLanguageTag = kcLanguageTags.find(
|
49
|
-
language =>
|
50
|
-
language.toLowerCase().includes(iso2LanguageLike) ||
|
51
|
-
getKcLanguageTagLabel(language).toLocaleLowerCase() === languageLike.toLocaleLowerCase(),
|
52
|
-
);
|
53
|
-
|
54
|
-
if (kcLanguageTag !== undefined) {
|
55
|
-
return kcLanguageTag;
|
56
|
-
}
|
57
|
-
|
58
|
-
if (languageLike !== navigator.language) {
|
59
|
-
return getBestMatchAmongKcLanguageTag(navigator.language);
|
60
|
-
}
|
61
|
-
|
62
|
-
return "en";
|
63
|
-
}
|
@@ -1,50 +0,0 @@
|
|
1
|
-
import { kcMessages as kcMessagesBase } from "../generated_kcMessages/15.0.2/login";
|
2
|
-
import { Evt } from "evt";
|
3
|
-
import { objectKeys } from "tsafe/objectKeys";
|
4
|
-
|
5
|
-
const kcMessages = {
|
6
|
-
...kcMessagesBase,
|
7
|
-
"en": {
|
8
|
-
...kcMessagesBase["en"],
|
9
|
-
"shouldBeEqual": "{0} should be equal to {1}",
|
10
|
-
"shouldBeDifferent": "{0} should be different to {1}",
|
11
|
-
"shouldMatchPattern": "Pattern should match: `/{0}/`",
|
12
|
-
"mustBeAnInteger": "Must be an integer",
|
13
|
-
"notAValidOption": "Not a valid option",
|
14
|
-
},
|
15
|
-
"fr": {
|
16
|
-
...kcMessagesBase["fr"],
|
17
|
-
/* spell-checker: disable */
|
18
|
-
"shouldBeEqual": "{0} doit être egale à {1}",
|
19
|
-
"shouldBeDifferent": "{0} doit être différent de {1}",
|
20
|
-
"shouldMatchPattern": "Dois respecter le schéma: `/{0}/`",
|
21
|
-
"mustBeAnInteger": "Doit être un nombre entiers",
|
22
|
-
"notAValidOption": "N'est pas une option valide",
|
23
|
-
/* spell-checker: enable */
|
24
|
-
},
|
25
|
-
};
|
26
|
-
|
27
|
-
export const evtTermsUpdated = Evt.asNonPostable(Evt.create<void>());
|
28
|
-
|
29
|
-
(["termsText", "doAccept", "doDecline", "termsTitle"] as const).forEach(key =>
|
30
|
-
objectKeys(kcMessages).forEach(kcLanguage =>
|
31
|
-
Object.defineProperty(
|
32
|
-
kcMessages[kcLanguage],
|
33
|
-
key,
|
34
|
-
(() => {
|
35
|
-
let value = key === "termsText" ? "⏳" : kcMessages[kcLanguage][key];
|
36
|
-
|
37
|
-
return {
|
38
|
-
"enumerable": true,
|
39
|
-
"get": () => value,
|
40
|
-
"set": (newValue: string) => {
|
41
|
-
value = newValue;
|
42
|
-
Evt.asPostable(evtTermsUpdated).post();
|
43
|
-
},
|
44
|
-
};
|
45
|
-
})(),
|
46
|
-
),
|
47
|
-
),
|
48
|
-
);
|
49
|
-
|
50
|
-
export { kcMessages };
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import { createUseGlobalState } from "powerhooks/useGlobalState";
|
2
|
-
import { getKcContextFromWindow } from "../getKcContext/getKcContextFromWindow";
|
3
|
-
import { getBestMatchAmongKcLanguageTag } from "./KcLanguageTag";
|
4
|
-
import type { StatefulEvt } from "powerhooks";
|
5
|
-
import { KcLanguageTag } from "./KcLanguageTag";
|
6
|
-
|
7
|
-
//export const { useKcLanguageTag, evtKcLanguageTag } = createUseGlobalState(
|
8
|
-
const wrap = createUseGlobalState(
|
9
|
-
"kcLanguageTag",
|
10
|
-
() => {
|
11
|
-
const kcContext = getKcContextFromWindow();
|
12
|
-
|
13
|
-
const languageLike = kcContext?.locale?.current ?? (typeof navigator === "undefined" ? undefined : navigator.language);
|
14
|
-
|
15
|
-
if (languageLike === undefined) {
|
16
|
-
return "en";
|
17
|
-
}
|
18
|
-
|
19
|
-
return getBestMatchAmongKcLanguageTag(languageLike);
|
20
|
-
},
|
21
|
-
{ "persistance": "localStorage" },
|
22
|
-
);
|
23
|
-
|
24
|
-
export const { useKcLanguageTag } = wrap;
|
25
|
-
|
26
|
-
export function getEvtKcLanguage(): StatefulEvt<KcLanguageTag> {
|
27
|
-
return wrap.evtKcLanguageTag;
|
28
|
-
}
|
@@ -1,115 +0,0 @@
|
|
1
|
-
import "minimal-polyfills/Object.fromEntries";
|
2
|
-
import { useReducer } from "react";
|
3
|
-
import { useKcLanguageTag } from "./useKcLanguageTag";
|
4
|
-
import { kcMessages, evtTermsUpdated } from "./kcMessages/login";
|
5
|
-
import { useEvt } from "evt/hooks";
|
6
|
-
//NOTE for later: https://github.com/remarkjs/react-markdown/blob/236182ecf30bd89c1e5a7652acaf8d0bf81e6170/src/renderers.js#L7-L35
|
7
|
-
import ReactMarkdown from "react-markdown";
|
8
|
-
import { useGuaranteedMemo } from "powerhooks/useGuaranteedMemo";
|
9
|
-
|
10
|
-
export { kcMessages };
|
11
|
-
|
12
|
-
export type MessageKey = keyof typeof kcMessages["en"];
|
13
|
-
|
14
|
-
function resolveMsg<Key extends string, DoRenderMarkdown extends boolean>(props: {
|
15
|
-
key: Key;
|
16
|
-
args: (string | undefined)[];
|
17
|
-
kcLanguageTag: string;
|
18
|
-
doRenderMarkdown: DoRenderMarkdown;
|
19
|
-
}): Key extends MessageKey ? (DoRenderMarkdown extends true ? JSX.Element : string) : undefined {
|
20
|
-
const { key, args, kcLanguageTag, doRenderMarkdown } = props;
|
21
|
-
|
22
|
-
let str = kcMessages[kcLanguageTag as any as "en"][key as MessageKey] ?? kcMessages["en"][key as MessageKey];
|
23
|
-
|
24
|
-
if (str === undefined) {
|
25
|
-
return undefined as any;
|
26
|
-
}
|
27
|
-
|
28
|
-
str = (() => {
|
29
|
-
const startIndex = str
|
30
|
-
.match(/{[0-9]+}/g)
|
31
|
-
?.map(g => g.match(/{([0-9]+)}/)![1])
|
32
|
-
.map(indexStr => parseInt(indexStr))
|
33
|
-
.sort((a, b) => a - b)[0];
|
34
|
-
|
35
|
-
if (startIndex === undefined) {
|
36
|
-
return str;
|
37
|
-
}
|
38
|
-
|
39
|
-
args.forEach((arg, i) => {
|
40
|
-
if (arg === undefined) {
|
41
|
-
return;
|
42
|
-
}
|
43
|
-
|
44
|
-
str = str.replace(new RegExp(`\\{${i + startIndex}\\}`, "g"), arg);
|
45
|
-
});
|
46
|
-
|
47
|
-
return str;
|
48
|
-
})();
|
49
|
-
|
50
|
-
return (
|
51
|
-
doRenderMarkdown ? (
|
52
|
-
<ReactMarkdown allowDangerousHtml renderers={key === "termsText" ? undefined : { "paragraph": "span" }}>
|
53
|
-
{str}
|
54
|
-
</ReactMarkdown>
|
55
|
-
) : (
|
56
|
-
str
|
57
|
-
)
|
58
|
-
) as any;
|
59
|
-
}
|
60
|
-
|
61
|
-
function resolveMsgAdvanced<Key extends string, DoRenderMarkdown extends boolean>(props: {
|
62
|
-
key: Key;
|
63
|
-
args: (string | undefined)[];
|
64
|
-
kcLanguageTag: string;
|
65
|
-
doRenderMarkdown: DoRenderMarkdown;
|
66
|
-
}): DoRenderMarkdown extends true ? JSX.Element : string {
|
67
|
-
const { key, args, kcLanguageTag, doRenderMarkdown } = props;
|
68
|
-
|
69
|
-
const match = key.match(/^\$\{([^{]+)\}$/);
|
70
|
-
|
71
|
-
const keyUnwrappedFromCurlyBraces = match === null ? key : match[1];
|
72
|
-
|
73
|
-
const out = resolveMsg({
|
74
|
-
"key": keyUnwrappedFromCurlyBraces,
|
75
|
-
args,
|
76
|
-
kcLanguageTag,
|
77
|
-
doRenderMarkdown,
|
78
|
-
});
|
79
|
-
|
80
|
-
return (out !== undefined ? out : doRenderMarkdown ? <span>{keyUnwrappedFromCurlyBraces}</span> : keyUnwrappedFromCurlyBraces) as any;
|
81
|
-
}
|
82
|
-
|
83
|
-
/**
|
84
|
-
* When the language is switched the page is reloaded, this may appear
|
85
|
-
* as a bug as you might notice that the language successfully switch before
|
86
|
-
* reload.
|
87
|
-
* However we need to tell Keycloak that the user have changed the language
|
88
|
-
* during login so we can retrieve the "local" field of the JWT encoded accessToken.
|
89
|
-
* https://user-images.githubusercontent.com/6702424/138096682-351bb61f-f24e-4caf-91b7-cca8cfa2cb58.mov
|
90
|
-
*
|
91
|
-
* advancedMsg("${access-denied}") === advancedMsg("access-denied") === msg("access-denied")
|
92
|
-
* advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === "not-a-message-key"
|
93
|
-
*
|
94
|
-
*/
|
95
|
-
export function useKcMessage() {
|
96
|
-
const { kcLanguageTag } = useKcLanguageTag();
|
97
|
-
|
98
|
-
const [trigger, forceUpdate] = useReducer((counter: number) => counter + 1, 0);
|
99
|
-
|
100
|
-
useEvt(ctx => evtTermsUpdated.attach(ctx, forceUpdate), []);
|
101
|
-
|
102
|
-
return useGuaranteedMemo(
|
103
|
-
() => ({
|
104
|
-
"msgStr": (key: MessageKey, ...args: (string | undefined)[]): string =>
|
105
|
-
resolveMsg({ key, args, kcLanguageTag, "doRenderMarkdown": false }),
|
106
|
-
"msg": (key: MessageKey, ...args: (string | undefined)[]): JSX.Element =>
|
107
|
-
resolveMsg({ key, args, kcLanguageTag, "doRenderMarkdown": true }),
|
108
|
-
"advancedMsg": <Key extends string>(key: Key, ...args: (string | undefined)[]): JSX.Element =>
|
109
|
-
resolveMsgAdvanced({ key, args, kcLanguageTag, "doRenderMarkdown": true }),
|
110
|
-
"advancedMsgStr": <Key extends string>(key: Key, ...args: (string | undefined)[]): string =>
|
111
|
-
resolveMsgAdvanced({ key, args, kcLanguageTag, "doRenderMarkdown": false }),
|
112
|
-
}),
|
113
|
-
[kcLanguageTag, trigger],
|
114
|
-
);
|
115
|
-
}
|