Pin without redirect
Use turbo stream response to save on the redirect latency
This commit is contained in:
@@ -6,16 +6,12 @@ class Cards::PinsController < ApplicationController
|
||||
|
||||
def create
|
||||
pin = @card.pin_by Current.user
|
||||
|
||||
broadcast_my_new pin
|
||||
redirect_to card_pin_path(@card)
|
||||
end
|
||||
|
||||
def destroy
|
||||
pin = @card.unpin_by Current.user
|
||||
|
||||
broadcast_my_removed pin
|
||||
redirect_to card_pin_path(@card)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<div id="<%= dom_id(card, :pin_button) %>">
|
||||
<% if card.pinned_by? Current.user %>
|
||||
<%= button_to card_pin_path(card), method: :delete, class: "btn btn--reversed" do %>
|
||||
<%= icon_tag "pinned" %> <span class="for-screen-reader">Un-pin this card</span>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= button_to card_pin_path(card), class: "btn" do %>
|
||||
<%= icon_tag "unpinned" %> <span class="for-screen-reader">Pin this card</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
@@ -0,0 +1 @@
|
||||
<%= turbo_stream.replace [ @card, :pin_button ], partial: "cards/pins/pin", locals: { card: @card } %>
|
||||
@@ -0,0 +1 @@
|
||||
<%= turbo_stream.replace [ @card, :pin_button ], partial: "cards/pins/pin", locals: { card: @card } %>
|
||||
@@ -1,13 +1,3 @@
|
||||
<%= turbo_frame_tag dom_id(@card, :pin) do %>
|
||||
<% if @card.pinned_by? Current.user %>
|
||||
<%= button_to card_pin_path(@card), method: :delete, class: "btn btn--reversed" do %>
|
||||
<%= icon_tag "pinned" %>
|
||||
<span class="for-screen-reader">Un-pin this card</span>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= button_to card_pin_path(@card), class: "btn" do %>
|
||||
<%= icon_tag "unpinned" %>
|
||||
<span class="for-screen-reader">Pin this card</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= render "cards/pins/pin", card: @card %>
|
||||
<% end %>
|
||||
|
||||
@@ -9,23 +9,23 @@ class Cards::PinsControllerTest < ActionDispatch::IntegrationTest
|
||||
assert_changes -> { cards(:layout).pinned_by?(users(:kevin)) }, from: false, to: true do
|
||||
perform_enqueued_jobs do
|
||||
assert_turbo_stream_broadcasts([ users(:kevin), :pins ], count: 1) do
|
||||
post card_pin_path(cards(:layout))
|
||||
post card_pin_path(cards(:layout)), as: :turbo_stream
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assert_redirected_to card_pin_path(cards(:layout))
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
test "destroy" do
|
||||
assert_changes -> { cards(:shipping).pinned_by?(users(:kevin)) }, from: true, to: false do
|
||||
perform_enqueued_jobs do
|
||||
assert_turbo_stream_broadcasts([ users(:kevin), :pins ], count: 1) do
|
||||
delete card_pin_path(cards(:shipping))
|
||||
delete card_pin_path(cards(:shipping)), as: :turbo_stream
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assert_redirected_to card_pin_path(cards(:shipping))
|
||||
assert_response :success
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user