diff --git a/src/login/kcContext/KcContext.ts b/src/login/kcContext/KcContext.ts index cbe77c3b..b71daaad 100644 --- a/src/login/kcContext/KcContext.ts +++ b/src/login/kcContext/KcContext.ts @@ -396,7 +396,6 @@ export declare namespace KcContext { export type LoginUpdatePassword = Common & { pageId: "login-update-password.ftl"; - username: string; }; export type LoginIdpLinkConfirm = Common & { diff --git a/src/login/pages/LoginUpdatePassword.tsx b/src/login/pages/LoginUpdatePassword.tsx index a4b8ac17..23c002da 100644 --- a/src/login/pages/LoginUpdatePassword.tsx +++ b/src/login/pages/LoginUpdatePassword.tsx @@ -1,4 +1,6 @@ +import { useEffect, useReducer } from "react"; import { clsx } from "keycloakify/tools/clsx"; +import { assert } from "tsafe/assert"; import type { PageProps } from "keycloakify/login/pages/PageProps"; import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; import type { KcContext } from "../kcContext"; @@ -14,93 +16,83 @@ export default function LoginUpdatePassword(props: PageProps + ); } + +function LogoutOtherSessions(props: { getClassName: ReturnType["getClassName"]; i18n: I18n }) { + const { getClassName, i18n } = props; + + const { msg } = i18n; + + return ( +
+
+
+ +
+
+
+ ); +} + +function PasswordWrapper(props: { + getClassName: ReturnType["getClassName"]; + i18n: I18n; + passwordInputId: string; + children: JSX.Element; +}) { + const { getClassName, i18n, passwordInputId, children } = props; + + const { msgStr } = i18n; + + const [isPasswordRevealed, toggleIsPasswordRevealed] = useReducer((isPasswordRevealed: boolean) => !isPasswordRevealed, false); + + useEffect(() => { + const passwordInputElement = document.getElementById(passwordInputId); + + assert(passwordInputElement instanceof HTMLInputElement); + + passwordInputElement.type = isPasswordRevealed ? "text" : "password"; + }, [isPasswordRevealed]); + + return ( +
+ {children} + +
+ ); +}