Class: ActiveAdmin::Views::PaginatedCollection
- Inherits:
-
Component
- Object
- Arbre::Component
- Component
- ActiveAdmin::Views::PaginatedCollection
- Defined in:
- lib/active_admin/views/components/paginated_collection.rb
Overview
Wraps the content with pagination and available formats.
Example:
paginated_collection collection, entry_name: "Post" do
div do
h2 "Inside the
end
end
This will create a div with a sentence describing the number of posts in one of the following formats:
-
“No Posts found”
-
“Showing all 10 Posts”
-
“Showing Posts 1 - 30 of 31 in total”
It will also generate pagination links.
Instance Attribute Summary collapse
-
#collection ⇒ Object
readonly
Returns the value of attribute collection.
Instance Method Summary collapse
-
#add_child(*args, &block) ⇒ Object
Override add_child to insert all children into the @contents div.
-
#build(collection, options = {}) ⇒ Object
Builds a new paginated collection component.
- #build_pagination ⇒ Object protected
- #build_pagination_with_formats(options) ⇒ Object protected
- #build_per_page_select ⇒ Object protected
-
#page_entries_info(options = {}) ⇒ Object
protected
modified from will_paginate.
Methods included from Helpers::Collection
#collection_is_empty?, #collection_size
Instance Attribute Details
#collection ⇒ Object (readonly)
Returns the value of attribute collection.
30 31 32 |
# File 'lib/active_admin/views/components/paginated_collection.rb', line 30 def collection @collection end |
Instance Method Details
#add_child(*args, &block) ⇒ Object
Override add_child to insert all children into the @contents div
59 60 61 62 63 64 65 |
# File 'lib/active_admin/views/components/paginated_collection.rb', line 59 def add_child(*args, &block) if @built @contents.add_child(*args, &block) else super end end |
#build(collection, options = {}) ⇒ Object
Builds a new paginated collection component
collection => A paginated collection from kaminari options => These options will be passed to ‘page_entries_info`
entry_name => The name to display for this resource collection
params => Extra parameters for pagination (e.g. { anchor: 'details' })
param_name => Parameter name for page number in the links (:page by default)
download_links => Download links override (false or [:csv, :pdf])
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/active_admin/views/components/paginated_collection.rb', line 41 def build(collection, = {}) @collection = collection @params = .delete(:params) @param_name = .delete(:param_name) @download_links = .delete(:download_links) @display_total = .delete(:pagination_total) { true } @per_page = .delete(:per_page) unless collection.respond_to?(:total_pages) raise(StandardError, "Collection is not a paginated scope. Set collection.page(params[:page]).per(10) before calling :paginated_collection.") end @contents = div(class: "paginated_collection_contents") build_pagination_with_formats() @built = true end |
#build_pagination ⇒ Object (protected)
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/active_admin/views/components/paginated_collection.rb', line 95 def build_pagination = { theme: @display_total ? "active_admin" : "active_admin_countless" } [:params] = @params if @params [:param_name] = @param_name if @param_name if !@display_total # The #paginate method in kaminari will query the resource with a # count(*) to determine how many pages there should be unless # you pass in the :total_pages option. We issue a query to determine # if there is another page or not, but the limit/offset make this # query fast. offset = collection.offset(collection.current_page * collection.limit_value).limit(1).count [:total_pages] = collection.current_page + offset [:right] = 0 end text_node paginate collection, ** end |
#build_pagination_with_formats(options) ⇒ Object (protected)
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/active_admin/views/components/paginated_collection.rb', line 69 def build_pagination_with_formats() div class: "paginated-collection-footer" do build_per_page_select if @per_page.is_a?(Array) build_pagination div(page_entries_info().html_safe, class: "pagination_information") formats = build_download_formats @download_links build_download_format_links formats if formats.any? end end |
#build_per_page_select ⇒ Object (protected)
80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/active_admin/views/components/paginated_collection.rb', line 80 def build_per_page_select div class: "pagination_per_page" do text_node I18n.t("active_admin.pagination.per_page") select do @per_page.each do |per_page| option( per_page, value: per_page, selected: collection.limit_value == per_page ? "selected" : nil ) end end end end |
#page_entries_info(options = {}) ⇒ Object (protected)
modified from will_paginate
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/active_admin/views/components/paginated_collection.rb', line 118 def page_entries_info( = {}) if [:entry_name] entry_name = [:entry_name] entries_name = [:entries_name] || entry_name.pluralize elsif collection_is_empty? entry_name = I18n.t "active_admin.pagination.entry", count: 1, default: "entry" entries_name = I18n.t "active_admin.pagination.entry", count: 2, default: "entries" else key = "activerecord.models." + collection.first.class.model_name.i18n_key.to_s entry_name = I18n.translate key, count: 1, default: collection.first.class.name.underscore.sub("_", " ") entries_name = I18n.translate key, count: collection.size, default: entry_name.pluralize end if @display_total if collection.total_pages < 2 case collection_size when 0; I18n.t("active_admin.pagination.empty", model: entries_name) when 1; I18n.t("active_admin.pagination.one", model: entry_name) else; I18n.t("active_admin.pagination.one_page", model: entries_name, n: collection.total_count) end else offset = (collection.current_page - 1) * collection.limit_value total = collection.total_count I18n.t "active_admin.pagination.multiple", model: entries_name, total: total, from: offset + 1, to: offset + collection_size end else # Do not display total count, in order to prevent a `SELECT count(*)`. # To do so we must not call `collection.total_pages` offset = (collection.current_page - 1) * collection.limit_value I18n.t "active_admin.pagination.multiple_without_total", model: entries_name, from: offset + 1, to: offset + collection_size end end |