Class: Plutonium::Query::Filters::Select

Inherits:
Plutonium::Query::Filter show all
Defined in:
lib/plutonium/query/filters/select.rb

Overview

Select filter for choosing from a predefined collection of options

Examples:

Basic usage with array

filter :status, with: :select, choices: %w[draft published archived]

With proc for dynamic choices

filter :category, with: :select, choices: -> { Category.pluck(:name, :id) }

With multiple selection

filter :tags, with: :select, choices: %w[ruby rails js], multiple: true

Instance Attribute Summary

Attributes inherited from Plutonium::Query::Filter

#key

Instance Method Summary collapse

Methods inherited from Plutonium::Query::Filter

lookup

Methods included from Definition::Presentable

#description, #icon, #label

Constructor Details

#initialize(choices: nil, multiple: false) ⇒ Select

Returns a new instance of Select.



16
17
18
19
20
# File 'lib/plutonium/query/filters/select.rb', line 16

def initialize(choices: nil, multiple: false, **)
  super(**)
  @choices = choices
  @multiple = multiple
end

Instance Method Details

#apply(scope, value:) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/plutonium/query/filters/select.rb', line 22

def apply(scope, value:)
  return scope if value.blank?

  if @multiple && value.is_a?(Array)
    scope.where(key => value.reject(&:blank?))
  else
    scope.where(key => value)
  end
end

#customize_inputsObject



32
33
34
35
36
37
38
# File 'lib/plutonium/query/filters/select.rb', line 32

def customize_inputs
  input :value,
    as: :select,
    choices: resolved_choices,
    multiple: @multiple,
    include_blank: @multiple ? false : "All"
end