Sha256: 12dde7af0e30d3d6b3f2e98d1618af195f6727458a883a12a8e95b4088c7a57d

Contents?: true

Size: 1.95 KB

Versions: 35

Compression:

Stored size: 1.95 KB

Contents

module Avo
  module Filters
    class BaseFilter
      PARAM_KEY = :filters unless const_defined?(:PARAM_KEY)

      class_attribute :component, default: "boolean-filter"
      class_attribute :default, default: nil
      class_attribute :empty_message
      class_attribute :name, default: "Filter"
      class_attribute :template, default: "avo/base/select_filter"
      class_attribute :visible

      attr_reader :arguments

      delegate :params, to: Avo::App

      class << self
        def decode_filters(filter_params)
          JSON.parse(Base64.decode64(filter_params))
        rescue
          {}
        end

        def get_empty_message
          empty_message || I18n.t("avo.no_options_available")
        end
      end

      def initialize(arguments: {})
        @arguments = arguments
      end

      def apply_query(request, query, value)
        value.stringify_keys! if value.is_a? Hash

        apply(request, query, value)
      end

      def id
        self.class.name.underscore.tr("/", "_")
      end

      # Get the applied value this filter.
      # If it's not present return the default value.
      def applied_or_default_value(applied_filters)
        # Get the values for this particular filter
        applied_value = applied_filters[self.class.to_s]

        # Return that value if present
        return applied_value unless applied_value.nil?

        # Return that default
        default
      rescue
        default
      end

      # Fetch the applied filters from the params
      def applied_filters
        self.class.decode_filters params[PARAM_KEY]
      end

      def visible_in_view(resource: nil, parent_resource: nil)
        return true if visible.blank?

        # Run the visible block if available
        Avo::Hosts::VisibilityHost.new(
          block: visible,
          params: params,
          parent_resource: parent_resource,
          resource: resource,
          arguments: arguments
        ).handle

      end
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
avo-2.30.1 lib/avo/filters/base_filter.rb
avo-2.30.1.pre4.pr1683 lib/avo/filters/base_filter.rb
avo-2.30.1.pre3.pr1683 lib/avo/filters/base_filter.rb
avo-2.30.1.pre2.pr1683 lib/avo/filters/base_filter.rb
avo-2.30.1.pre1.pr1683 lib/avo/filters/base_filter.rb
avo-2.30.0 lib/avo/filters/base_filter.rb
avo-2.29.1 lib/avo/filters/base_filter.rb
avo-2.29.1.pre.pr1652 lib/avo/filters/base_filter.rb
avo-2.29.0 lib/avo/filters/base_filter.rb
avo-2.28.3.pre.pr1646 lib/avo/filters/base_filter.rb
avo-2.28.2.pre.pr1642 lib/avo/filters/base_filter.rb
avo-2.28.1.pre.pr1642 lib/avo/filters/base_filter.rb
avo-2.28.0 lib/avo/filters/base_filter.rb
avo-2.27.2.pre.pr1606 lib/avo/filters/base_filter.rb
avo-2.27.1 lib/avo/filters/base_filter.rb
avo-2.27.0 lib/avo/filters/base_filter.rb
avo-2.26.3.pre.pr1601 lib/avo/filters/base_filter.rb
avo-2.26.2.pre.pr1579 lib/avo/filters/base_filter.rb
avo-2.26.1.pr1584.pre.1 lib/avo/filters/base_filter.rb
avo-2.25.1.pre.1.pr1579 lib/avo/filters/base_filter.rb