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



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

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
# 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)

  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)



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

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)



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

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



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

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.translate("active_admin.pagination.entry", :count => 1, :default => 'entry')
    entries_name = I18n.translate("active_admin.pagination.entry", :count => 2, :default => 'entries')
  else
    entry_name = I18n.translate("activerecord.models.#{collection.first.class.model_name.i18n_key}", :count => 1, :default => collection.first.class.name.underscore.sub('_', ' '))
    entries_name = I18n.translate("activerecord.models.#{collection.first.class.model_name.i18n_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
    total = collection.total_count
    I18n.t('active_admin.pagination.multiple', :model => entries_name, :from => offset + 1, :to => offset + collection_size, :total => total)
  end
end