From 3fd007fa3d63a8776170e310b328765dae17b7e2 Mon Sep 17 00:00:00 2001 From: wandji20 Date: Tue, 26 Nov 2024 10:24:56 +0100 Subject: [PATCH] Handle user password with turbo stream --- app/controllers/user_passwords_controller.rb | 23 ++++++------------- app/views/layouts/_forgot_tab.html.haml | 4 ++-- .../user_passwords/create.turbo_stream.haml | 2 ++ .../user_passwords_controller_spec.rb | 6 ++--- 4 files changed, 14 insertions(+), 21 deletions(-) create mode 100644 app/views/user_passwords/create.turbo_stream.haml diff --git a/app/controllers/user_passwords_controller.rb b/app/controllers/user_passwords_controller.rb index b0ad3970d1..62d2259e27 100644 --- a/app/controllers/user_passwords_controller.rb +++ b/app/controllers/user_passwords_controller.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true class UserPasswordsController < Spree::UserPasswordsController - include CablecarResponses - layout 'darkswarm' def create @@ -11,27 +9,20 @@ class UserPasswordsController < Spree::UserPasswordsController self.resource = resource_class.send_reset_password_instructions(raw_params[resource_name]) if resource.errors.empty? - render cable_ready: cable_car.inner_html( - "#forgot-feedback", - partial("layouts/alert", locals: { type: "success", message: t(:password_reset_sent) }) - ) + @message, @type = [t(:password_reset_sent), :success] + render :create else - render status: :not_found, cable_ready: cable_car.inner_html( - "#forgot-feedback", - partial("layouts/alert", locals: { type: "alert", message: t(:email_not_found) }) - ) + @message, @type = [t(:email_not_found), :alert] + render :create, status: :not_found end end private def render_unconfirmed_response - render status: :unprocessable_entity, cable_ready: cable_car.inner_html( - "#forgot-feedback", - partial("layouts/alert", - locals: { type: "alert", message: t(:email_unconfirmed), - unconfirmed: true, tab: "forgot" }) - ) + @message, @type, @unconfirmed, @tab = [t(:email_unconfirmed), :alert, true, 'forgot'] + + render :create, status: :unprocessable_entity end def user_unconfirmed? diff --git a/app/views/layouts/_forgot_tab.html.haml b/app/views/layouts/_forgot_tab.html.haml index 47ad3c03d2..c1b8e36e88 100644 --- a/app/views/layouts/_forgot_tab.html.haml +++ b/app/views/layouts/_forgot_tab.html.haml @@ -1,12 +1,12 @@ #forgot-tab - = form_with url: spree_user_password_path, scope: :spree_user, data: { remote: "true" } do |form| + = form_with url: spree_user_password_path, scope: :spree_user, data: { turbo: true } do |form| .row .large-12.columns#forgot-feedback .row .large-12.columns = form.label :email, t(:signup_email) - = form.email_field :email, { tabindex: 1, inputmode: "email", "data-login-modal-target": "email", "data-action": "input->login-modal#emailOnInput" } + = form.email_field :email, { tabindex: 1, inputmode: "email" } .row .large-12.columns = form.submit t(:reset_password), { class: "button primary", tabindex: 2 } diff --git a/app/views/user_passwords/create.turbo_stream.haml b/app/views/user_passwords/create.turbo_stream.haml new file mode 100644 index 0000000000..9783307018 --- /dev/null +++ b/app/views/user_passwords/create.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update 'forgot-feedback' do + = render partial: 'layouts/alert', locals: { type: @type, message: @message, tab: @tab, unconfirmed: @unconfirmed, email: params.dig(:spree_user, :email) } \ No newline at end of file diff --git a/spec/controllers/user_passwords_controller_spec.rb b/spec/controllers/user_passwords_controller_spec.rb index d873c7df96..543072ecec 100644 --- a/spec/controllers/user_passwords_controller_spec.rb +++ b/spec/controllers/user_passwords_controller_spec.rb @@ -14,20 +14,20 @@ RSpec.describe UserPasswordsController do describe "create" do it "returns 404 if user is not found" do - spree_post :create, spree_user: { email: "xxxxxxxxxx@example.com" } + spree_post :create, spree_user: { email: "xxxxxxxxxx@example.com" }, format: :turbo_stream expect(response).to have_http_status :not_found expect(response.body).to match 'Email address not found' end it "returns 422 if user is registered but not confirmed" do - spree_post :create, spree_user: { email: unconfirmed_user.email } + spree_post :create, spree_user: { email: unconfirmed_user.email }, format: :turbo_stream expect(response).to have_http_status :unprocessable_entity expect(response.body).to match "You must confirm your email \ address before you can reset your password." end it "returns 200 when password reset was successful" do - spree_post :create, spree_user: { email: user.email } + spree_post :create, spree_user: { email: user.email }, format: :turbo_stream expect(response).to have_http_status :ok expect(response.body).to match "An email with instructions on resetting \ your password has been sent!"