diff --git a/src/login/Fallback.tsx b/src/login/Fallback.tsx index 3e2737c2..58e36c98 100644 --- a/src/login/Fallback.tsx +++ b/src/login/Fallback.tsx @@ -27,7 +27,6 @@ const LoginPageExpired = lazy(() => import("keycloakify/login/pages/LoginPageExp const LoginIdpLinkEmail = lazy(() => import("keycloakify/login/pages/LoginIdpLinkEmail")); const LoginConfigTotp = lazy(() => import("keycloakify/login/pages/LoginConfigTotp")); const LogoutConfirm = lazy(() => import("keycloakify/login/pages/LogoutConfirm")); -const UpdateUserProfile = lazy(() => import("keycloakify/login/pages/UpdateUserProfile")); const IdpReviewUserProfile = lazy(() => import("keycloakify/login/pages/IdpReviewUserProfile")); const UpdateEmail = lazy(() => import("keycloakify/login/pages/UpdateEmail")); const SelectAuthenticator = lazy(() => import("keycloakify/login/pages/SelectAuthenticator")); @@ -75,6 +74,7 @@ export default function Fallback(props: FallbackProps) { case "login-update-password.ftl": return ; case "login-update-profile.ftl": + case "update-user-profile.ftl": return ; case "login-idp-link-confirm.ftl": return ; @@ -86,8 +86,6 @@ export default function Fallback(props: FallbackProps) { return ; case "logout-confirm.ftl": return ; - case "update-user-profile.ftl": - return ; case "idp-review-user-profile.ftl": return ; case "update-email.ftl": diff --git a/src/login/kcContext/KcContext.ts b/src/login/kcContext/KcContext.ts index 8733f05b..02959caf 100644 --- a/src/login/kcContext/KcContext.ts +++ b/src/login/kcContext/KcContext.ts @@ -31,7 +31,6 @@ export type KcContext = | KcContext.LoginPageExpired | KcContext.LoginConfigTotp | KcContext.LogoutConfirm - | KcContext.UpdateUserProfile | KcContext.IdpReviewUserProfile | KcContext.UpdateEmail | KcContext.SelectAuthenticator @@ -362,17 +361,6 @@ export declare namespace KcContext { username: string; }; - export type LoginUpdateProfile = Common & { - pageId: "login-update-profile.ftl"; - user: { - editUsernameAllowed: boolean; - username?: string; - email?: string; - firstName?: string; - lastName?: string; - }; - }; - export type LoginIdpLinkConfirm = Common & { pageId: "login-idp-link-confirm.ftl"; idpAlias: string; @@ -432,14 +420,27 @@ export declare namespace KcContext { }; }; - export type UpdateUserProfile = Common & { - pageId: "update-user-profile.ftl"; + export type LoginUpdateProfile = Common & { + pageId: "login-update-profile.ftl" | "update-user-profile.ftl"; profile: { attributes: Attribute[]; attributesByName: Record; }; }; + /* + export type LoginUpdateProfile = Common & { + pageId: "login-update-profile.ftl"; + user: { + editUsernameAllowed: boolean; + username?: string; + email?: string; + firstName?: string; + lastName?: string; + }; + }; + */ + export type IdpReviewUserProfile = Common & { pageId: "idp-review-user-profile.ftl"; profile: { diff --git a/src/login/pages/LoginUpdateProfile.tsx b/src/login/pages/LoginUpdateProfile.tsx index 59d1f89b..4309fe42 100644 --- a/src/login/pages/LoginUpdateProfile.tsx +++ b/src/login/pages/LoginUpdateProfile.tsx @@ -1,146 +1,72 @@ +import { useState } from "react"; import { clsx } from "keycloakify/tools/clsx"; import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import type { KcContext } from "../kcContext"; import type { I18n } from "../i18n"; +import type { LazyOrNot } from "keycloakify/tools/LazyOrNot"; +import type { UserProfileFormFieldsProps } from "keycloakify/login/UserProfileFormFields"; -export default function LoginUpdateProfile(props: PageProps, I18n>) { - const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; +type LoginUpdateProfileProps = PageProps, I18n> & { + UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>; +}; + +export default function LoginUpdateProfile(props: LoginUpdateProfileProps) { + const { kcContext, i18n, doUseDefaultCss, Template, classes, UserProfileFormFields } = props; const { getClassName } = useGetClassName({ doUseDefaultCss, classes }); + const { url, messagesPerField, isAppInitiatedAction } = kcContext; + const { msg, msgStr } = i18n; - const { url, user, messagesPerField, isAppInitiatedAction } = kcContext; + const [isFormSubmittable, setIsFormSubmittable] = useState(false); return (