Fix numerous bugs, improve structure
This commit is contained in:
parent
6691992a79
commit
c9e546a8fd
@ -1,12 +1,15 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate";
|
import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate";
|
||||||
import { type TemplateProps } from "keycloakify/account/TemplateProps";
|
import { type TemplateProps } from "keycloakify/account/TemplateProps";
|
||||||
|
import { useGetClassName } from "keycloakify/account/lib/useGetClassName";
|
||||||
import type { KcContext } from "./kcContext";
|
import type { KcContext } from "./kcContext";
|
||||||
import type { I18n } from "./i18n";
|
import type { I18n } from "./i18n";
|
||||||
import { assert } from "keycloakify/tools/assert";
|
import { assert } from "keycloakify/tools/assert";
|
||||||
|
|
||||||
export default function Template(props: TemplateProps<KcContext, I18n>) {
|
export default function Template(props: TemplateProps<KcContext, I18n>) {
|
||||||
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;
|
const { msg, changeLocale, labelBySupportedLanguageTag, currentLanguageTag } = i18n;
|
||||||
|
|
||||||
@ -18,7 +21,7 @@ export default function Template(props: TemplateProps<KcContext, I18n>) {
|
|||||||
"stylesCommon": ["node_modules/patternfly/dist/css/patternfly.min.css", "node_modules/patternfly/dist/css/patternfly-additions.min.css"],
|
"stylesCommon": ["node_modules/patternfly/dist/css/patternfly.min.css", "node_modules/patternfly/dist/css/patternfly-additions.min.css"],
|
||||||
"styles": ["css/account.css"],
|
"styles": ["css/account.css"],
|
||||||
"htmlClassName": undefined,
|
"htmlClassName": undefined,
|
||||||
"bodyClassName": clsx("admin-console", "user", bodyClass)
|
"bodyClassName": clsx("admin-console", "user", getClassName("kcBodyClass"))
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!isReady) {
|
if (!isReady) {
|
||||||
|
@ -7,6 +7,8 @@ export type TemplateProps<KcContext extends KcContext.Common, I18nExtended exten
|
|||||||
i18n: I18nExtended;
|
i18n: I18nExtended;
|
||||||
doUseDefaultCss: boolean;
|
doUseDefaultCss: boolean;
|
||||||
active: string;
|
active: string;
|
||||||
bodyClass: string | undefined;
|
classes?: Partial<Record<ClassKey, string>>;
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type ClassKey = "kcBodyClass" | "kcButtonClass" | "kcButtonPrimaryClass" | "kcButtonLargeClass" | "kcButtonDefaultClass";
|
||||||
|
@ -51,6 +51,12 @@ export declare namespace KcContext {
|
|||||||
get: (fieldName: string) => string;
|
get: (fieldName: string) => string;
|
||||||
exists: (fieldName: string) => boolean;
|
exists: (fieldName: string) => boolean;
|
||||||
};
|
};
|
||||||
|
account: {
|
||||||
|
email?: string;
|
||||||
|
firstName: string;
|
||||||
|
lastName?: string;
|
||||||
|
username?: string;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Password = Common & {
|
export type Password = Common & {
|
||||||
@ -71,10 +77,6 @@ export declare namespace KcContext {
|
|||||||
editUsernameAllowed: boolean;
|
editUsernameAllowed: boolean;
|
||||||
};
|
};
|
||||||
stateChecker: string;
|
stateChecker: string;
|
||||||
account: {
|
|
||||||
firstName: string;
|
|
||||||
lastName?: string;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,13 @@ export const kcContextCommonMock: KcContext.Common = {
|
|||||||
"log": true,
|
"log": true,
|
||||||
"passwordUpdateSupported": 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[] = [
|
export const kcContextMocks: KcContext[] = [
|
||||||
@ -163,10 +169,6 @@ export const kcContextMocks: KcContext[] = [
|
|||||||
"registrationEmailAsUsername": true,
|
"registrationEmailAsUsername": true,
|
||||||
"editUsernameAllowed": true
|
"editUsernameAllowed": true
|
||||||
},
|
},
|
||||||
"stateChecker": "",
|
"stateChecker": ""
|
||||||
"account": {
|
|
||||||
"firstName": "john",
|
|
||||||
"lastName": "doe"
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
12
src/account/lib/useGetClassName.ts
Normal file
12
src/account/lib/useGetClassName.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import { createUseClassName } from "keycloakify/lib/useGetClassName";
|
||||||
|
import type { ClassKey } from "keycloakify/account/TemplateProps";
|
||||||
|
|
||||||
|
export const { useGetClassName } = createUseClassName<ClassKey>({
|
||||||
|
"defaultClasses": {
|
||||||
|
"kcBodyClass": undefined,
|
||||||
|
"kcButtonClass": "btn",
|
||||||
|
"kcButtonPrimaryClass": "btn-primary",
|
||||||
|
"kcButtonLargeClass": "btn-lg",
|
||||||
|
"kcButtonDefaultClass": "btn-default"
|
||||||
|
}
|
||||||
|
});
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/account/pages/PageProps";
|
import type { PageProps } from "keycloakify/account/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/account/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,8 +8,11 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
"classes": {
|
||||||
|
...classes,
|
||||||
|
"kcBodyClass": clsx(classes?.kcBodyClass, "user")
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { url, realm, messagesPerField, stateChecker, account } = kcContext;
|
const { url, realm, messagesPerField, stateChecker, account } = kcContext;
|
||||||
@ -17,7 +20,7 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
const { msg } = i18n;
|
const { msg } = i18n;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Template {...{ kcContext, i18n, doUseDefaultCss, classes }} active="account" bodyClass="user">
|
<Template {...{ kcContext, i18n, doUseDefaultCss, classes }} active="account">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-md-10">
|
<div className="col-md-10">
|
||||||
<h2>{msg("editAccountHtmlTitle")}</h2>
|
<h2>{msg("editAccountHtmlTitle")}</h2>
|
||||||
@ -33,7 +36,7 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
<input type="hidden" id="stateChecker" name="stateChecker" value={stateChecker} />
|
<input type="hidden" id="stateChecker" name="stateChecker" value={stateChecker} />
|
||||||
|
|
||||||
{!realm.registrationEmailAsUsername && (
|
{!realm.registrationEmailAsUsername && (
|
||||||
<div className="form-group ${messagesPerField.printIfExists('username','has-error')}">
|
<div className={clsx("form-group", messagesPerField.printIfExists("username", "has-error"))}>
|
||||||
<div className="col-sm-2 col-md-2">
|
<div className="col-sm-2 col-md-2">
|
||||||
<label htmlFor="username" className="control-label">
|
<label htmlFor="username" className="control-label">
|
||||||
{msg("username")}
|
{msg("username")}
|
||||||
@ -48,7 +51,7 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
id="username"
|
id="username"
|
||||||
name="username"
|
name="username"
|
||||||
disabled={!realm.editUsernameAllowed}
|
disabled={!realm.editUsernameAllowed}
|
||||||
value="${(account.username!'')}"
|
value={account.username ?? ""}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -63,7 +66,7 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="col-sm-10 col-md-10">
|
<div className="col-sm-10 col-md-10">
|
||||||
<input type="text" className="form-control" id="email" name="email" autoFocus value="${(account.email!'')}" />
|
<input type="text" className="form-control" id="email" name="email" autoFocus value={account.email ?? ""} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -89,7 +92,7 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="col-sm-10 col-md-10">
|
<div className="col-sm-10 col-md-10">
|
||||||
<input type="text" className="form-control" id="lastName" name="lastName" value={account.lastName || ""} />
|
<input type="text" className="form-control" id="lastName" name="lastName" value={account.lastName ?? ""} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import type { LazyExoticComponent } from "react";
|
import type { LazyExoticComponent } from "react";
|
||||||
import type { I18n } from "keycloakify/account/i18n";
|
import type { I18n } from "keycloakify/account/i18n";
|
||||||
import { type TemplateProps } from "keycloakify/account/TemplateProps";
|
import type { TemplateProps, ClassKey } from "keycloakify/account/TemplateProps";
|
||||||
|
|
||||||
export type PageProps<KcContext, I18nExtended extends I18n> = {
|
export type PageProps<KcContext, I18nExtended extends I18n> = {
|
||||||
Template: LazyExoticComponent<(props: TemplateProps<any, any>) => JSX.Element | null>;
|
Template: LazyExoticComponent<(props: TemplateProps<any, any>) => JSX.Element | null>;
|
||||||
@ -9,13 +9,3 @@ export type PageProps<KcContext, I18nExtended extends I18n> = {
|
|||||||
doUseDefaultCss: boolean;
|
doUseDefaultCss: boolean;
|
||||||
classes?: Partial<Record<ClassKey, string>>;
|
classes?: Partial<Record<ClassKey, string>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ClassKey = "kcButtonClass" | "kcButtonPrimaryClass" | "kcButtonLargeClass" | "kcButtonDefaultClass";
|
|
||||||
|
|
||||||
export const defaultClasses: Record<ClassKey, string | undefined> = {
|
|
||||||
/** password.ftl */
|
|
||||||
"kcButtonClass": "btn",
|
|
||||||
"kcButtonPrimaryClass": "btn-primary",
|
|
||||||
"kcButtonLargeClass": "btn-lg",
|
|
||||||
"kcButtonDefaultClass": "btn-default"
|
|
||||||
};
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/account/pages/PageProps";
|
import type { PageProps } from "keycloakify/account/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/account/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,16 +8,19 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
"classes": {
|
||||||
|
...classes,
|
||||||
|
"kcBodyClass": clsx(classes?.kcBodyClass, "password")
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { password } = kcContext;
|
const { url, password, account } = kcContext;
|
||||||
|
|
||||||
const { msg } = i18n;
|
const { msg } = i18n;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Template {...{ kcContext, i18n, doUseDefaultCss, classes }} active="password" bodyClass="password">
|
<Template {...{ kcContext, i18n, doUseDefaultCss, classes }} active="password">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-md-10">
|
<div className="col-md-10">
|
||||||
<h2>{msg("changePasswordHtmlTitle")}</h2>
|
<h2>{msg("changePasswordHtmlTitle")}</h2>
|
||||||
@ -27,12 +30,12 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form action="${url.passwordUrl}" className="form-horizontal" method="post">
|
<form action={url.passwordUrl} className="form-horizontal" method="post">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
id="username"
|
id="username"
|
||||||
name="username"
|
name="username"
|
||||||
value="${(account.username!'')}"
|
value={account.username ?? ""}
|
||||||
autoComplete="username"
|
autoComplete="username"
|
||||||
readOnly
|
readOnly
|
||||||
style={{ "display": "none;" }}
|
style={{ "display": "none;" }}
|
||||||
|
@ -1,15 +1,18 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
||||||
|
|
||||||
export function useGetClassName<ClassKey extends string>(params: {
|
export function createUseClassName<ClassKey extends string>(params: { defaultClasses: Record<ClassKey, string | undefined> }) {
|
||||||
defaultClasses?: Record<ClassKey, string | undefined>;
|
const { defaultClasses } = params;
|
||||||
classes?: Partial<Record<ClassKey, string>>;
|
|
||||||
}) {
|
|
||||||
const { defaultClasses, classes } = params;
|
|
||||||
|
|
||||||
const getClassName = useConstCallback((classKey: ClassKey): string => {
|
function useGetClassName(params: { doUseDefaultCss: boolean; classes: Partial<Record<ClassKey, string>> | undefined }) {
|
||||||
return clsx(classKey, defaultClasses?.[classKey], classes?.[classKey]);
|
const { classes } = params;
|
||||||
});
|
|
||||||
|
|
||||||
return { getClassName };
|
const getClassName = useConstCallback((classKey: ClassKey): string => {
|
||||||
|
return clsx(classKey, defaultClasses[classKey], classes?.[classKey]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return { getClassName };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { useGetClassName };
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { assert } from "keycloakify/tools/assert";
|
import { assert } from "keycloakify/tools/assert";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate";
|
import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate";
|
||||||
import { type TemplateProps, defaultTemplateClasses } from "keycloakify/login/TemplateProps";
|
import { type TemplateProps } from "keycloakify/login/TemplateProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "./kcContext";
|
import type { KcContext } from "./kcContext";
|
||||||
import type { I18n } from "./i18n";
|
import type { I18n } from "./i18n";
|
||||||
|
|
||||||
@ -23,10 +23,7 @@ export default function Template(props: TemplateProps<KcContext, I18n>) {
|
|||||||
children
|
children
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({ doUseDefaultCss, classes });
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultTemplateClasses,
|
|
||||||
classes
|
|
||||||
});
|
|
||||||
|
|
||||||
const { msg, changeLocale, labelBySupportedLanguageTag, currentLanguageTag } = i18n;
|
const { msg, changeLocale, labelBySupportedLanguageTag, currentLanguageTag } = i18n;
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ export type TemplateProps<KcContext extends KcContext.Common, I18nExtended exten
|
|||||||
kcContext: KcContext;
|
kcContext: KcContext;
|
||||||
i18n: I18nExtended;
|
i18n: I18nExtended;
|
||||||
doUseDefaultCss: boolean;
|
doUseDefaultCss: boolean;
|
||||||
classes?: Partial<Record<TemplateClassKey, string>>;
|
classes?: Partial<Record<ClassKey, string>>;
|
||||||
|
|
||||||
displayInfo?: boolean;
|
displayInfo?: boolean;
|
||||||
displayMessage?: boolean;
|
displayMessage?: boolean;
|
||||||
@ -20,7 +20,7 @@ export type TemplateProps<KcContext extends KcContext.Common, I18nExtended exten
|
|||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type TemplateClassKey =
|
export type ClassKey =
|
||||||
| "kcHtmlClass"
|
| "kcHtmlClass"
|
||||||
| "kcLoginClass"
|
| "kcLoginClass"
|
||||||
| "kcHeaderClass"
|
| "kcHeaderClass"
|
||||||
@ -40,27 +40,57 @@ export type TemplateClassKey =
|
|||||||
| "kcFormSocialAccountContentClass"
|
| "kcFormSocialAccountContentClass"
|
||||||
| "kcFormSocialAccountClass"
|
| "kcFormSocialAccountClass"
|
||||||
| "kcSignUpClass"
|
| "kcSignUpClass"
|
||||||
| "kcInfoAreaWrapperClass";
|
| "kcInfoAreaWrapperClass"
|
||||||
|
| "kcLogoClass"
|
||||||
export const defaultTemplateClasses: Record<TemplateClassKey, string | undefined> = {
|
| "kcContainerClass"
|
||||||
"kcHtmlClass": "login-pf",
|
| "kcContentClass"
|
||||||
"kcLoginClass": "login-pf-page",
|
| "kcFeedbackAreaClass"
|
||||||
"kcContentWrapperClass": "row",
|
| "kcLocaleClass"
|
||||||
"kcHeaderClass": "login-pf-page-header",
|
| "kcAlertIconClasserror"
|
||||||
"kcHeaderWrapperClass": undefined,
|
| "kcFormAreaClass"
|
||||||
"kcFormCardClass": "card-pf",
|
| "kcFormSocialAccountListClass"
|
||||||
"kcFormCardAccountClass": "login-pf-accounts",
|
| "kcFormSocialAccountDoubleListClass"
|
||||||
"kcFormSocialAccountClass": "login-pf-social-section",
|
| "kcFormSocialAccountListLinkClass"
|
||||||
"kcFormSocialAccountContentClass": "col-xs-12 col-sm-6",
|
| "kcWebAuthnKeyIcon"
|
||||||
"kcFormHeaderClass": "login-pf-header",
|
| "kcWebAuthnDefaultIcon"
|
||||||
"kcLocaleWrapperClass": undefined,
|
| "kcFormClass"
|
||||||
"kcFeedbackErrorIcon": "pficon pficon-error-circle-o",
|
| "kcFormGroupErrorClass"
|
||||||
"kcFeedbackWarningIcon": "pficon pficon-warning-triangle-o",
|
| "kcLabelClass"
|
||||||
"kcFeedbackSuccessIcon": "pficon pficon-ok",
|
| "kcInputClass"
|
||||||
"kcFeedbackInfoIcon": "pficon pficon-info",
|
| "kcInputErrorMessageClass"
|
||||||
"kcResetFlowIcon": "pficon pficon-arrow fa-2x",
|
| "kcInputWrapperClass"
|
||||||
"kcFormGroupClass": "form-group",
|
| "kcFormOptionsClass"
|
||||||
"kcLabelWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
| "kcFormButtonsClass"
|
||||||
"kcSignUpClass": "login-pf-signup",
|
| "kcFormSettingClass"
|
||||||
"kcInfoAreaWrapperClass": undefined
|
| "kcTextareaClass"
|
||||||
};
|
| "kcInfoAreaClass"
|
||||||
|
| "kcFormGroupHeader"
|
||||||
|
| "kcButtonClass"
|
||||||
|
| "kcButtonPrimaryClass"
|
||||||
|
| "kcButtonDefaultClass"
|
||||||
|
| "kcButtonLargeClass"
|
||||||
|
| "kcButtonBlockClass"
|
||||||
|
| "kcInputLargeClass"
|
||||||
|
| "kcSrOnlyClass"
|
||||||
|
| "kcSelectAuthListClass"
|
||||||
|
| "kcSelectAuthListItemClass"
|
||||||
|
| "kcSelectAuthListItemFillClass"
|
||||||
|
| "kcSelectAuthListItemInfoClass"
|
||||||
|
| "kcSelectAuthListItemLeftClass"
|
||||||
|
| "kcSelectAuthListItemBodyClass"
|
||||||
|
| "kcSelectAuthListItemDescriptionClass"
|
||||||
|
| "kcSelectAuthListItemHeadingClass"
|
||||||
|
| "kcSelectAuthListItemHelpTextClass"
|
||||||
|
| "kcSelectAuthListItemIconPropertyClass"
|
||||||
|
| "kcSelectAuthListItemIconClass"
|
||||||
|
| "kcSelectAuthListItemTitle"
|
||||||
|
| "kcAuthenticatorDefaultClass"
|
||||||
|
| "kcAuthenticatorPasswordClass"
|
||||||
|
| "kcAuthenticatorOTPClass"
|
||||||
|
| "kcAuthenticatorWebAuthnClass"
|
||||||
|
| "kcAuthenticatorWebAuthnPasswordlessClass"
|
||||||
|
| "kcSelectOTPListClass"
|
||||||
|
| "kcSelectOTPListItemClass"
|
||||||
|
| "kcAuthenticatorOtpCircleClass"
|
||||||
|
| "kcSelectOTPItemHeadingClass"
|
||||||
|
| "kcFormOptionsWrapperClass";
|
||||||
|
100
src/login/lib/useGetClassName.ts
Normal file
100
src/login/lib/useGetClassName.ts
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
import { createUseClassName } from "keycloakify/lib/useGetClassName";
|
||||||
|
import type { ClassKey } from "keycloakify/login/TemplateProps";
|
||||||
|
|
||||||
|
export const { useGetClassName } = createUseClassName<ClassKey>({
|
||||||
|
"defaultClasses": {
|
||||||
|
"kcHtmlClass": "login-pf",
|
||||||
|
"kcLoginClass": "login-pf-page",
|
||||||
|
"kcContentWrapperClass": "row",
|
||||||
|
"kcHeaderClass": "login-pf-page-header",
|
||||||
|
"kcHeaderWrapperClass": undefined,
|
||||||
|
"kcFormCardClass": "card-pf",
|
||||||
|
"kcFormCardAccountClass": "login-pf-accounts",
|
||||||
|
"kcFormSocialAccountClass": "login-pf-social-section",
|
||||||
|
"kcFormSocialAccountContentClass": "col-xs-12 col-sm-6",
|
||||||
|
"kcFormHeaderClass": "login-pf-header",
|
||||||
|
"kcLocaleWrapperClass": undefined,
|
||||||
|
"kcFeedbackErrorIcon": "pficon pficon-error-circle-o",
|
||||||
|
"kcFeedbackWarningIcon": "pficon pficon-warning-triangle-o",
|
||||||
|
"kcFeedbackSuccessIcon": "pficon pficon-ok",
|
||||||
|
"kcFeedbackInfoIcon": "pficon pficon-info",
|
||||||
|
"kcResetFlowIcon": "pficon pficon-arrow fa-2x",
|
||||||
|
"kcFormGroupClass": "form-group",
|
||||||
|
"kcLabelWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
||||||
|
"kcSignUpClass": "login-pf-signup",
|
||||||
|
"kcInfoAreaWrapperClass": undefined,
|
||||||
|
|
||||||
|
"kcLogoClass": "login-pf-brand",
|
||||||
|
"kcContainerClass": "container-fluid",
|
||||||
|
"kcContentClass": "col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",
|
||||||
|
"kcFeedbackAreaClass": "col-md-12",
|
||||||
|
"kcLocaleClass": "col-xs-12 col-sm-1",
|
||||||
|
"kcAlertIconClasserror": "pficon pficon-error-circle-o",
|
||||||
|
|
||||||
|
"kcFormAreaClass": "col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",
|
||||||
|
"kcFormSocialAccountListClass": "login-pf-social list-unstyled login-pf-social-all",
|
||||||
|
"kcFormSocialAccountDoubleListClass": "login-pf-social-double-col",
|
||||||
|
"kcFormSocialAccountListLinkClass": "login-pf-social-link",
|
||||||
|
"kcWebAuthnKeyIcon": "pficon pficon-key",
|
||||||
|
"kcWebAuthnDefaultIcon": "pficon pficon-key",
|
||||||
|
|
||||||
|
"kcFormClass": "form-horizontal",
|
||||||
|
"kcFormGroupErrorClass": "has-error",
|
||||||
|
"kcLabelClass": "control-label",
|
||||||
|
"kcInputClass": "form-control",
|
||||||
|
"kcInputErrorMessageClass": "pf-c-form__helper-text pf-m-error required kc-feedback-text",
|
||||||
|
"kcInputWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
||||||
|
"kcFormOptionsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
||||||
|
"kcFormButtonsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
||||||
|
"kcFormSettingClass": "login-pf-settings",
|
||||||
|
"kcTextareaClass": "form-control",
|
||||||
|
|
||||||
|
"kcInfoAreaClass": "col-xs-12 col-sm-4 col-md-4 col-lg-5 details",
|
||||||
|
|
||||||
|
// user-profile grouping
|
||||||
|
"kcFormGroupHeader": "pf-c-form__group",
|
||||||
|
|
||||||
|
// css classes for form buttons main class used for all buttons
|
||||||
|
"kcButtonClass": "btn",
|
||||||
|
// classes defining priority of the button - primary or default (there is typically only one priority button for the form)
|
||||||
|
"kcButtonPrimaryClass": "btn-primary",
|
||||||
|
"kcButtonDefaultClass": "btn-default",
|
||||||
|
// classes defining size of the button
|
||||||
|
"kcButtonLargeClass": "btn-lg",
|
||||||
|
"kcButtonBlockClass": "btn-block",
|
||||||
|
|
||||||
|
// css classes for input
|
||||||
|
"kcInputLargeClass": "input-lg",
|
||||||
|
|
||||||
|
// css classes for form accessability
|
||||||
|
"kcSrOnlyClass": "sr-only",
|
||||||
|
|
||||||
|
// css classes for select-authenticator form
|
||||||
|
"kcSelectAuthListClass": "list-group list-view-pf",
|
||||||
|
"kcSelectAuthListItemClass": "list-group-item list-view-pf-stacked",
|
||||||
|
"kcSelectAuthListItemFillClass": "pf-l-split__item pf-m-fill",
|
||||||
|
"kcSelectAuthListItemIconPropertyClass": "fa-2x select-auth-box-icon-properties",
|
||||||
|
"kcSelectAuthListItemIconClass": "pf-l-split__item select-auth-box-icon",
|
||||||
|
"kcSelectAuthListItemTitle": "select-auth-box-paragraph",
|
||||||
|
"kcSelectAuthListItemInfoClass": "list-view-pf-main-info",
|
||||||
|
"kcSelectAuthListItemLeftClass": "list-view-pf-left",
|
||||||
|
"kcSelectAuthListItemBodyClass": "list-view-pf-body",
|
||||||
|
"kcSelectAuthListItemDescriptionClass": "list-view-pf-description",
|
||||||
|
"kcSelectAuthListItemHeadingClass": "list-group-item-heading",
|
||||||
|
"kcSelectAuthListItemHelpTextClass": "list-group-item-text",
|
||||||
|
|
||||||
|
// css classes for the authenticators
|
||||||
|
"kcAuthenticatorDefaultClass": "fa list-view-pf-icon-lg",
|
||||||
|
"kcAuthenticatorPasswordClass": "fa fa-unlock list-view-pf-icon-lg",
|
||||||
|
"kcAuthenticatorOTPClass": "fa fa-mobile list-view-pf-icon-lg",
|
||||||
|
"kcAuthenticatorWebAuthnClass": "fa fa-key list-view-pf-icon-lg",
|
||||||
|
"kcAuthenticatorWebAuthnPasswordlessClass": "fa fa-key list-view-pf-icon-lg",
|
||||||
|
|
||||||
|
//css classes for the OTP Login Form
|
||||||
|
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select",
|
||||||
|
"kcSelectOTPListItemClass": "card-pf-body card-pf-top-element",
|
||||||
|
"kcAuthenticatorOtpCircleClass": "fa fa-mobile card-pf-icon-circle",
|
||||||
|
"kcSelectOTPItemHeadingClass": "card-pf-title text-center",
|
||||||
|
"kcFormOptionsWrapperClass": undefined
|
||||||
|
}
|
||||||
|
});
|
@ -1,4 +1,4 @@
|
|||||||
import { type PageProps } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { UserProfileFormFields } from "keycloakify/login/pages/shared/UserProfileCommons";
|
import { UserProfileFormFields } from "keycloakify/login/pages/shared/UserProfileCommons";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ export default function IdpReviewUserProfile(props: PageProps<Extract<KcContext,
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { assert } from "keycloakify/tools/assert";
|
import { assert } from "keycloakify/tools/assert";
|
||||||
import { type PageProps } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { useState, type FormEventHandler } from "react";
|
import { useState, type FormEventHandler } from "react";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ export default function Login(props: PageProps<Extract<KcContext, { pageId: "log
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ export default function LoginConfigTotp(props: PageProps<Extract<KcContext, { pa
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ export default function LoginIdpLinkConfirm(props: PageProps<Extract<KcContext,
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import type { KcContext } from "keycloakify/login/kcContext";
|
import type { KcContext } from "keycloakify/login/kcContext";
|
||||||
import { type PageProps } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import type { I18n } from "keycloakify/login/i18n";
|
import type { I18n } from "keycloakify/login/i18n";
|
||||||
|
|
||||||
export default function LoginIdpLinkEmail(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-email.ftl" }>, I18n>) {
|
export default function LoginIdpLinkEmail(props: PageProps<Extract<KcContext, { pageId: "login-idp-link-email.ftl" }>, I18n>) {
|
||||||
|
@ -2,8 +2,8 @@ import { useEffect } from "react";
|
|||||||
import { headInsert } from "keycloakify/tools/headInsert";
|
import { headInsert } from "keycloakify/tools/headInsert";
|
||||||
import { pathJoin } from "keycloakify/bin/tools/pathJoin";
|
import { pathJoin } from "keycloakify/bin/tools/pathJoin";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ export default function LoginOtp(props: PageProps<Extract<KcContext, { pageId: "
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { type PageProps } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ import { useState } from "react";
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
||||||
import type { FormEventHandler } from "react";
|
import type { FormEventHandler } from "react";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ export default function LoginPassword(props: PageProps<Extract<KcContext, { "pag
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ export default function LoginResetPassword(props: PageProps<Extract<KcContext, {
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ export default function LoginUpdatePassword(props: PageProps<Extract<KcContext,
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ export default function LoginUpdateProfile(props: PageProps<Extract<KcContext, {
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ import type { FormEventHandler } from "react";
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ export default function LoginUsername(props: PageProps<Extract<KcContext, { page
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { type PageProps } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ export default function LogoutConfirm(props: PageProps<Extract<KcContext, { page
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,144 +1,11 @@
|
|||||||
import type { LazyExoticComponent } from "react";
|
import type { LazyExoticComponent } from "react";
|
||||||
import type { I18n } from "keycloakify/login/i18n";
|
import type { I18n } from "keycloakify/login/i18n";
|
||||||
import { type TemplateProps, type TemplateClassKey, defaultTemplateClasses } from "keycloakify/login/TemplateProps";
|
import { type TemplateProps, type ClassKey } from "keycloakify/login/TemplateProps";
|
||||||
|
|
||||||
export type PageProps<KcContext, I18nExtended extends I18n> = {
|
export type PageProps<KcContext, I18nExtended extends I18n> = {
|
||||||
Template: LazyExoticComponent<(props: TemplateProps<any, any>) => JSX.Element | null>;
|
Template: LazyExoticComponent<(props: TemplateProps<any, any>) => JSX.Element | null>;
|
||||||
kcContext: KcContext;
|
kcContext: KcContext;
|
||||||
i18n: I18nExtended;
|
i18n: I18nExtended;
|
||||||
doUseDefaultCss: boolean;
|
doUseDefaultCss: boolean;
|
||||||
classes?: Partial<Record<TemplateClassKey | ClassKey, string>>;
|
classes?: Partial<Record<ClassKey, string>>;
|
||||||
};
|
|
||||||
|
|
||||||
export type ClassKey =
|
|
||||||
| TemplateClassKey
|
|
||||||
| "kcLogoClass"
|
|
||||||
| "kcContainerClass"
|
|
||||||
| "kcContentClass"
|
|
||||||
| "kcFeedbackAreaClass"
|
|
||||||
| "kcLocaleClass"
|
|
||||||
| "kcAlertIconClasserror"
|
|
||||||
| "kcFormAreaClass"
|
|
||||||
| "kcFormSocialAccountListClass"
|
|
||||||
| "kcFormSocialAccountDoubleListClass"
|
|
||||||
| "kcFormSocialAccountListLinkClass"
|
|
||||||
| "kcWebAuthnKeyIcon"
|
|
||||||
| "kcWebAuthnDefaultIcon"
|
|
||||||
| "kcFormClass"
|
|
||||||
| "kcFormGroupErrorClass"
|
|
||||||
| "kcLabelClass"
|
|
||||||
| "kcInputClass"
|
|
||||||
| "kcInputErrorMessageClass"
|
|
||||||
| "kcInputWrapperClass"
|
|
||||||
| "kcFormOptionsClass"
|
|
||||||
| "kcFormButtonsClass"
|
|
||||||
| "kcFormSettingClass"
|
|
||||||
| "kcTextareaClass"
|
|
||||||
| "kcInfoAreaClass"
|
|
||||||
| "kcFormGroupHeader"
|
|
||||||
| "kcButtonClass"
|
|
||||||
| "kcButtonPrimaryClass"
|
|
||||||
| "kcButtonDefaultClass"
|
|
||||||
| "kcButtonLargeClass"
|
|
||||||
| "kcButtonBlockClass"
|
|
||||||
| "kcInputLargeClass"
|
|
||||||
| "kcSrOnlyClass"
|
|
||||||
| "kcSelectAuthListClass"
|
|
||||||
| "kcSelectAuthListItemClass"
|
|
||||||
| "kcSelectAuthListItemFillClass"
|
|
||||||
| "kcSelectAuthListItemInfoClass"
|
|
||||||
| "kcSelectAuthListItemLeftClass"
|
|
||||||
| "kcSelectAuthListItemBodyClass"
|
|
||||||
| "kcSelectAuthListItemDescriptionClass"
|
|
||||||
| "kcSelectAuthListItemHeadingClass"
|
|
||||||
| "kcSelectAuthListItemHelpTextClass"
|
|
||||||
| "kcSelectAuthListItemIconPropertyClass"
|
|
||||||
| "kcSelectAuthListItemIconClass"
|
|
||||||
| "kcSelectAuthListItemTitle"
|
|
||||||
| "kcAuthenticatorDefaultClass"
|
|
||||||
| "kcAuthenticatorPasswordClass"
|
|
||||||
| "kcAuthenticatorOTPClass"
|
|
||||||
| "kcAuthenticatorWebAuthnClass"
|
|
||||||
| "kcAuthenticatorWebAuthnPasswordlessClass"
|
|
||||||
| "kcSelectOTPListClass"
|
|
||||||
| "kcSelectOTPListItemClass"
|
|
||||||
| "kcAuthenticatorOtpCircleClass"
|
|
||||||
| "kcSelectOTPItemHeadingClass"
|
|
||||||
| "kcFormOptionsWrapperClass";
|
|
||||||
|
|
||||||
export const defaultClasses: Record<ClassKey, string | undefined> = {
|
|
||||||
...defaultTemplateClasses,
|
|
||||||
|
|
||||||
"kcLogoClass": "login-pf-brand",
|
|
||||||
"kcContainerClass": "container-fluid",
|
|
||||||
"kcContentClass": "col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",
|
|
||||||
"kcFeedbackAreaClass": "col-md-12",
|
|
||||||
"kcLocaleClass": "col-xs-12 col-sm-1",
|
|
||||||
"kcAlertIconClasserror": "pficon pficon-error-circle-o",
|
|
||||||
|
|
||||||
"kcFormAreaClass": "col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",
|
|
||||||
"kcFormSocialAccountListClass": "login-pf-social list-unstyled login-pf-social-all",
|
|
||||||
"kcFormSocialAccountDoubleListClass": "login-pf-social-double-col",
|
|
||||||
"kcFormSocialAccountListLinkClass": "login-pf-social-link",
|
|
||||||
"kcWebAuthnKeyIcon": "pficon pficon-key",
|
|
||||||
"kcWebAuthnDefaultIcon": "pficon pficon-key",
|
|
||||||
|
|
||||||
"kcFormClass": "form-horizontal",
|
|
||||||
"kcFormGroupErrorClass": "has-error",
|
|
||||||
"kcLabelClass": "control-label",
|
|
||||||
"kcInputClass": "form-control",
|
|
||||||
"kcInputErrorMessageClass": "pf-c-form__helper-text pf-m-error required kc-feedback-text",
|
|
||||||
"kcInputWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
|
||||||
"kcFormOptionsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
|
||||||
"kcFormButtonsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
|
|
||||||
"kcFormSettingClass": "login-pf-settings",
|
|
||||||
"kcTextareaClass": "form-control",
|
|
||||||
|
|
||||||
"kcInfoAreaClass": "col-xs-12 col-sm-4 col-md-4 col-lg-5 details",
|
|
||||||
|
|
||||||
// user-profile grouping
|
|
||||||
"kcFormGroupHeader": "pf-c-form__group",
|
|
||||||
|
|
||||||
// css classes for form buttons main class used for all buttons
|
|
||||||
"kcButtonClass": "btn",
|
|
||||||
// classes defining priority of the button - primary or default (there is typically only one priority button for the form)
|
|
||||||
"kcButtonPrimaryClass": "btn-primary",
|
|
||||||
"kcButtonDefaultClass": "btn-default",
|
|
||||||
// classes defining size of the button
|
|
||||||
"kcButtonLargeClass": "btn-lg",
|
|
||||||
"kcButtonBlockClass": "btn-block",
|
|
||||||
|
|
||||||
// css classes for input
|
|
||||||
"kcInputLargeClass": "input-lg",
|
|
||||||
|
|
||||||
// css classes for form accessability
|
|
||||||
"kcSrOnlyClass": "sr-only",
|
|
||||||
|
|
||||||
// css classes for select-authenticator form
|
|
||||||
"kcSelectAuthListClass": "list-group list-view-pf",
|
|
||||||
"kcSelectAuthListItemClass": "list-group-item list-view-pf-stacked",
|
|
||||||
"kcSelectAuthListItemFillClass": "pf-l-split__item pf-m-fill",
|
|
||||||
"kcSelectAuthListItemIconPropertyClass": "fa-2x select-auth-box-icon-properties",
|
|
||||||
"kcSelectAuthListItemIconClass": "pf-l-split__item select-auth-box-icon",
|
|
||||||
"kcSelectAuthListItemTitle": "select-auth-box-paragraph",
|
|
||||||
"kcSelectAuthListItemInfoClass": "list-view-pf-main-info",
|
|
||||||
"kcSelectAuthListItemLeftClass": "list-view-pf-left",
|
|
||||||
"kcSelectAuthListItemBodyClass": "list-view-pf-body",
|
|
||||||
"kcSelectAuthListItemDescriptionClass": "list-view-pf-description",
|
|
||||||
"kcSelectAuthListItemHeadingClass": "list-group-item-heading",
|
|
||||||
"kcSelectAuthListItemHelpTextClass": "list-group-item-text",
|
|
||||||
|
|
||||||
// css classes for the authenticators
|
|
||||||
"kcAuthenticatorDefaultClass": "fa list-view-pf-icon-lg",
|
|
||||||
"kcAuthenticatorPasswordClass": "fa fa-unlock list-view-pf-icon-lg",
|
|
||||||
"kcAuthenticatorOTPClass": "fa fa-mobile list-view-pf-icon-lg",
|
|
||||||
"kcAuthenticatorWebAuthnClass": "fa fa-key list-view-pf-icon-lg",
|
|
||||||
"kcAuthenticatorWebAuthnPasswordlessClass": "fa fa-key list-view-pf-icon-lg",
|
|
||||||
|
|
||||||
//css classes for the OTP Login Form
|
|
||||||
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select",
|
|
||||||
"kcSelectOTPListItemClass": "card-pf-body card-pf-top-element",
|
|
||||||
"kcAuthenticatorOtpCircleClass": "fa fa-mobile card-pf-icon-circle",
|
|
||||||
"kcSelectOTPItemHeadingClass": "card-pf-title text-center",
|
|
||||||
"kcFormOptionsWrapperClass": undefined
|
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ export default function Register(props: PageProps<Extract<KcContext, { pageId: "
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { UserProfileFormFields } from "./shared/UserProfileCommons";
|
import { UserProfileFormFields } from "./shared/UserProfileCommons";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ export default function RegisterUserProfile(props: PageProps<Extract<KcContext,
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { useRerenderOnStateChange } from "evt/hooks";
|
import { useRerenderOnStateChange } from "evt/hooks";
|
||||||
import { Markdown } from "keycloakify/tools/Markdown";
|
import { Markdown } from "keycloakify/tools/Markdown";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import { evtTermMarkdown } from "keycloakify/login/lib/useDownloadTerms";
|
import { evtTermMarkdown } from "keycloakify/login/lib/useDownloadTerms";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
@ -11,7 +11,7 @@ export default function Terms(props: PageProps<Extract<KcContext, { pageId: "ter
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { UserProfileFormFields } from "keycloakify/login/pages/shared/UserProfileCommons";
|
import { UserProfileFormFields } from "keycloakify/login/pages/shared/UserProfileCommons";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ export default function UpdateUserProfile(props: PageProps<Extract<KcContext, {
|
|||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
doUseDefaultCss,
|
||||||
classes
|
classes
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -3,18 +3,15 @@ import { clsx } from "keycloakify/tools/clsx";
|
|||||||
import type { MessageKey } from "keycloakify/login/i18n/i18n";
|
import type { MessageKey } from "keycloakify/login/i18n/i18n";
|
||||||
import { base64url } from "rfc4648";
|
import { base64url } from "rfc4648";
|
||||||
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
||||||
import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps";
|
import type { PageProps } from "keycloakify/login/pages/PageProps";
|
||||||
import { useGetClassName } from "keycloakify/lib/useGetClassName";
|
import { useGetClassName } from "keycloakify/login/lib/useGetClassName";
|
||||||
import type { KcContext } from "../kcContext";
|
import type { KcContext } from "../kcContext";
|
||||||
import type { I18n } from "../i18n";
|
import type { I18n } from "../i18n";
|
||||||
|
|
||||||
export default function WebauthnAuthenticate(props: PageProps<Extract<KcContext, { pageId: "webauthn-authenticate.ftl" }>, I18n>) {
|
export default function WebauthnAuthenticate(props: PageProps<Extract<KcContext, { pageId: "webauthn-authenticate.ftl" }>, I18n>) {
|
||||||
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
const { kcContext, i18n, doUseDefaultCss, Template, classes } = props;
|
||||||
|
|
||||||
const { getClassName } = useGetClassName({
|
const { getClassName } = useGetClassName({ doUseDefaultCss, classes });
|
||||||
"defaultClasses": !doUseDefaultCss ? undefined : defaultClasses,
|
|
||||||
classes
|
|
||||||
});
|
|
||||||
|
|
||||||
const { url } = kcContext;
|
const { url } = kcContext;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useEffect, Fragment } from "react";
|
import { useEffect, Fragment } from "react";
|
||||||
import type { ClassKey } from "keycloakify/login/pages/PageProps";
|
import type { ClassKey } from "keycloakify/login/TemplateProps";
|
||||||
import { clsx } from "keycloakify/tools/clsx";
|
import { clsx } from "keycloakify/tools/clsx";
|
||||||
import { useFormValidation } from "keycloakify/login/lib/useFormValidation";
|
import { useFormValidation } from "keycloakify/login/lib/useFormValidation";
|
||||||
import type { Attribute } from "keycloakify/login/kcContext/KcContext";
|
import type { Attribute } from "keycloakify/login/kcContext/KcContext";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user