Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions app/views/events/_registration_section.html.erb
Original file line number Diff line number Diff line change
@@ -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 %>
<!-- ⭐ BUTTONS -->
<div class="flex flex-wrap items-center gap-3">
<% 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 %>
<span class="text-sm text-gray-500 italic">Registration closed</span>
<% end %>

<% if registered %>
<span class="text-xs bg-green-100 text-green-700 px-2 py-0.5 rounded-full">
You are registered!
</span>
<% end %>
</div>

<!-- ⭐ CALENDAR LINKS -->
<% if registered %>
<div class="flex gap-2 items-center text-sm text-gray-700"><%= event.calendar_links %></div>
<% end %>
<% end %>
3 changes: 2 additions & 1 deletion app/views/events/registrations/create.turbo_stream.erb
Original file line number Diff line number Diff line change
@@ -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" %>
3 changes: 2 additions & 1 deletion app/views/events/registrations/destroy.turbo_stream.erb
Original file line number Diff line number Diff line change
@@ -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" %>
33 changes: 1 addition & 32 deletions app/views/events/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -34,38 +34,7 @@
<div><%= @event.labelled_cost %></div>
<% end %>

<div class="registration-section flex flex-col gap-4 mb-6">
<!-- ⭐ BUTTONS -->
<div class="flex flex-wrap items-center gap-3">
<% 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 %>
<span class="text-sm text-gray-500 italic">Registration closed</span>
<% end %>

<% if registered %>
<span class="text-xs bg-green-100 text-green-700 px-2 py-0.5 rounded-full">
You are registered!
</span>
<% end %>
</div>
<!-- ⭐ CALENDAR LINKS -->
<% if registered %>
<div class="flex gap-2 items-center text-sm text-gray-700"><%= @event.calendar_links %></div>
<% end %>
</div>
<%= render "events/registration_section", event: @event %>

<% if @event.registration_close_date %>
<div>
Expand Down
41 changes: 41 additions & 0 deletions spec/system/events_show_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
# --------------------------------------------------
Expand Down