Add caching and http caching to the cards index screen
This commit is contained in:
@@ -15,6 +15,8 @@ class CardsController < ApplicationController
|
||||
@on_deck = page_and_filter_for @filter.with(engagement_status: "on_deck"), per_page: PAGE_SIZE
|
||||
@doing = page_and_filter_for @filter.with(engagement_status: "doing"), per_page: PAGE_SIZE
|
||||
@closed = page_and_filter_for_closed_cards
|
||||
|
||||
fresh_when etag: [ @considering, @on_deck, @doing, @closed ].collect { it.page.records }
|
||||
end
|
||||
|
||||
def create
|
||||
|
||||
@@ -61,8 +61,12 @@ class Filter < ApplicationRecord
|
||||
ActiveSupport::Cache.expand_cache_key [ params_digest ], "filter"
|
||||
end
|
||||
|
||||
def only_closed?
|
||||
indexed_by.closed? || closure_window || closers.present?
|
||||
end
|
||||
|
||||
private
|
||||
def include_closed_cards?
|
||||
indexed_by.closed? || closure_window || closers.present? || card_ids.present?
|
||||
only_closed? || card_ids.present?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ module Filter::Params
|
||||
# +as_params+ uses `resource#ids` instead of `#resource_ids`
|
||||
# because the latter won't work on unpersisted filters.
|
||||
def as_params
|
||||
{}.tap do |params|
|
||||
@as_params ||= {}.tap do |params|
|
||||
params[:indexed_by] = indexed_by
|
||||
params[:sorted_by] = sorted_by
|
||||
params[:engagement_status] = engagement_status
|
||||
|
||||
@@ -4,6 +4,7 @@ class User::Filtering
|
||||
attr_reader :user, :filter, :expanded
|
||||
|
||||
delegate :as_params, :any?, to: :filter
|
||||
delegate :only_closed?, to: :filter
|
||||
|
||||
def initialize(user, filter, expanded: false)
|
||||
@user, @filter, @expanded = user, filter, expanded
|
||||
|
||||
@@ -40,15 +40,6 @@
|
||||
dragover->drag-and-drop#dragOver
|
||||
drop->drag-and-drop#drop
|
||||
dragend->drag-and-drop#dragEnd" } do %>
|
||||
|
||||
<div class="card-columns" data-controller="related-element" data-related-element-highlight-class="cards--related">
|
||||
<% unless @filter.closers.any? %>
|
||||
<%= render "cards/index/engagement/on_deck", **@on_deck.to_h %>
|
||||
<%= render "cards/index/engagement/considering", **@considering.to_h %>
|
||||
<%= render "cards/index/engagement/doing", **@doing.to_h %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
|
||||
<%= render "cards/index/engagement/closed", **@closed.to_h %>
|
||||
<%= render "cards/index/columns", user_filtering: @user_filtering, on_deck: @on_deck, considering: @considering, doing: @doing, closed: @closed %>
|
||||
<% end %>
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<% cache [ on_deck, considering, doing, closed ].collect { it.page.records } do %>
|
||||
<div class="card-columns" data-controller="related-element" data-related-element-highlight-class="cards--related">
|
||||
<% unless user_filtering.only_closed? %>
|
||||
<%= render "cards/index/engagement/on_deck", user_filtering: user_filtering, **on_deck.to_h %>
|
||||
<%= render "cards/index/engagement/considering", user_filtering: user_filtering, **considering.to_h %>
|
||||
<%= render "cards/index/engagement/doing", user_filtering: user_filtering, **doing.to_h %>
|
||||
<% end %>
|
||||
|
||||
<%= render "cards/index/engagement/closed", user_filtering: user_filtering, **closed.to_h %>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -10,6 +10,6 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<p class="txt-normal translucent"><%= @user_filtering.any? ? "No matches" : "Nothing here" %></p>
|
||||
<p class="txt-normal translucent"><%= user_filtering.any? ? "No matches" : "Nothing here" %></p>
|
||||
<% end %>
|
||||
</section>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
data-related-element-group-value="card-columns"
|
||||
data-action="mouseover->related-element#highlight mouseout->related-element#unhighlight">
|
||||
<div class="cards__decoration"></div>
|
||||
<%= render "cards/index/add_card_button", user_filtering: @user_filtering %>
|
||||
<%= render "cards/index/add_card_button", user_filtering: user_filtering %>
|
||||
<% if page.used? %>
|
||||
<%= render partial: "cards/display/preview", collection: page.records, as: :card, locals: { draggable: true }, cached: true %>
|
||||
|
||||
|
||||
@@ -21,6 +21,6 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<p class="txt-normal translucent"><%= @user_filtering.any? ? "No matches" : "Nothing here" %></p>
|
||||
<p class="txt-normal translucent"><%= user_filtering.any? ? "No matches" : "Nothing here" %></p>
|
||||
<% end %>
|
||||
</section>
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<p class="txt-normal translucent"><%= filter.any? ? "No matches" : "Nothing here" %></p>
|
||||
<p class="txt-normal translucent"><%= user_filtering.any? ? "No matches" : "Nothing here" %></p>
|
||||
<% end %>
|
||||
</section>
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
<aside class="filters flex align-center gap-half justify-center center margin-block-end">
|
||||
<div class="flex-inline center align-center gap-half">
|
||||
<%= render "filters/settings/toggle", user_filtering: user_filtering %>
|
||||
<% cache user_filtering do %>
|
||||
<aside class="filters flex align-center gap-half justify-center center margin-block-end">
|
||||
<div class="flex-inline center align-center gap-half">
|
||||
<%= render "filters/settings/toggle", user_filtering: user_filtering %>
|
||||
|
||||
<%= render "filters/settings/sorted_by", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/indexed_by", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/tags", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/assignees", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/creators", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/closers", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/time_window", user_filtering: user_filtering, name: :creation, label: "Created" %>
|
||||
<%= render "filters/settings/time_window", user_filtering: user_filtering, name: :closure, label: "Closed" %>
|
||||
<%= render "filters/settings/terms", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/sorted_by", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/indexed_by", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/tags", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/assignees", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/creators", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/closers", user_filtering: user_filtering %>
|
||||
<%= render "filters/settings/time_window", user_filtering: user_filtering, name: :creation, label: "Created" %>
|
||||
<%= render "filters/settings/time_window", user_filtering: user_filtering, name: :closure, label: "Closed" %>
|
||||
<%= render "filters/settings/terms", user_filtering: user_filtering %>
|
||||
|
||||
<%= render "filters/settings/controls", user_filtering: user_filtering %>
|
||||
</div>
|
||||
</aside>
|
||||
<%= render "filters/settings/controls", user_filtering: user_filtering %>
|
||||
</div>
|
||||
</aside>
|
||||
<% end %>
|
||||
|
||||
Reference in New Issue
Block a user