From 43c412405a7e04e17ec3f51f41a9ac218cbb6472 Mon Sep 17 00:00:00 2001 From: Joseph Garrone Date: Tue, 2 Mar 2021 23:48:31 +0100 Subject: [PATCH] Login page implemented --- package.json | 2 +- .../ftlValuesGlobalName.ts | 2 +- src/lib/LoginPage.tsx | 300 ------------------ src/lib/components/KcProperties.ts | 190 +++++++++++ src/lib/components/Login.tsx | 171 ++++++++++ src/lib/{ => components}/Template.tsx | 170 ++++------ .../{getLanguageLabel.ts => KcLanguageTag.ts} | 46 ++- src/lib/i18n/useKcLanguageTag.ts | 15 + ...akTranslation.tsx => useKcTranslation.tsx} | 8 +- src/lib/i18n/useKeycloakLanguage.ts | 44 --- src/lib/index.ts | 13 +- .../{keycloakFtlValues.ts => kcContext.ts} | 11 +- 12 files changed, 487 insertions(+), 485 deletions(-) delete mode 100644 src/lib/LoginPage.tsx create mode 100644 src/lib/components/KcProperties.ts create mode 100644 src/lib/components/Login.tsx rename src/lib/{ => components}/Template.tsx (64%) rename src/lib/i18n/{getLanguageLabel.ts => KcLanguageTag.ts} (53%) create mode 100644 src/lib/i18n/useKcLanguageTag.ts rename src/lib/i18n/{useKeycloakTranslation.tsx => useKcTranslation.tsx} (76%) delete mode 100644 src/lib/i18n/useKeycloakLanguage.ts rename src/lib/{keycloakFtlValues.ts => kcContext.ts} (85%) diff --git a/package.json b/package.json index 9d093c58..748e7804 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "keycloak-react-theming", - "version": "0.0.25", + "version": "0.0.26", "description": "Keycloak theme generator for Reacts app", "repository": { "type": "git", diff --git a/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts b/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts index e7ef254a..305f63c7 100644 --- a/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts +++ b/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts @@ -1,2 +1,2 @@ -export const ftlValuesGlobalName = "keycloakPagesContext"; \ No newline at end of file +export const ftlValuesGlobalName = "kcContext"; \ No newline at end of file diff --git a/src/lib/LoginPage.tsx b/src/lib/LoginPage.tsx deleted file mode 100644 index 7836b2a7..00000000 --- a/src/lib/LoginPage.tsx +++ /dev/null @@ -1,300 +0,0 @@ - -import { useState, memo } from "react"; -import { allPropertiesValuesToUndefined } from "./tools/allPropertiesValuesToUndefined"; -import { Template, defaultKcTemplateProperties } from "./Template"; -import type { KcTemplateProperties, KcClasses } from "./Template"; -import { assert } from "evt/tools/typeSafety/assert"; -import { keycloakPagesContext } from "./keycloakFtlValues"; -import { useKeycloakThemeTranslation } from "./i18n/useKeycloakTranslation"; -import { cx } from "tss-react"; -import { useConstCallback } from "powerhooks"; - -export type KcLoginPageProperties = KcTemplateProperties & KcClasses< - "kcLogoLink" | - "kcLogoClass" | - "kcContainerClass" | - "kcContentClass" | - "kcFeedbackAreaClass" | - "kcLocaleClass" | - "kcAlertIconClasserror" | - "kcFormAreaClass" | - "kcFormSocialAccountListClass" | - "kcFormSocialAccountDoubleListClass" | - "kcFormSocialAccountListLinkClass" | - "kcWebAuthnKeyIcon" | - "kcFormClass" | - "kcFormGroupErrorClass" | - "kcLabelClass" | - "kcInputClass" | - "kcInputWrapperClass" | - "kcFormOptionsClass" | - "kcFormButtonsClass" | - "kcFormSettingClass" | - "kcTextareaClass" | - "kcInfoAreaClass" | - "kcButtonClass" | - "kcButtonPrimaryClass" | - "kcButtonDefaultClass" | - "kcButtonLargeClass" | - "kcButtonBlockClass" | - "kcInputLargeClass" | - "kcSrOnlyClass" | - "kcSelectAuthListClass" | - "kcSelectAuthListItemClass" | - "kcSelectAuthListItemInfoClass" | - "kcSelectAuthListItemLeftClass" | - "kcSelectAuthListItemBodyClass" | - "kcSelectAuthListItemDescriptionClass" | - "kcSelectAuthListItemHeadingClass" | - "kcSelectAuthListItemHelpTextClass" | - "kcAuthenticatorDefaultClass" | - "kcAuthenticatorPasswordClass" | - "kcAuthenticatorOTPClass" | - "kcAuthenticatorWebAuthnClass" | - "kcAuthenticatorWebAuthnPasswordlessClass" | - "kcSelectOTPListClass" | - "kcSelectOTPListItemClass" | - "kcAuthenticatorOtpCircleClass" | - "kcSelectOTPItemHeadingClass" | - "kcFormOptionsWrapperClass" ->; - -export const defaultKcLoginPageProperties: KcLoginPageProperties = { - ...defaultKcTemplateProperties, - "kcLogoLink": "http://www.keycloak.org", - "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", - - "kcFormClass": "form-horizontal", - "kcFormGroupErrorClass": "has-error", - "kcLabelClass": "control-label", - "kcInputClass": "form-control", - "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", - - // 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", - "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" -}; - - - -/** Tu use if you don't want any default */ -export const allClearKcLoginPageProperties = - allPropertiesValuesToUndefined(defaultKcLoginPageProperties); - -export type Props = { - properties?: KcLoginPageProperties; -}; - -export const LoginPage = memo((props: Props) => { - - const { properties = {} } = props; - - const { t, tStr } = useKeycloakThemeTranslation(); - - Object.assign(properties, defaultKcLoginPageProperties); - - const [{ - social, realm, url, - usernameEditDisabled, login, - auth, registrationDisabled - }] = useState(() => { - - assert(keycloakPagesContext !== undefined); - - return keycloakPagesContext; - - }); - - const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false); - - const onSubmit = useConstCallback(() => - (setIsLoginButtonDisabled(true), true) - ); - - - return ( -