From f2739b79fbca45906b59e88997969f8a678a1031 Mon Sep 17 00:00:00 2001 From: Zach Gollwitzer Date: Tue, 5 Nov 2024 17:15:29 -0500 Subject: [PATCH] Improve password reset flow, normalize translations --- app/assets/stylesheets/application.tailwind.css | 2 +- app/controllers/password_resets_controller.rb | 2 +- app/mailers/application_mailer.rb | 2 +- app/views/password_resets/edit.html.erb | 15 +++------------ app/views/password_resets/new.html.erb | 14 ++++++++------ config/locales/mailers/invitation_mailer/en.yml | 5 +---- config/locales/views/accounts/en.yml | 8 ++++---- config/locales/views/credit_cards/en.yml | 4 ++-- config/locales/views/cryptos/en.yml | 4 ++-- config/locales/views/depositories/en.yml | 4 ++-- config/locales/views/investments/en.yml | 4 ++-- config/locales/views/invitation_mailer/en.yml | 7 ++++--- config/locales/views/invitations/en.yml | 15 ++++++++------- config/locales/views/loans/en.yml | 4 ++-- config/locales/views/other_assets/en.yml | 4 ++-- config/locales/views/other_liabilities/en.yml | 4 ++-- config/locales/views/password_resets/en.yml | 5 +---- config/locales/views/properties/en.yml | 4 ++-- config/locales/views/registrations/en.yml | 8 ++++---- config/locales/views/settings/en.yml | 6 +++--- config/locales/views/vehicles/en.yml | 4 ++-- .../password_resets_controller_test.rb | 2 +- 22 files changed, 58 insertions(+), 69 deletions(-) diff --git a/app/assets/stylesheets/application.tailwind.css b/app/assets/stylesheets/application.tailwind.css index f96f0c88ca0..31a3d01f7e5 100644 --- a/app/assets/stylesheets/application.tailwind.css +++ b/app/assets/stylesheets/application.tailwind.css @@ -101,7 +101,7 @@ } .btn { - @apply px-3 py-2 rounded-lg text-sm font-medium cursor-pointer; + @apply px-3 py-2 rounded-lg text-sm font-medium cursor-pointer focus:outline-gray-500; } .btn--primary { diff --git a/app/controllers/password_resets_controller.rb b/app/controllers/password_resets_controller.rb index 9185d6bf556..41e5eecd6fa 100644 --- a/app/controllers/password_resets_controller.rb +++ b/app/controllers/password_resets_controller.rb @@ -16,7 +16,7 @@ def create ).password_reset.deliver_later end - redirect_to root_path, notice: t(".requested") + redirect_to new_password_reset_path(step: "pending") end def edit diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 9305dad1224..149b8a787e3 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -1,4 +1,4 @@ class ApplicationMailer < ActionMailer::Base - default from: ENV["EMAIL_SENDER"] if ENV["EMAIL_SENDER"].present? + default from: email_address_with_name(ENV.fetch("EMAIL_SENDER", "sender@maybe.local"), "Maybe Finance") layout "mailer" end diff --git a/app/views/password_resets/edit.html.erb b/app/views/password_resets/edit.html.erb index dcf563a7daf..8cb258ad413 100644 --- a/app/views/password_resets/edit.html.erb +++ b/app/views/password_resets/edit.html.erb @@ -3,17 +3,8 @@ %> <%= styled_form_with model: @user, url: password_reset_path(token: params[:token]), method: :patch, class: "space-y-4" do |form| %> -
- <%= form.label :password, class: "p-4 pb-0 block text-sm font-medium text-gray-700" %> - <%= form.password_field :password, required: "required", class: "p-4 pt-1 bg-transparent border-none opacity-50 focus:outline-none focus:ring-0 focus-within:opacity-100 w-full" %> -
+ <%= form.password_field :password, required: true, label: true %> + <%= form.password_field :password_confirmation, required: true, label: true %> -
- <%= form.label :password_confirmation, class: "p-4 pb-0 block text-sm font-medium text-gray-700" %> - <%= form.password_field :password_confirmation, required: "required", class: "p-4 pt-1 bg-transparent border-none opacity-50 focus:outline-none focus:ring-0 focus-within:opacity-100 w-full" %> -
- -
- <%= form.submit t(".submit"), class: "flex justify-center w-full px-4 py-3 text-sm font-medium text-white bg-black rounded-xl hover:bg-black focus:outline-none focus:ring-2 focus:ring-gray-200 shadow" %> -
+ <%= form.submit %> <% end %> diff --git a/app/views/password_resets/new.html.erb b/app/views/password_resets/new.html.erb index f869c3f8720..a0726b0ebd0 100644 --- a/app/views/password_resets/new.html.erb +++ b/app/views/password_resets/new.html.erb @@ -1,9 +1,11 @@ -<% - header_title t(".title") -%> +<% header_title t(".title") %> -<%= styled_form_with url: password_reset_path, class: "space-y-4" do |form| %> - <%= form.email_field :email, label: true, autofocus: false, autocomplete: "email", required: "required", placeholder: "you@example.com" %> +<% if params[:step] == "pending" %> +

