Module: Effective::EffectiveDatatable::Ajax

Included in:
Datatable
Defined in:
app/models/effective/effective_datatable/ajax.rb

Instance Method Summary collapse

Instance Method Details

#display_entriesObject



48
49
50
51
52
53
54
# File 'app/models/effective/effective_datatable/ajax.rb', line 48

def display_entries
  @display_entries ||= begin
    entries = (@default_entries.presence || EffectiveDatatables.default_entries)
    entries = -1 if entries.to_s.downcase == 'all'
    [10, 25, 50, 100, 250, 1000, -1].include?(entries) ? entries : 25
  end
end

#display_table_columnsObject

This is for the ColReorder plugin It sends us a list of columns that are different than our table_columns order So this method just returns an array of column names, as per ColReorder



10
11
12
13
14
15
16
17
18
19
20
21
# File 'app/models/effective/effective_datatable/ajax.rb', line 10

def display_table_columns
  return nil if params[:columns].blank?

  @display_table_columns ||= (
    {}.tap do |retval|
      params[:columns].each do |_, column|
        retval[column[:name]] = table_columns[column[:name]] # Same order as ColReordernow
        retval[column[:name]][:visible] = (column[:visible] == 'true') # As per ColVis
      end
    end
  )
end

#order_directionObject



38
39
40
41
42
43
44
45
46
# File 'app/models/effective/effective_datatable/ajax.rb', line 38

def order_direction
  @order_direction ||= if params[:order].present?
    params[:order]['0'][:dir] == 'desc' ? :desc : :asc
  elsif @default_order.present?
    @default_order.values.first.to_s.downcase == 'desc' ? :desc : :asc
  else
    :asc
  end
end

#order_indexObject



34
35
36
# File 'app/models/effective/effective_datatable/ajax.rb', line 34

def order_index
  (table_columns[order_name][:index] || 0) rescue 0
end

#order_nameObject



23
24
25
26
27
28
29
30
31
32
# File 'app/models/effective/effective_datatable/ajax.rb', line 23

def order_name
  @order_name ||= begin
    if params[:order] && params[:columns]
      order_by_column_index = (params[:order]['0'][:column] rescue '0')
      (params[:columns][order_by_column_index] || {})[:name]
    elsif @default_order.present?
      @default_order.keys.first
    end || table_columns.find { |col, opts| opts[:type] != :bulk_actions_column }.first
  end
end

#pageObject



95
96
97
# File 'app/models/effective/effective_datatable/ajax.rb', line 95

def page
  params[:start].to_i / per_page + 1
end

#per_pageObject



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'app/models/effective/effective_datatable/ajax.rb', line 72

def per_page
  return 9999999 if simple?

  length = (params[:length].presence || display_entries).to_i

  if length == -1
    9999999
  elsif length > 0
    length
  else
    25
  end
end

#per_page=(length) ⇒ Object



86
87
88
89
90
91
92
93
# File 'app/models/effective/effective_datatable/ajax.rb', line 86

def per_page=(length)
  case length
  when Integer
    params[:length] = length
  when :all
    params[:length] = -1
  end
end

#search_termsObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/models/effective/effective_datatable/ajax.rb', line 56

def search_terms
  @search_terms ||= HashWithIndifferentAccess.new().tap do |terms|
    if params[:columns].present? # This is an AJAX request from the DataTable
      (params[:columns] || {}).each do |_, column|
        next if table_columns[column[:name]].blank? || (column[:search] || {})[:value].blank?

        terms[column[:name]] = column[:search][:value]
      end
    else # This is the initial render, and we have to apply default search terms only
      table_columns.each do |name, values|
        terms[name] = values[:filter][:selected] if values[:filter][:selected].present?
      end
    end
  end
end