class Avo::Filters::BaseFilter

def applied_filters

Fetch the applied filters from the params
def applied_filters
  # Return empty hash if no filters are present
  return {} if (filters_from_params = params[PARAM_KEY]).blank?
  # Return empty hash if the filters are not a string, decode_filters method expects a Base64 encoded string
  # Dynamic filters also use the "filters" param key, but they are not Base64 encoded, they are a hash
  return {} if !filters_from_params.is_a?(String)
  self.class.decode_filters filters_from_params
end

def applied_or_default_value(applied_filters)

If it's not present return the default value.
Get the applied value this filter.
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

def apply_query(request, query, value)

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

def button_label

def button_label
  Avo::ExecutionContext.new(target: self.class.button_label, arguments: @arguments).handle
end

def current_user

def current_user
  Avo::Current.user
end

def decode_filters(filter_params)

def decode_filters(filter_params)
  JSON.parse(Base64.decode64(filter_params))
end

def encode_filters(filter_params)

def encode_filters(filter_params)
  Base64.encode64(filter_params.to_json)
end

def get_empty_message

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

def id

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

def initialize(arguments: {})

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

def name

def name
  Avo::ExecutionContext.new(target: self.class.name, arguments: @arguments).handle
end

def visible_in_view(resource: nil, parent_resource: nil)

def visible_in_view(resource: nil, parent_resource: nil)
  return true if visible.blank?
  # Run the visible block if available
  Avo::ExecutionContext.new(
    target: visible,
    params: params,
    parent_resource: parent_resource,
    resource: resource,
    arguments: arguments
  ).handle
end