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

Version Path
symphonia-3.4.0 lib/symphonia/model_filters/select_filter.rb
symphonia-3.3.4 lib/symphonia/model_filters/select_filter.rb
symphonia-3.3.3 lib/symphonia/model_filters/select_filter.rb
symphonia-3.3.2 lib/symphonia/model_filters/select_filter.rb
symphonia-3.3.0 lib/symphonia/model_filters/select_filter.rb
symphonia-3.2.4 lib/symphonia/model_filters/select_filter.rb
symphonia-3.2.3 lib/symphonia/model_filters/select_filter.rb
symphonia-3.2.2 lib/symphonia/model_filters/select_filter.rb
symphonia-3.2.1 lib/symphonia/model_filters/select_filter.rb
symphonia-3.1.5 lib/symphonia/model_filters/select_filter.rb
symphonia-3.1.4 lib/symphonia/model_filters/select_filter.rb
symphonia-3.1.3 lib/symphonia/model_filters/select_filter.rb
symphonia-3.1.2 lib/symphonia/model_filters/select_filter.rb
symphonia-3.1.1 lib/symphonia/model_filters/select_filter.rb
symphonia-3.1.0 lib/symphonia/model_filters/select_filter.rb
symphonia-3.0.3 lib/symphonia/model_filters/select_filter.rb
symphonia-3.0.2 lib/symphonia/model_filters/select_filter.rb
symphonia-2.2.1 lib/symphonia/model_filters/select_filter.rb
symphonia-3.0.1 lib/symphonia/model_filters/select_filter.rb
symphonia-3.0.0 lib/symphonia/model_filters/select_filter.rb