Sha256: 51242b5079613bb034fbfef63c3a70fcb4d8d6ac545eb69dba4380295944b390

Contents?: true

Size: 1.96 KB

Versions: 18

Compression:

Stored size: 1.96 KB

Contents

module Symphonia
  module ModelFilters
    class SelectFilter < StringFilter
      attr_writer :available_values

      def initialize(name, query, options = {})
        super
        @operator = 'in'
      end

      def available_values
        return @available_values.call(context, 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=(to)
        @value = if to.is_a?(Array)
                   to
                 else
                   to.to_s.split("|")
                 end
      end

      def operator=(to)
        @operator = 'not_in' if to == '!'
      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(context)
        selected = Array(@query.active_filters[name])
        context.content_tag(:div, class: 'input-group') do
          context.content_tag(:div, class: 'input-group-prepend') do
            context.content_tag(:span,
                                context.check_box_tag("o[#{form_field_name}]", '!', operator == 'not_in', title: 'Not In'), class: "input-group-text")
          end +
            context.select_tag("#{form_field_name}[]", context.options_for_select(available_values, selected),
                               class: 'form-control', include_blank: true, multiple: selected.size > 1) +
            context.content_tag(:div,
                                context.link_to(context.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

18 entries across 18 versions & 1 rubygems

Version Path
symphonia-6.0.6 lib/symphonia/model_filters/select_filter.rb
symphonia-6.0.5 lib/symphonia/model_filters/select_filter.rb
symphonia-6.0.4 lib/symphonia/model_filters/select_filter.rb
symphonia-6.0.2 lib/symphonia/model_filters/select_filter.rb
symphonia-6.0.1 lib/symphonia/model_filters/select_filter.rb
symphonia-6.0.0 lib/symphonia/model_filters/select_filter.rb
symphonia-5.0.6 lib/symphonia/model_filters/select_filter.rb
symphonia-5.0.5 lib/symphonia/model_filters/select_filter.rb
symphonia-5.0.4 lib/symphonia/model_filters/select_filter.rb
symphonia-5.0.3 lib/symphonia/model_filters/select_filter.rb
symphonia-5.0.0 lib/symphonia/model_filters/select_filter.rb
symphonia-4.2.0 lib/symphonia/model_filters/select_filter.rb
symphonia-4.1.3 lib/symphonia/model_filters/select_filter.rb
symphonia-4.1.2 lib/symphonia/model_filters/select_filter.rb
symphonia-4.1.1 lib/symphonia/model_filters/select_filter.rb
symphonia-4.1.0 lib/symphonia/model_filters/select_filter.rb
symphonia-4.0.1 lib/symphonia/model_filters/select_filter.rb
symphonia-4.0.0 lib/symphonia/model_filters/select_filter.rb