<%= t(".requested") %>

+<% else %> + <%= styled_form_with url: password_reset_path, class: "space-y-4" do |form| %> + <%= form.email_field :email, label: true, autofocus: false, autocomplete: "email", required: "required", placeholder: "you@example.com" %> - <%= form.submit t(".submit") %> + <%= form.submit t(".submit") %> + <% end %> <% end %> diff --git a/config/locales/mailers/invitation_mailer/en.yml b/config/locales/mailers/invitation_mailer/en.yml index 1bb494e83e9..19cb4bbaf9c 100644 --- a/config/locales/mailers/invitation_mailer/en.yml +++ b/config/locales/mailers/invitation_mailer/en.yml @@ -1,8 +1,5 @@ +--- en: invitation_mailer: invite_email: subject: "%{inviter} has invited you to join their household on Maybe!" - greeting: "You've been invited!" - body: "%{inviter} has invited you to join their household '%{family}' as a %{role}." - accept_button: "Accept Invitation" - expiry_notice: "This invitation will expire in %{days} days." diff --git a/config/locales/views/accounts/en.yml b/config/locales/views/accounts/en.yml index 060aaf38445..b3dcb1af15a 100644 --- a/config/locales/views/accounts/en.yml +++ b/config/locales/views/accounts/en.yml @@ -11,7 +11,7 @@ en: new_account: New account no_accounts: No accounts yet form: - balance: Current balance + balance: Current balance institution: Financial institution name_label: Account name name_placeholder: Example account name @@ -36,12 +36,12 @@ en: institutionless_accounts: other_accounts: Other accounts new_account: New account - new: + new: + import_accounts: Import accounts method_selector: connected_entry: Link account (coming soon) manual_entry: Enter account balance title: How would you like to add it? - import_accounts: Import accounts title: What would you like to add? show: chart: @@ -73,4 +73,4 @@ en: sync_all: success: Successfully queued accounts for syncing. sync_all_button: - sync: Sync all \ No newline at end of file + sync: Sync all diff --git a/config/locales/views/credit_cards/en.yml b/config/locales/views/credit_cards/en.yml index 41fa8253140..53ff3163a17 100644 --- a/config/locales/views/credit_cards/en.yml +++ b/config/locales/views/credit_cards/en.yml @@ -3,10 +3,10 @@ en: credit_cards: create: success: Credit card account created - edit: - edit: Edit %{account} destroy: success: Credit card account deleted + edit: + edit: Edit %{account} form: annual_fee: Annual fee annual_fee_placeholder: '99' diff --git a/config/locales/views/cryptos/en.yml b/config/locales/views/cryptos/en.yml index 738c23800ed..3e8619af61c 100644 --- a/config/locales/views/cryptos/en.yml +++ b/config/locales/views/cryptos/en.yml @@ -3,11 +3,11 @@ en: cryptos: create: success: Crypto account created + destroy: + success: Crypto account deleted edit: edit: Edit %{account} new: title: Enter account balance update: success: Crypto account updated - destroy: - success: Crypto account deleted diff --git a/config/locales/views/depositories/en.yml b/config/locales/views/depositories/en.yml index 0e4622d119f..38a91c29c0a 100644 --- a/config/locales/views/depositories/en.yml +++ b/config/locales/views/depositories/en.yml @@ -3,6 +3,8 @@ en: depositories: create: success: Depository account created + destroy: + success: Depository account deleted edit: edit: Edit %{account} form: @@ -12,5 +14,3 @@ en: title: Enter account balance update: success: Depository account updated - destroy: - success: Depository account deleted diff --git a/config/locales/views/investments/en.yml b/config/locales/views/investments/en.yml index 5a7124934d4..ed83fb05aa8 100644 --- a/config/locales/views/investments/en.yml +++ b/config/locales/views/investments/en.yml @@ -3,6 +3,8 @@ en: investments: create: success: Investment account created + destroy: + success: Investment account deleted edit: edit: Edit %{account} form: @@ -14,8 +16,6 @@ en: chart_title: Total value update: success: Investment account updated - destroy: - success: Investment account deleted value_tooltip: cash: Cash holdings: Holdings diff --git a/config/locales/views/invitation_mailer/en.yml b/config/locales/views/invitation_mailer/en.yml index 650377213ff..404d452315c 100644 --- a/config/locales/views/invitation_mailer/en.yml +++ b/config/locales/views/invitation_mailer/en.yml @@ -1,7 +1,8 @@ +--- en: invitation_mailer: invite_email: - greeting: "Welcome to Maybe!" + accept_button: Accept Invitation body: "%{inviter} has invited you to join the %{family} family on Maybe!" - accept_button: "Accept Invitation" - expiry_notice: "This invitation will expire in %{days} days" + expiry_notice: This invitation will expire in %{days} days + greeting: Welcome to Maybe! diff --git a/config/locales/views/invitations/en.yml b/config/locales/views/invitations/en.yml index 389cd35897f..5ce17ce53ae 100644 --- a/config/locales/views/invitations/en.yml +++ b/config/locales/views/invitations/en.yml @@ -1,14 +1,15 @@ +--- en: invitations: create: - success: "Invitation sent successfully" - failure: "Could not send invitation" + failure: Could not send invitation + success: Invitation sent successfully new: - title: Invite Someone - subtitle: Send an invitation to join your family account on Maybe - email_placeholder: Enter email address email_label: Email Address - role_member: Member + email_placeholder: Enter email address role_admin: Administrator role_label: Role - submit: Send Invitation \ No newline at end of file + role_member: Member + submit: Send Invitation + subtitle: Send an invitation to join your family account on Maybe + title: Invite Someone diff --git a/config/locales/views/loans/en.yml b/config/locales/views/loans/en.yml index 6fbd43cb4bb..ae143a7d68b 100644 --- a/config/locales/views/loans/en.yml +++ b/config/locales/views/loans/en.yml @@ -3,10 +3,10 @@ en: loans: create: success: Loan account created - edit: - edit: Edit %{account} destroy: success: Loan account deleted + edit: + edit: Edit %{account} form: interest_rate: Interest rate interest_rate_placeholder: '5.25' diff --git a/config/locales/views/other_assets/en.yml b/config/locales/views/other_assets/en.yml index db567fcfafa..ce079a1d4c9 100644 --- a/config/locales/views/other_assets/en.yml +++ b/config/locales/views/other_assets/en.yml @@ -3,10 +3,10 @@ en: other_assets: create: success: Other asset account created - edit: - edit: Edit %{account} destroy: success: Other asset account deleted + edit: + edit: Edit %{account} new: title: Enter asset details update: diff --git a/config/locales/views/other_liabilities/en.yml b/config/locales/views/other_liabilities/en.yml index a90eb4c05fe..332c3846286 100644 --- a/config/locales/views/other_liabilities/en.yml +++ b/config/locales/views/other_liabilities/en.yml @@ -3,10 +3,10 @@ en: other_liabilities: create: success: Other liability account created - edit: - edit: Edit %{account} destroy: success: Other liability account deleted + edit: + edit: Edit %{account} new: title: Enter liability details update: diff --git a/config/locales/views/password_resets/en.yml b/config/locales/views/password_resets/en.yml index 33fa060d9a2..886e7da019d 100644 --- a/config/locales/views/password_resets/en.yml +++ b/config/locales/views/password_resets/en.yml @@ -1,13 +1,10 @@ --- en: password_resets: - create: - requested: If an account with that email exists, we have sent a link to reset - your password. edit: - submit: Update Password title: Reset password new: + requested: Please check your email for a link to reset your password. submit: Reset password title: Reset password update: diff --git a/config/locales/views/properties/en.yml b/config/locales/views/properties/en.yml index ab5a86978b0..0558b5e6758 100644 --- a/config/locales/views/properties/en.yml +++ b/config/locales/views/properties/en.yml @@ -3,10 +3,10 @@ en: properties: create: success: Property account created - edit: - edit: Edit %{account} destroy: success: Property account deleted + edit: + edit: Edit %{account} form: address_line1: Street address address_line1_placeholder: 123 Main St diff --git a/config/locales/views/registrations/en.yml b/config/locales/views/registrations/en.yml index 5d487ee05f0..7468f90975a 100644 --- a/config/locales/views/registrations/en.yml +++ b/config/locales/views/registrations/en.yml @@ -12,12 +12,12 @@ en: invalid_invite_code: Invalid invite code, please try again. success: You have signed up successfully. new: + invitation_message: "%{inviter} has invited you to join as a %{role}" + join_family_title: Join %{family} + role_admin: administrator + role_member: member submit: Create account title: Create your account - join_family_title: "Join %{family}" - invitation_message: "%{inviter} has invited you to join as a %{role}" - role_member: "member" - role_admin: "administrator" welcome_body: To get started, you must sign up for a new account. You will then be able to configure additional settings within the app. welcome_title: Welcome to Self Hosted Maybe! diff --git a/config/locales/views/settings/en.yml b/config/locales/views/settings/en.yml index 4bb87e5c3ae..9d8532e2d1f 100644 --- a/config/locales/views/settings/en.yml +++ b/config/locales/views/settings/en.yml @@ -41,7 +41,6 @@ en: theme_title: Theme profiles: show: - invite_member: "Add member" confirm_delete: body: Are you sure you want to permanently delete your account? This action is irreversible. @@ -56,13 +55,14 @@ en: household_subtitle: Invite family members, partners and other inviduals. Invitees can login to your household and access your shared accounts. household_title: Household + invitation_link: Invitation link + invite_member: Add member last_name: Last Name page_title: Account + pending: Pending profile_subtitle: Customize how you appear on Maybe profile_title: Profile save: Save - pending: Pending - invitation_link: Invitation link user_avatar_field: accepted_formats: JPG or PNG. 5MB max. choose: Choose diff --git a/config/locales/views/vehicles/en.yml b/config/locales/views/vehicles/en.yml index 308d96a68c5..ef5a13c4403 100644 --- a/config/locales/views/vehicles/en.yml +++ b/config/locales/views/vehicles/en.yml @@ -3,10 +3,10 @@ en: vehicles: create: success: Vehicle account created - edit: - edit: Edit %{account} destroy: success: Vehicle account deleted + edit: + edit: Edit %{account} form: make: Make make_placeholder: Toyota diff --git a/test/controllers/password_resets_controller_test.rb b/test/controllers/password_resets_controller_test.rb index e9a1b9563aa..aa2d5521d8a 100644 --- a/test/controllers/password_resets_controller_test.rb +++ b/test/controllers/password_resets_controller_test.rb @@ -13,7 +13,7 @@ class PasswordResetsControllerTest < ActionDispatch::IntegrationTest test "create" do assert_enqueued_emails 1 do post password_reset_path, params: { email: @user.email } - assert_redirected_to root_url + assert_redirected_to new_password_reset_url(step: "pending") end end