Sha256: 5e05fd2590c14d5c0236caf6bbab21635e7c9725e55c285b06c7d50ba75dcd5e
Contents?: true
Size: 1.83 KB
Versions: 20
Compression:
Stored size: 1.83 KB
Contents
module Symphonia module ModelFilters class SelectFilter < StringFilter attr_accessor :available_values def initialize(name, query, options = {}) super @operator = 'in' end def available_values return @available_values.call(_c, self) if @available_values.is_a? Proc @available_values || case @attribute when Symphonia::ModelAttributes::EnumAttribute @query.model.send(@attribute.name.to_s.pluralize).keys end end def value=(q) @value = if q.is_a?(Array) q else q.to_s.split("|") end end def operator=(o) if o == '!' @operator = 'not_in' end end def apply(scope) Rails.logger.debug("Apply filter #{name} '#{operator}' #{value}") t = scope.arel_table scope.where(t[name].send(operator, value)) end def form_field(_c) selected = Array(@query.active_filters[name]) _c.content_tag(:div, class: 'input-group') do _c.content_tag(:div, class: 'input-group-prepend') do _c.content_tag(:span, _c.check_box_tag("o[#{form_field_name}]", '!', operator == 'not_in', title: 'Not In'), class: "input-group-text") end + _c.select_tag("#{form_field_name}[]", _c.options_for_select(available_values, selected), class: 'form-control', include_blank: true, multiple: selected.size > 1) + _c.content_tag(:div, _c.link_to(_c.fa_icon('plus-square-o'), 'javascript:void(0)', onclick: "toggleMultiSelect($(this).closest('.input-group').find('select'))", title: I18n.t(:title_toggle_multiselect), class: "input-group-text"), class: 'input-group-append') end end end end end
Version data entries
20 entries across 20 versions & 1 rubygems