You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
8.3 KiB
187 lines
8.3 KiB
<% query = params[:query] %> |
|
<% params = request.params.except(:authenticity_token, :action, :controller, :utf8, :bulk_export) %> |
|
<% params.delete(:query) if params[:query].blank? %> |
|
<% params.delete(:sort_reverse) unless params[:sort_reverse] == "true" %> |
|
<% sort_reverse = params[:sort_reverse] %> |
|
<% sort = params[:sort] %> |
|
<% params.delete(:sort) if params[:sort] == @model_config.list.sort_by.to_s %> |
|
<% export_action = RailsAdmin::Config::Actions.find(:export, { controller:, abstract_model: @abstract_model }) %> |
|
<% export_action = nil unless export_action && authorized?(export_action.authorization_key, @abstract_model) %> |
|
<% description = RailsAdmin.config(@abstract_model.model_name).description %> |
|
<% properties = @model_config.list.with(controller:, view: self, object: @abstract_model.model.new).fields_for_table %> |
|
<% checkboxes = @model_config.list.checkboxes? %> |
|
<% table_table_header_count = begin |
|
count = checkboxes ? 1 : 0 |
|
count += properties.count |
|
end %> |
|
|
|
<% content_for :contextual_tabs do %> |
|
<% if filterable_fields.present? %> |
|
<li class="nav-item dropdown"> |
|
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#"> |
|
<%= t("admin.misc.add_filter") %> |
|
<b class="caret"></b> |
|
</a> |
|
<ul class="dropdown-menu dropdown-menu-end" id="filters"> |
|
<% filterable_fields.each do |field| %> |
|
<li> |
|
<a |
|
href="#" |
|
class="dropdown-item" |
|
data-options="<%= field.with(view: self).filter_options.to_json %>"> |
|
<%= field.label %> |
|
</a> |
|
</li> |
|
<% end %> |
|
</ul> |
|
</li> |
|
<% end %> |
|
<% if checkboxes %> |
|
<%= bulk_menu %> |
|
<% end %> |
|
<% end %> |
|
|
|
<style> |
|
<% properties.select { |p| p.column_width.present? }.each do |property| %> |
|
<%= "#list th.#{property.css_class} { width: #{property.column_width}px; min-width: #{property.column_width}px; }" %> |
|
<%= "#list td.#{property.css_class} { max-width: #{property.column_width}px;}" %> |
|
<% end %> |
|
</style> |
|
|
|
<div id="list"> |
|
<%= form_tag(index_path(params.except(*%w[page f query])), method: :get) do %> |
|
<div class="card mb-3 p-3 bg-light"> |
|
<div class="row rails-admin-filters-box" data-options="<%= ordered_filter_options.to_json %>" id="filters_box"></div> |
|
<hr class="filters_box" style="display:<%= ordered_filters.empty? ? "none" : "block" %>"> |
|
<div class="row"> |
|
<div class="col-sm-8"> |
|
<div class="input-group"> |
|
<input class="govuk-input govuk-input--width-20" name="query" placeholder="<%= t("admin.misc.filter") %>" type="search" value="<%= query %>" autocomplete="off"> |
|
<div class="govuk-!-margin-left-2"> |
|
<button class="govuk-button govuk-!-margin-bottom-0" data-disable-with="<%= "<i class=\"fas fa-sync\"></i>#{t('admin.misc.refresh')}" %>" type="submit"> |
|
<i class="fas fa-sync"></i> |
|
<%= t("admin.misc.refresh") %> |
|
</button> |
|
</div> |
|
<div id="remove_filter" title="<%= t("admin.misc.reset_filters") %>"> |
|
<button class="govuk-button govuk-button--secondary govuk-!-margin-bottom-0"> |
|
<i class="fas fa-times"></i> |
|
</button> |
|
</div> |
|
</div> |
|
<% if @model_config.list.search_help.present? %> |
|
<div class="form-text"><%= @model_config.list.search_help %></div> |
|
<% end %> |
|
</div> |
|
<div class="col-sm-4 text-end"> |
|
<% if export_action %> |
|
<%= govuk_button_link_to wording_for(:link, export_action), export_path(params.except("page")), class: "govuk-!-margin-bottom-0" %> |
|
<% end %> |
|
</div> |
|
</div> |
|
</div> |
|
<% end %> |
|
<% unless @model_config.list.scopes.empty? %> |
|
<ul class="nav nav-tabs" id="scope_selector"> |
|
<% @model_config.list.scopes.each_with_index do |scope, index| %> |
|
<% scope = "_all" if scope.nil? %> |
|
<li class="nav-item"> |
|
<a href="<%= index_path(params.merge(scope:, page: nil)) %>" class="nav-link <%= "active" if scope.to_s == params[:scope] || (params[:scope].blank? && index.zero?) %>"> |
|
<%= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize)) %> |
|
</a> |
|
</li> |
|
<% end %> |
|
</ul> |
|
<% end %> |
|
<%= form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: %w[form mb-3] do %> |
|
<%= hidden_field_tag :bulk_action %> |
|
<% if description.present? %> |
|
<p> |
|
<strong> |
|
<%= description %> |
|
</strong> |
|
</p> |
|
<% end %> |
|
<div id="sidescroll" class="rails-admin-sidescroll"> |
|
<table class="table table-condensed table-striped table-hover"> |
|
<thead> |
|
<tr> |
|
<% if checkboxes %> |
|
<th class="shrink sticky"> |
|
<input class="toggle" type="checkbox"> |
|
</th> |
|
<% end %> |
|
<% properties.each do |property| %> |
|
<% selected = (sort == property.name.to_s) %> |
|
<% if property.sortable %> |
|
<% sort_location = index_path params.except("sort_reverse").except("page").merge(sort: property.name).merge(selected && sort_reverse != "true" ? { sort_reverse: "true" } : {}) %> |
|
<% sort_direction = (if selected |
|
sort_reverse == "true" ? "headerSortUp" : "headerSortDown" |
|
end) %> |
|
<% end %> |
|
<th class="<%= [property.sortable && "header", property.sortable && sort_direction, property.sticky? && "sticky", property.css_class, property.type_css_class].select(&:present?).join(" ") %>" data-href="<%= property.sortable && sort_location %>" rel="tooltip" title="<%= property.hint %>"> |
|
<%= property.label %> |
|
</th> |
|
<% end %> |
|
<th class="last shrink"></th> |
|
</tr> |
|
</thead> |
|
<tbody class="table-group-divider"> |
|
<% @objects.each do |object| %> |
|
<tr class="<%= @abstract_model.param_key %>_row <%= @model_config.list.with(object:).row_css_class %>"> |
|
<% if checkboxes %> |
|
<td class="sticky"> |
|
<%= check_box_tag "bulk_ids[]", object.id.to_s, false %> |
|
</td> |
|
<% end %> |
|
<% properties.map { |property| property.bind(:object, object) }.each do |property| %> |
|
<% value = property.pretty_value %> |
|
<%= content_tag(:td, class: [property.sticky? && "sticky", property.css_class, property.type_css_class].select(&:present?).map { |x| "rails-admin-#{x}" }, title: strip_tags(value.to_s)) do %> |
|
<%= value %> |
|
<% end %> |
|
<% end %> |
|
<td class="last links ra-sidescroll-frozen rails-admin-actions"> |
|
<ul class="nav list-inline"> |
|
<%= menu_for :member, @abstract_model, object, true %> |
|
</ul> |
|
</td> |
|
</tr> |
|
<% end %> |
|
<% if @objects.empty? %> |
|
<tr class="empty_row"> |
|
<td colspan="<%= table_table_header_count %>"> |
|
<%= I18n.t("admin.actions.index.no_records") %> |
|
</td> |
|
</tr> |
|
<% end %> |
|
</tbody> |
|
</table> |
|
</div> |
|
<% if @model_config.list.limited_pagination %> |
|
<div class="row"> |
|
<div class="col-md-6"> |
|
<%= paginate(@objects, theme: "ra-twitter-bootstrap/without_count", total_pages: Float::INFINITY) %> |
|
</div> |
|
</div> |
|
<% elsif @objects.respond_to?(:total_count) %> |
|
<% total_count = @objects.total_count.to_i %> |
|
<div class="row"> |
|
<div class="col-md-6"> |
|
<%= paginate(@objects, theme: "ra-twitter-bootstrap") %> |
|
</div> |
|
</div> |
|
<div class="row"> |
|
<div class="col-md-6"> |
|
<%= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "govuk-button govuk-button--secondary") unless total_count > 100 || total_count <= @objects.to_a.size %> |
|
</div> |
|
</div> |
|
<div class="clearfix total-count"> |
|
<%= "#{total_count} #{@model_config.pluralize(total_count).downcase}" %> |
|
</div> |
|
<% else %> |
|
<div class="clearfix total-count"> |
|
<%= "#{@objects.size} #{@model_config.pluralize(@objects.size).downcase}" %> |
|
</div> |
|
<% end %> |
|
<% end %> |
|
</div>
|
|
|