Handle user registration with turbo stream

This commit is contained in:
wandji20
2024-11-26 09:12:04 +01:00
committed by David Cook
parent f7e119d06f
commit 9fa715c709
6 changed files with 10 additions and 50 deletions

View File

@@ -3,7 +3,6 @@
module Spree
class UsersController < ::BaseController
include I18nHelper
include CablecarResponses
layout 'darkswarm'
@@ -25,34 +24,14 @@ module Spree
@unconfirmed_email = spree_current_user.unconfirmed_email
end
# Endpoint for queries to check if a user is already registered
def registered_email
registered = Spree::User.find_by(email: params[:email]).present?
if registered
render status: :ok, cable_ready: cable_car.
inner_html(
"#login-feedback",
partial("layouts/alert",
locals: { type: "alert", message: t('devise.failure.already_registered') })
).
dispatch_event(name: "login:modal:open")
else
head :not_found
end
end
def create
@user = Spree::User.new(user_params)
if @user.save
flash[:success] = t('devise.user_registrations.spree_user.signed_up_but_unconfirmed')
render cable_ready: cable_car.redirect_to(url: main_app.root_path)
redirect_to main_app.root_path
else
render status: :unprocessable_entity, cable_ready: cable_car.morph(
"#signup-tab",
partial("layouts/signup_tab", locals: { signup_form_user: @user })
)
render :create, status: :unprocessable_entity
end
end
@@ -97,14 +76,7 @@ module Spree
end
def render_alert_timestamp_error_message
render cable_ready: cable_car.inner_html(
"#signup-feedback",
partial("layouts/alert",
locals: {
type: "alert",
message: InvisibleCaptcha.timestamp_error_message
})
)
render :render_alert_timestamp_error_message
end
end
end

View File

@@ -1,14 +1,14 @@
- signup_form_user = Spree::User.new if local_assigns[:signup_form_user].nil?
#signup-tab
= form_with model: signup_form_user, url: spree.account_path, scope: :user, data: { remote: "true" } do |form|
= form_with model: signup_form_user, url: spree.account_path, scope: :user, data: { turbo: true } do |form|
.row
.large-12.columns#signup-feedback
.row
.large-12.columns
= form.label :email, t(:signup_email)
= form.email_field :email, { tabindex: 1, "data-login-modal-target": "email", "data-action": "input->login-modal#emailOnInput" }
= form.email_field :email, { tabindex: 1 }
= form.error_message_on :email
.row
.large-12.columns

View File

@@ -0,0 +1,2 @@
= turbo_stream.update 'signup-tab' do
= render partial: 'layouts/signup_tab', locals: { signup_form_user: @user }

View File

@@ -0,0 +1,3 @@
= turbo_stream.update 'signup-feedback' do
= render partial: 'layouts/alert',
locals: { type: "alert", message: InvisibleCaptcha.timestamp_error_message }

View File

@@ -16,7 +16,6 @@ Openfoodnetwork::Application.routes.draw do
get "/register", to: "registration#index", as: :registration
get "/register/auth", to: "registration#authenticate", as: :registration_auth
post "/user/registered_email", to: "spree/users#registered_email"
resources :locales, only: [:show]
# Redirects to global website

View File

@@ -55,22 +55,6 @@ RSpec.describe Spree::UsersController do
end
end
describe "#registered_email" do
routes { Openfoodnetwork::Application.routes }
let!(:user) { create(:user) }
it "returns ok (200) if email corresponds to a registered user" do
post :registered_email, params: { email: user.email }
expect(response).to have_http_status(:ok)
end
it "returns not_found (404) if email does not correspond to a registered user" do
post :registered_email, params: { email: 'nonregistereduser@example.com' }
expect(response).to have_http_status(:not_found)
end
end
describe '#load_object' do
it 'redirects to signup path if user is not found' do
allow(controller).to receive_messages(spree_current_user: nil)