From 7a040935e9fa4a8d6b5983518f3c53030730272f Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Sun, 9 Jun 2024 11:20:45 +0200 Subject: [PATCH] i18n need to be passed as props if we want to be able to ovewrite --- src/account/Fallback.tsx | 5 +++-- src/account/Template.tsx | 8 ++++---- src/account/TemplateProps.ts | 7 ++++--- src/account/i18n/i18n.tsx | 6 +++--- src/account/i18n/index.ts | 13 ++++--------- src/account/pages/Account.tsx | 10 +++++----- src/account/pages/Applications.tsx | 10 +++++----- src/account/pages/FederatedIdentity.tsx | 10 +++++----- src/account/pages/Log.tsx | 10 +++++----- src/account/pages/PageProps.ts | 8 ++++---- src/account/pages/Password.tsx | 9 +++++---- src/account/pages/Sessions.tsx | 10 +++++----- src/account/pages/Totp.tsx | 10 +++++----- src/login/Fallback.tsx | 5 +++-- src/login/Template.tsx | 7 ++++--- src/login/TemplateProps.ts | 7 +++---- src/login/UserProfileFormFields.tsx | 10 +++++----- src/login/i18n/i18n.tsx | 4 ++-- src/login/i18n/index.ts | 13 ++++--------- src/login/lib/useUserProfileForm.tsx | 14 ++++++++------ src/login/pages/Code.tsx | 9 +++++---- src/login/pages/DeleteAccountConfirm.tsx | 10 +++++----- src/login/pages/DeleteCredential.tsx | 9 +++++---- src/login/pages/Error.tsx | 17 ++++++++++++----- src/login/pages/FrontchannelLogout.tsx | 9 +++++---- src/login/pages/IdpReviewUserProfile.tsx | 10 ++++++---- src/login/pages/Info.tsx | 9 +++++---- src/login/pages/Login.tsx | 8 ++++---- src/login/pages/LoginConfigTotp.tsx | 10 ++++------ src/login/pages/LoginIdpLinkConfirm.tsx | 10 +++++----- src/login/pages/LoginIdpLinkEmail.tsx | 16 +++++++++++----- .../pages/LoginOauth2DeviceVerifyUserCode.tsx | 16 +++++++++++----- src/login/pages/LoginOauthGrant.tsx | 9 +++++---- src/login/pages/LoginOtp.tsx | 9 +++++---- src/login/pages/LoginPageExpired.tsx | 10 +++++----- src/login/pages/LoginPassword.tsx | 8 ++++---- .../pages/LoginRecoveryAuthnCodeConfig.tsx | 15 ++++++++++----- src/login/pages/LoginRecoveryAuthnCodeInput.tsx | 9 +++++---- src/login/pages/LoginResetOtp.tsx | 9 +++++---- src/login/pages/LoginResetPassword.tsx | 9 +++++---- src/login/pages/LoginUpdatePassword.tsx | 8 ++++---- src/login/pages/LoginUpdateProfile.tsx | 10 ++++++---- src/login/pages/LoginUsername.tsx | 9 +++++---- src/login/pages/LoginVerifyEmail.tsx | 9 +++++---- src/login/pages/LoginX509Info.tsx | 10 +++++----- src/login/pages/LogoutConfirm.tsx | 10 +++++----- src/login/pages/PageProps.ts | 8 ++++---- src/login/pages/Register.tsx | 17 ++++++++++++----- src/login/pages/SamlPostForm.tsx | 10 +++++----- src/login/pages/SelectAuthenticator.tsx | 9 +++++---- src/login/pages/Terms.tsx | 17 ++++++++++++----- src/login/pages/UpdateEmail.tsx | 9 +++++---- src/login/pages/WebauthnAuthenticate.tsx | 9 +++++---- src/login/pages/WebauthnError.tsx | 17 ++++++++++++----- src/login/pages/WebauthnRegister.tsx | 8 ++++---- stories/account/KcApp.tsx | 5 ++++- stories/login/KcApp.tsx | 4 ++++ 57 files changed, 310 insertions(+), 246 deletions(-) diff --git a/src/account/Fallback.tsx b/src/account/Fallback.tsx index ab93e0f6..308154a6 100644 --- a/src/account/Fallback.tsx +++ b/src/account/Fallback.tsx @@ -1,7 +1,8 @@ import { lazy, Suspense } from "react"; import { assert, type Equals } from "tsafe/assert"; import type { PageProps } from "keycloakify/account/pages/PageProps"; -import type { KcContext } from "./KcContext"; +import type { KcContext } from "keycloakify/account/KcContext"; +import { I18n } from "keycloakify/account/i18n"; const Password = lazy(() => import("keycloakify/account/pages/Password")); const Account = lazy(() => import("keycloakify/account/pages/Account")); @@ -11,7 +12,7 @@ const Applications = lazy(() => import("keycloakify/account/pages/Applications") const Log = lazy(() => import("keycloakify/account/pages/Log")); const FederatedIdentity = lazy(() => import("keycloakify/account/pages/FederatedIdentity")); -export default function Fallback(props: PageProps) { +export default function Fallback(props: PageProps) { const { kcContext, ...rest } = props; return ( diff --git a/src/account/Template.tsx b/src/account/Template.tsx index a6d12832..4b7acc24 100644 --- a/src/account/Template.tsx +++ b/src/account/Template.tsx @@ -5,15 +5,15 @@ import { getKcClsx } from "keycloakify/account/lib/kcClsx"; import { useInsertLinkTags } from "keycloakify/tools/useInsertLinkTags"; import { useSetClassName } from "keycloakify/tools/useSetClassName"; import type { TemplateProps } from "keycloakify/account/TemplateProps"; +import type { I18n } from "./i18n"; import type { KcContext } from "./KcContext"; -import { useI18n } from "./i18n"; -export default function Template(props: TemplateProps) { - const { kcContext, doUseDefaultCss, active, classes, children } = props; +export default function Template(props: TemplateProps) { + const { kcContext, i18n, doUseDefaultCss, active, classes, children } = props; const { kcClsx } = getKcClsx({ doUseDefaultCss, classes }); - const { msg, msgStr, getChangeLocalUrl, labelBySupportedLanguageTag, currentLanguageTag } = useI18n({ kcContext }); + const { msg, msgStr, getChangeLocalUrl, labelBySupportedLanguageTag, currentLanguageTag } = i18n; const { locale, url, features, realm, message, referrer } = kcContext; diff --git a/src/account/TemplateProps.ts b/src/account/TemplateProps.ts index 470f0a3a..0e5196d2 100644 --- a/src/account/TemplateProps.ts +++ b/src/account/TemplateProps.ts @@ -1,12 +1,13 @@ import type { ReactNode } from "react"; -import type { KcContext } from "./KcContext"; -export type TemplateProps = { +export type TemplateProps = { kcContext: KcContext; + i18n: I18n; doUseDefaultCss: boolean; - active: string; classes?: Partial>; children: ReactNode; + + active: string; }; export type ClassKey = diff --git a/src/account/i18n/i18n.tsx b/src/account/i18n/i18n.tsx index 759533b4..954c92dc 100644 --- a/src/account/i18n/i18n.tsx +++ b/src/account/i18n/i18n.tsx @@ -130,7 +130,7 @@ function createGetI18n(extraMessages: { extraMessages: extraMessages[partialI18n.currentLanguageTag] }); - const isCurrentLanguageFallbackLanguage = partialI18n.currentLanguageTag !== fallbackLanguageTag; + const isCurrentLanguageFallbackLanguage = partialI18n.currentLanguageTag === fallbackLanguageTag; const result: Result = { i18n: { @@ -175,7 +175,7 @@ export function createUseI18n(extraMessa const { getI18n } = createGetI18n(extraMessages); - function useI18n(params: { kcContext: KcContextLike }): I18n { + function useI18n(params: { kcContext: KcContextLike }): { i18n: I18n } { const { kcContext } = params; const { i18n, prI18n_currentLanguage } = getI18n({ kcContext }); @@ -198,7 +198,7 @@ export function createUseI18n(extraMessa }; }, []); - return i18n_toReturn; + return { i18n: i18n_toReturn }; } return { useI18n, ofTypeI18n: Reflect() }; diff --git a/src/account/i18n/index.ts b/src/account/i18n/index.ts index 4d326433..fe7f3152 100644 --- a/src/account/i18n/index.ts +++ b/src/account/i18n/index.ts @@ -1,10 +1,5 @@ -export type { MessageKey } from "./i18n"; -import { createUseI18n } from "./i18n"; -export { createUseI18n }; +import type { GenericI18n, MessageKey, KcContextLike } from "./i18n"; +export type { MessageKey, KcContextLike }; +export type I18n = GenericI18n; +export { createUseI18n } from "./i18n"; export { fallbackLanguageTag } from "./i18n"; - -const { useI18n, ofTypeI18n } = createUseI18n({}); - -export type I18n = typeof ofTypeI18n; - -export { useI18n }; diff --git a/src/account/pages/Account.tsx b/src/account/pages/Account.tsx index 2dc0a296..77b0724f 100644 --- a/src/account/pages/Account.tsx +++ b/src/account/pages/Account.tsx @@ -2,10 +2,10 @@ import { clsx } from "keycloakify/tools/clsx"; import type { PageProps } from "keycloakify/account/pages/PageProps"; import { getKcClsx } from "keycloakify/account/lib/kcClsx"; import type { KcContext } from "../KcContext"; -import { useI18n } from "../i18n"; +import type { I18n } from "../i18n"; -export default function Account(props: PageProps>) { - const { kcContext, doUseDefaultCss, Template } = props; +export default function Account(props: PageProps, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template } = props; const classes = { ...props.classes, @@ -19,10 +19,10 @@ export default function Account(props: PageProps +