Class: ActiveAdmin::Views::PaginatedCollection

Inherits:
Component
  • Object
show all
Includes:
Helpers::Collection, ActiveAdmin::ViewHelpers::DownloadFormatLinksHelper
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”

  • “Displaying all 10 Posts”

  • “Displaying Posts 1 - 30 of 31 in total”

It will also generate pagination links.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ActiveAdmin::ViewHelpers::DownloadFormatLinksHelper

#build_download_format_links

Methods included from Helpers::Collection

#collection_is_empty?, #collection_size

Instance Attribute Details

#collectionObject (readonly)

Returns the value of attribute collection.



28
29
30
# File 'lib/active_admin/views/components/paginated_collection.rb', line 28

def collection
  @collection
end

Instance Method Details

#add_child(*args, &block) ⇒ Object

Override add_child to insert all children into the @contents div



54
55
56
57
58
59
60
# File 'lib/active_admin/views/components/paginated_collection.rb', line 54

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
param_name     => Parameter name for page number in the links (:page by default)
download_links => Download links override (false or [:csv, :pdf])


38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/active_admin/views/components/paginated_collection.rb', line 38

def build(collection, options = {})
  @collection     = collection
  @param_name     = options.delete(:param_name)
  @download_links = options.delete(:download_links)
  @display_total  = options.delete(:pagination_total) { true }

  unless collection.respond_to?(:num_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(options)
  @built = true
end

#build_paginationObject (protected)



78
79
80
81
82
83
# File 'lib/active_admin/views/components/paginated_collection.rb', line 78

def build_pagination
  options =  request.query_parameters.except(:commit, :format)
  options[:param_name] = @param_name if @param_name

  text_node paginate(collection, options.symbolize_keys)
end

#build_pagination_with_formats(options) ⇒ Object (protected)



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/active_admin/views/components/paginated_collection.rb', line 64

def build_pagination_with_formats(options)
  div :id => "index_footer" do
    build_pagination
    div(page_entries_info(options).html_safe, :class => "pagination_information")

    if @download_links.is_a?(Array) && !@download_links.empty?
      build_download_format_links @download_links
    else
      build_download_format_links unless @download_links == false
    end

  end
end

#page_entries_info(options = {}) ⇒ Object (protected)

modified from will_paginate



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/active_admin/views/components/paginated_collection.rb', line 89

def page_entries_info(options = {})
  if options[:entry_name]
    entry_name   = options[:entry_name]
    entries_name = options[: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 collection.num_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
    if @display_total
      total  = collection.total_count
      I18n.t 'active_admin.pagination.multiple', :model => entries_name, :total => total,
        :from => offset + 1, :to => offset + collection_size
    else
      I18n.t 'active_admin.pagination.multiple_without_total', :model => entries_name,
        :from => offset + 1, :to => offset + collection_size
    end
  end
end