diff --git a/app/views/events/_registration_section.html.erb b/app/views/events/_registration_section.html.erb new file mode 100644 index 000000000..75e4382bf --- /dev/null +++ b/app/views/events/_registration_section.html.erb @@ -0,0 +1,30 @@ +<% registered = event.event_registrations.exists?(registrant_id: current_user&.id) %> +<%= tag.div id: dom_id(event.object, :registration_section), class: "registration-section flex flex-col gap-4 mb-6" do %> + +
+ <% if registered %> + <%= button_to "De-register", + event_registrant_registration_path(event_id: event), + method: :delete, + data: { turbo_confirm: "Are you sure?" }, + class: "btn btn-secondary-outline" %> + <% elsif event.registerable? %> + <%= button_to "Register", + event_registrant_registration_path(event_id: event), + class: "btn btn-primary-outline" %> + <% else %> + Registration closed + <% end %> + + <% if registered %> + + You are registered! + + <% end %> +
+ + + <% if registered %> +
<%= event.calendar_links %>
+ <% end %> +<% end %> diff --git a/app/views/events/registrations/create.turbo_stream.erb b/app/views/events/registrations/create.turbo_stream.erb index 66e116a29..a317c10c2 100644 --- a/app/views/events/registrations/create.turbo_stream.erb +++ b/app/views/events/registrations/create.turbo_stream.erb @@ -1,2 +1,3 @@ -<%= turbo_stream.replace dom_id(@event, :card), partial: "events/card", locals: {event: @event} %> +<%= turbo_stream.replace dom_id(@event, :card), partial: "events/card", locals: { event: @event } %> +<%= turbo_stream.replace dom_id(@event, :registration_section), partial: "events/registration_section", locals: { event: @event.decorate } %> <%= turbo_stream.replace "flash_now", partial: "shared/flash_messages" %> diff --git a/app/views/events/registrations/destroy.turbo_stream.erb b/app/views/events/registrations/destroy.turbo_stream.erb index 66e116a29..a317c10c2 100644 --- a/app/views/events/registrations/destroy.turbo_stream.erb +++ b/app/views/events/registrations/destroy.turbo_stream.erb @@ -1,2 +1,3 @@ -<%= turbo_stream.replace dom_id(@event, :card), partial: "events/card", locals: {event: @event} %> +<%= turbo_stream.replace dom_id(@event, :card), partial: "events/card", locals: { event: @event } %> +<%= turbo_stream.replace dom_id(@event, :registration_section), partial: "events/registration_section", locals: { event: @event.decorate } %> <%= turbo_stream.replace "flash_now", partial: "shared/flash_messages" %> diff --git a/app/views/events/show.html.erb b/app/views/events/show.html.erb index dacb78a2c..91cc29c9e 100644 --- a/app/views/events/show.html.erb +++ b/app/views/events/show.html.erb @@ -34,38 +34,7 @@
<%= @event.labelled_cost %>
<% end %> -
- -
- <% registered = @event.event_registrations.exists?(registrant_id: current_user&.id) %> - - <% if registered %> - <%= button_to "De-register", - event_registrant_registration_path(event_id: @event), - method: :delete, - data: { - turbo_confirm: "Are you sure?", - }, - class: "btn btn-secondary-outline" %> - <% elsif @event.registerable? %> - <%= button_to "Register", - event_registrant_registration_path(event_id: @event), - class: "btn btn-primary-outline" %> - <% else %> - Registration closed - <% end %> - - <% if registered %> - - You are registered! - - <% end %> -
- - <% if registered %> -
<%= @event.calendar_links %>
- <% end %> -
+ <%= render "events/registration_section", event: @event %> <% if @event.registration_close_date %>
diff --git a/spec/system/events_show_spec.rb b/spec/system/events_show_spec.rb index ff0efefdf..2b4dcb424 100644 --- a/spec/system/events_show_spec.rb +++ b/spec/system/events_show_spec.rb @@ -130,6 +130,47 @@ end end + # -------------------------------------------------- + # REGISTRATION BUTTON UPDATES VIA TURBO + # -------------------------------------------------- + + describe "registration button updates via Turbo", js: true do + before { driven_by(:selenium_chrome_headless) } + + it "updates Register to De-register and shows badge without full page reload" do + sign_in(user) + visit event_path(event) + + expect(page).to have_button("Register") + expect(page).not_to have_text("You are registered!") + + click_button "Register" + + # Turbo stream replaces the registration section; we stay on the event page + expect(page).to have_current_path(event_path(event)) + expect(page).to have_button("De-register") + expect(page).to have_text("You are registered!") + expect(page).not_to have_button("Register") + end + + it "updates De-register back to Register after de-registering" do + create(:event_registration, event: event, registrant: user) + + sign_in(user) + visit event_path(event) + + expect(page).to have_button("De-register") + accept_confirm do + click_button "De-register" + end + + expect(page).to have_current_path(event_path(event)) + expect(page).to have_button("Register") + expect(page).not_to have_button("De-register") + expect(page).not_to have_text("You are registered!") + end + end + # -------------------------------------------------- # REGISTRATION CLOSE DATE SECTION # --------------------------------------------------