From c9e546a8fd0b827b0378439d0b6844a462836d58 Mon Sep 17 00:00:00 2001 From: garronej Date: Tue, 21 Mar 2023 05:27:31 +0100 Subject: [PATCH] Fix numerous bugs, improve structure --- src/account/Template.tsx | 7 +- src/account/TemplateProps.ts | 4 +- src/account/kcContext/KcContext.ts | 10 +- src/account/kcContext/kcContextMocks.ts | 14 +- src/account/lib/useGetClassName.ts | 12 ++ src/account/pages/Account.tsx | 21 +-- src/account/pages/PageProps.ts | 12 +- src/account/pages/Password.tsx | 19 ++- src/lib/useGetClassName.ts | 21 +-- src/login/Template.tsx | 9 +- src/login/TemplateProps.ts | 82 +++++++---- src/login/lib/useGetClassName.ts | 100 +++++++++++++ src/login/pages/Error.tsx | 2 +- src/login/pages/IdpReviewUserProfile.tsx | 6 +- src/login/pages/Info.tsx | 2 +- src/login/pages/Login.tsx | 6 +- src/login/pages/LoginConfigTotp.tsx | 6 +- src/login/pages/LoginIdpLinkConfirm.tsx | 6 +- src/login/pages/LoginIdpLinkEmail.tsx | 2 +- src/login/pages/LoginOtp.tsx | 6 +- src/login/pages/LoginPageExpired.tsx | 2 +- src/login/pages/LoginPassword.tsx | 6 +- src/login/pages/LoginResetPassword.tsx | 6 +- src/login/pages/LoginUpdatePassword.tsx | 6 +- src/login/pages/LoginUpdateProfile.tsx | 6 +- src/login/pages/LoginUsername.tsx | 6 +- src/login/pages/LoginVerifyEmail.tsx | 2 +- src/login/pages/LogoutConfirm.tsx | 6 +- src/login/pages/PageProps.ts | 137 +----------------- src/login/pages/Register.tsx | 6 +- src/login/pages/RegisterUserProfile.tsx | 6 +- src/login/pages/Terms.tsx | 6 +- src/login/pages/UpdateUserProfile.tsx | 6 +- src/login/pages/WebauthnAuthenticate.tsx | 9 +- src/login/pages/shared/UserProfileCommons.tsx | 2 +- 35 files changed, 285 insertions(+), 274 deletions(-) create mode 100644 src/account/lib/useGetClassName.ts create mode 100644 src/login/lib/useGetClassName.ts diff --git a/src/account/Template.tsx b/src/account/Template.tsx index 4ec3f002..beb69689 100644 --- a/src/account/Template.tsx +++ b/src/account/Template.tsx @@ -1,12 +1,15 @@ import { clsx } from "keycloakify/tools/clsx"; import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate"; import { type TemplateProps } from "keycloakify/account/TemplateProps"; +import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; import type { KcContext } from "./kcContext"; import type { I18n } from "./i18n"; import { assert } from "keycloakify/tools/assert"; export default function Template(props: TemplateProps) { - const { kcContext, i18n, doUseDefaultCss, bodyClass, active, children } = props; + const { kcContext, i18n, doUseDefaultCss, active, classes, children } = props; + + const { getClassName } = useGetClassName({ doUseDefaultCss, classes }); const { msg, changeLocale, labelBySupportedLanguageTag, currentLanguageTag } = i18n; @@ -18,7 +21,7 @@ export default function Template(props: TemplateProps) { "stylesCommon": ["node_modules/patternfly/dist/css/patternfly.min.css", "node_modules/patternfly/dist/css/patternfly-additions.min.css"], "styles": ["css/account.css"], "htmlClassName": undefined, - "bodyClassName": clsx("admin-console", "user", bodyClass) + "bodyClassName": clsx("admin-console", "user", getClassName("kcBodyClass")) }); if (!isReady) { diff --git a/src/account/TemplateProps.ts b/src/account/TemplateProps.ts index 32d37f1e..86f108b5 100644 --- a/src/account/TemplateProps.ts +++ b/src/account/TemplateProps.ts @@ -7,6 +7,8 @@ export type TemplateProps>; children: ReactNode; }; + +export type ClassKey = "kcBodyClass" | "kcButtonClass" | "kcButtonPrimaryClass" | "kcButtonLargeClass" | "kcButtonDefaultClass"; diff --git a/src/account/kcContext/KcContext.ts b/src/account/kcContext/KcContext.ts index 507f5468..f722390e 100644 --- a/src/account/kcContext/KcContext.ts +++ b/src/account/kcContext/KcContext.ts @@ -51,6 +51,12 @@ export declare namespace KcContext { get: (fieldName: string) => string; exists: (fieldName: string) => boolean; }; + account: { + email?: string; + firstName: string; + lastName?: string; + username?: string; + }; }; export type Password = Common & { @@ -71,10 +77,6 @@ export declare namespace KcContext { editUsernameAllowed: boolean; }; stateChecker: string; - account: { - firstName: string; - lastName?: string; - }; }; } diff --git a/src/account/kcContext/kcContextMocks.ts b/src/account/kcContext/kcContextMocks.ts index 57a8cd03..7915006d 100644 --- a/src/account/kcContext/kcContextMocks.ts +++ b/src/account/kcContext/kcContextMocks.ts @@ -139,7 +139,13 @@ export const kcContextCommonMock: KcContext.Common = { "log": true, "passwordUpdateSupported": true }, - "referrer": undefined + "referrer": undefined, + "account": { + "firstName": "john", + "lastName": "doe", + "email": "john.doe@code.gouv.fr", + "username": "doe_j" + } }; export const kcContextMocks: KcContext[] = [ @@ -163,10 +169,6 @@ export const kcContextMocks: KcContext[] = [ "registrationEmailAsUsername": true, "editUsernameAllowed": true }, - "stateChecker": "", - "account": { - "firstName": "john", - "lastName": "doe" - } + "stateChecker": "" }) ]; diff --git a/src/account/lib/useGetClassName.ts b/src/account/lib/useGetClassName.ts new file mode 100644 index 00000000..0febe339 --- /dev/null +++ b/src/account/lib/useGetClassName.ts @@ -0,0 +1,12 @@ +import { createUseClassName } from "keycloakify/lib/useGetClassName"; +import type { ClassKey } from "keycloakify/account/TemplateProps"; + +export const { useGetClassName } = createUseClassName({ + "defaultClasses": { + "kcBodyClass": undefined, + "kcButtonClass": "btn", + "kcButtonPrimaryClass": "btn-primary", + "kcButtonLargeClass": "btn-lg", + "kcButtonDefaultClass": "btn-default" + } +}); diff --git a/src/account/pages/Account.tsx b/src/account/pages/Account.tsx index 43c018c5..89a10034 100644 --- a/src/account/pages/Account.tsx +++ b/src/account/pages/Account.tsx @@ -1,6 +1,6 @@ import { clsx } from "keycloakify/tools/clsx"; -import { type PageProps, defaultClasses } from "keycloakify/account/pages/PageProps"; -import { useGetClassName } from "keycloakify/lib/useGetClassName"; +import type { PageProps } from "keycloakify/account/pages/PageProps"; +import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; import type { KcContext } from "../kcContext"; import type { I18n } from "../i18n"; @@ -8,8 +8,11 @@ export default function LogoutConfirm(props: PageProps +