From e3431c7954752fd32b0744924ea0d52f04738965 Mon Sep 17 00:00:00 2001 From: wandji20 Date: Tue, 26 Nov 2024 10:24:20 +0100 Subject: [PATCH] Handle user sessions with turbo stream --- .../spree/user_sessions_controller.rb | 21 +++++++------------ app/views/layouts/_alert.html.haml | 3 ++- app/views/layouts/_login_tab.html.haml | 6 +++--- .../user_sessions/create.turbo_stream.haml | 2 ++ .../unconfirmed_user.turbo_stream.haml | 2 ++ .../spree/user_sessions_controller_spec.rb | 7 ++++--- 6 files changed, 21 insertions(+), 20 deletions(-) create mode 100644 app/views/spree/user_sessions/create.turbo_stream.haml create mode 100644 app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml diff --git a/app/controllers/spree/user_sessions_controller.rb b/app/controllers/spree/user_sessions_controller.rb index c22c6162fd..92d64f0046 100644 --- a/app/controllers/spree/user_sessions_controller.rb +++ b/app/controllers/spree/user_sessions_controller.rb @@ -9,7 +9,6 @@ module Spree include Spree::Core::ControllerHelpers::Auth include Spree::Core::ControllerHelpers::Common include Spree::Core::ControllerHelpers::Order - include CablecarResponses helper 'spree/base' @@ -24,14 +23,10 @@ module Spree if spree_user_signed_in? flash[:success] = t('devise.success.logged_in_succesfully') - render cable_ready: cable_car.redirect_to( - url: return_url_or_default(after_sign_in_path_for(spree_current_user)) - ) + redirect_to after_sign_in_path_for(spree_current_user) else - render status: :unauthorized, cable_ready: cable_car.inner_html( - "#login-feedback", - partial("layouts/alert", locals: { type: "alert", message: t('devise.failure.invalid') }) - ) + @message = t('devise.failure.invalid') + render :create, status: :unauthorized end end @@ -60,11 +55,11 @@ module Spree end def render_unconfirmed_response - render status: :unprocessable_entity, cable_ready: cable_car.inner_html( - "#login-feedback", - partial("layouts/alert", locals: { type: "alert", message: t(:email_unconfirmed), - unconfirmed: true, tab: "login" }) - ) + message = t(:email_unconfirmed) + @local_values = { type: "alert", message:, unconfirmed: true, + tab: "login", email: params.dig(:spree_user, :email) } + + render :unconfirmed_user, status: :unprocessable_entity end def ensure_valid_locale_persisted diff --git a/app/views/layouts/_alert.html.haml b/app/views/layouts/_alert.html.haml index 36db8b7e31..be1bc76ba9 100644 --- a/app/views/layouts/_alert.html.haml +++ b/app/views/layouts/_alert.html.haml @@ -1,5 +1,6 @@ .alert-box{ class: "#{type}" } = message - if local_assigns[:unconfirmed] - %a{ "data-action": "login-modal#resend_confirmation", "data-tab": local_assigns[:tab] } + - params = { spree_user: { email: email }, tab: local_assigns[:tab] } + = link_to spree_user_confirmation_path(params), params:, data: { turbo_method: :post } do = t('devise.confirmations.resend_confirmation_email') diff --git a/app/views/layouts/_login_tab.html.haml b/app/views/layouts/_login_tab.html.haml index a80a39acce..681ca1ee16 100644 --- a/app/views/layouts/_login_tab.html.haml +++ b/app/views/layouts/_login_tab.html.haml @@ -1,5 +1,5 @@ #login-content - = form_with url: spree_user_session_path, scope: :spree_user, data: { remote: "true" } do |form| + = form_with url: spree_user_session_path, scope: :spree_user, data: { turbo: true } do |form| .row .large-12.columns#login-feedback - confirmation_result = request.query_parameters[:validation] @@ -10,7 +10,7 @@ .row .large-12.columns = form.label :email, t(:email) - = form.email_field :email, { tabindex: 1, inputmode: "email", autocomplete: "off", "data-login-modal-target": "email", "data-action": "input->login-modal#emailOnInput" } + = form.email_field :email, { tabindex: 1, inputmode: "email", autocomplete: "off" } .row .large-12.columns = form.label :password, t(:password) @@ -21,4 +21,4 @@ = form.label :remember_me, t(:remember_me) .row .large-12.columns - = form.submit t(:label_login), { class: "button primary", tabindex: 4 } + = form.submit t(:label_login), { class: "button primary", tabindex: 4 } \ No newline at end of file diff --git a/app/views/spree/user_sessions/create.turbo_stream.haml b/app/views/spree/user_sessions/create.turbo_stream.haml new file mode 100644 index 0000000000..2621c4fb5d --- /dev/null +++ b/app/views/spree/user_sessions/create.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update 'login-feedback' do + = render partial: 'layouts/alert', locals: { message: @message, type: 'alert' } \ No newline at end of file diff --git a/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml b/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml new file mode 100644 index 0000000000..52984d1171 --- /dev/null +++ b/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update 'login-feedback' do + = render partial: 'layouts/alert', locals: @local_values \ No newline at end of file diff --git a/spec/controllers/spree/user_sessions_controller_spec.rb b/spec/controllers/spree/user_sessions_controller_spec.rb index cea3cc23e6..808b6320af 100644 --- a/spec/controllers/spree/user_sessions_controller_spec.rb +++ b/spec/controllers/spree/user_sessions_controller_spec.rb @@ -15,7 +15,7 @@ RSpec.describe Spree::UserSessionsController do it "redirects to root" do spree_post :create, spree_user: { email: user.email, password: user.password } - expect(response).to have_http_status(:ok) + expect(response).to have_http_status(:found) expect(response.body).to match(root_path).and match("redirect") end end @@ -26,7 +26,7 @@ RSpec.describe Spree::UserSessionsController do it "redirects to checkout" do spree_post :create, spree_user: { email: user.email, password: user.password } - expect(response).to have_http_status(:ok) + expect(response).to have_http_status(:found) expect(response.body).to match(checkout_path).and match("redirect") end end @@ -36,7 +36,8 @@ RSpec.describe Spree::UserSessionsController do render_views it "returns an error" do - spree_post :create, spree_user: { email: user.email, password: "wrong" } + spree_post :create, spree_user: { email: user.email, password: "wrong" }, + format: :turbo_stream expect(response).to have_http_status(:unauthorized) expect(response.body).to include "Invalid email or password"