app/views/shared/_data_list.html.erb
<div class="page-section">
<div class="card card-fluid">
<div class="card-header nav-scroller">
<ul class="nav nav-tabs card-header-tabs">
<% @scopable_values.flatten.each_with_index do |item| %>
<li class="nav-item">
<%= tag.span class: "nav-link show pointer #{"active" if item == @scoped_by}", data: navigable_expandos(reflex: "click->ScopableReflex#scope", scoped_by: item) do %>
<%= item.capitalize %>
<% end %>
</li>
<% end %>
</ul>
</div>
<div class="card-body">
<div class="row">
<%= tag.div class: "col-auto d-none d-sm-flex", data: navigable_expandos(controller: "sortable-list") do %>
<div class="dropdown">
<div class="btn-group" role="group" aria-label="sort">
<%= tag.button current_sort_direction_icon, class: "btn btn-secondary", aria: {label: "flip list order"}, data: navigable_expandos(action: "click->sortable-list#flip") %>
<button class="btn btn-secondary" style="min-width:112px;" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" aria-label="sort options">
<%= @sorted_by.titleize %>
<span class="fa fa-caret-down"></span>
</button>
<div class="dropdown-menu dropdown-menu-right stop-propagation">
<div class="dropdown-arrow"></div>
<h6 class="dropdown-header"> Sort By </h6>
<% @sortable_columns.each do |column_name| %>
<label class="custom-control custom-radio">
<input type="radio" class="custom-control-input" name="sortCampaignBy" data-action="click->sortable-list#sort" data-sorted-by="<%= column_name %>" />
<span class="custom-control-label"><%= column_name.titleize %> </span>
</label>
<% end %>
</div>
</div>
</div>
<% end %>
</div>
</div>
<div class="tab-content pt-3">
<div class="tab-pane fade show active">
<div class="list-group list-group-flush list-group-divider">
<%= render partial: "/#{resource_name}/list_group_item", collection: collection, as: resource_name&.singularize&.to_sym %>
</div>
<%= pagination_wrapper do %>
<span>
<%= render "/shared/paginator" %>
</span>
<span class="ml-auto">
<%= pagy_entries(pagy) %>
</span>
<% end if pagy.pages > 1 %>
</div>
</div>
</div>
</div>