From 8f26ae7b7d8fd137eee758d4247d65ea032d0e52 Mon Sep 17 00:00:00 2001 From: Jordan Vidrine <30537603+jordanvidrine@users.noreply.github.com> Date: Tue, 17 Dec 2024 12:11:02 -0600 Subject: [PATCH] UX: refactor password reset page (#30323) --- .../app/controllers/password-reset.js | 25 +++ .../app/templates/password-reset.hbs | 165 +++++++++--------- .../tests/acceptance/password-reset-test.js | 4 +- .../common/base/login-signup-page.scss | 8 +- app/assets/stylesheets/common/base/login.scss | 34 ++-- 5 files changed, 128 insertions(+), 108 deletions(-) diff --git a/app/assets/javascripts/discourse/app/controllers/password-reset.js b/app/assets/javascripts/discourse/app/controllers/password-reset.js index 6de634dc621..5d5a18509ed 100644 --- a/app/assets/javascripts/discourse/app/controllers/password-reset.js +++ b/app/assets/javascripts/discourse/app/controllers/password-reset.js @@ -29,6 +29,7 @@ export default class PasswordResetController extends Controller.extend( requiresApproval = false; redirected = false; maskPassword = true; + passwordValidationVisible = false; lockImageUrl = getURL("/images/lock.svg"); @@ -65,6 +66,30 @@ export default class PasswordResetController extends Controller.extend( return getURL(redirectTo || "/"); } + @discourseComputed( + "passwordValidation.ok", + "passwordValidation.reason", + "passwordValidationVisible" + ) + showPasswordValidation( + passwordValidationOk, + passwordValidationReason, + passwordValidationVisible + ) { + return ( + passwordValidationOk || + (passwordValidationReason && passwordValidationVisible) + ); + } + + @action + togglePasswordValidation() { + this.set( + "passwordValidationVisible", + Boolean(this.passwordValidation.reason) + ); + } + @action done(event) { if (wantsNewWindow(event)) { diff --git a/app/assets/javascripts/discourse/app/templates/password-reset.hbs b/app/assets/javascripts/discourse/app/templates/password-reset.hbs index 5145212e6e3..29c4f512e7b 100644 --- a/app/assets/javascripts/discourse/app/templates/password-reset.hbs +++ b/app/assets/javascripts/discourse/app/templates/password-reset.hbs @@ -2,11 +2,7 @@ {{hide-application-sidebar}} {{hide-application-header-buttons "search" "login" "signup" "menu"}}
-
- -
- -
+
\ No newline at end of file diff --git a/app/assets/javascripts/discourse/tests/acceptance/password-reset-test.js b/app/assets/javascripts/discourse/tests/acceptance/password-reset-test.js index a5eb587ebcd..54e5e6c0cd9 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/password-reset-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/password-reset-test.js @@ -1,4 +1,4 @@ -import { click, fillIn, visit } from "@ember/test-helpers"; +import { blur, click, fillIn, visit } from "@ember/test-helpers"; import { test } from "qunit"; import sinon from "sinon"; import PreloadStore from "discourse/lib/preload-store"; @@ -71,6 +71,8 @@ acceptance("Password Reset", function (needs) { assert.dom(".password-reset .tip.good").exists("input looks good"); await fillIn(".password-reset input", "123"); + await blur(".password-reset input"); + assert.dom(".password-reset .tip.bad").exists("input is not valid"); assert.dom(".password-reset .tip.bad").includesHtml( i18n("user.password.too_short", { diff --git a/app/assets/stylesheets/common/base/login-signup-page.scss b/app/assets/stylesheets/common/base/login-signup-page.scss index 7cae704c50f..e24e5646d98 100644 --- a/app/assets/stylesheets/common/base/login-signup-page.scss +++ b/app/assets/stylesheets/common/base/login-signup-page.scss @@ -11,7 +11,8 @@ body.login-page, body.signup-page, -body.invite-page { +body.invite-page, +body.password-reset-page { & ~ .powered-by-discourse, .above-main-container-outlet { display: none; @@ -25,7 +26,8 @@ body.signup-page { .login-fullpage, .signup-fullpage, -.invites-show { +.invites-show, +.password-reset-page { .signup-body, .login-body { display: flex; @@ -241,8 +243,6 @@ body.signup-page { .caps-lock-warning { color: var(--danger); font-size: var(--font-down-1); - font-weight: bold; - margin-top: 0.5em; } .create-account__password-info { diff --git a/app/assets/stylesheets/common/base/login.scss b/app/assets/stylesheets/common/base/login.scss index 8c875842ea0..f3f860c56f5 100644 --- a/app/assets/stylesheets/common/base/login.scss +++ b/app/assets/stylesheets/common/base/login.scss @@ -33,28 +33,22 @@ body.invite-page { // the second button can wrap in some locales, and this helps alignment } -.password-reset { - .instructions { - label { - color: var(--primary-medium); - } - } - #new-account-password { - width: 15em; - } - .tip { - margin: 0 0 0.5em; - } - .toggle-password-mask { - margin-left: 0.25em; - } -} - .password-reset-page { - .caps-lock-warning { - display: inline; - } .change-password-form { + margin: 0 auto; + display: flex; + flex-direction: column; + width: 400px; + input { + padding: 0.75em 0.77em; + min-width: 250px; + margin-bottom: 0.25em; + width: 100%; + } + .input { + position: relative; + margin-bottom: 1em; + } .tip { display: block; }