Class: Blacklight::FacetFieldPresenter

Inherits:
Object
  • Object
show all
Defined in:
app/presenters/blacklight/facet_field_presenter.rb

Constant Summary collapse

DEFAULT_FACET_LIMIT =
10

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(facet_field, display_facet, view_context, search_state = nil) ⇒ FacetFieldPresenter

Returns a new instance of FacetFieldPresenter.

Parameters:



14
15
16
17
18
19
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 14

def initialize(facet_field, display_facet, view_context, search_state = nil)
  @facet_field = facet_field
  @display_facet = display_facet
  @view_context = view_context
  @search_state = search_state || view_context&.search_state
end

Instance Attribute Details

#display_facetObject (readonly)

Returns the value of attribute display_facet.



5
6
7
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 5

def display_facet
  @display_facet
end

#facet_fieldObject (readonly)

Returns the value of attribute facet_field.



5
6
7
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 5

def facet_field
  @facet_field
end

#search_stateObject (readonly)

Returns the value of attribute search_state.



5
6
7
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 5

def search_state
  @search_state
end

#view_contextObject (readonly)

Returns the value of attribute view_context.



5
6
7
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 5

def view_context
  @view_context
end

Instance Method Details

#active?Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 37

def active?
  if in_advanced_search?
    search_state.filter(facet_field).values(except: [:filters, :missing]).any?
  else
    search_state.filter(facet_field).any?
  end
end

#collapsed?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 33

def collapsed?
  !active? && facet_field.collapse
end

#each_valueObject

Appease rubocop rules by implementing #each_value



69
70
71
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 69

def each_value(&)
  values.each(&)
end

#facet_limitObject

Look up facet limit for given facet_field. Will look at config, and if config is ‘true’ will look up from Solr @response if available. If no limit is available, returns nil. Used from #add_facetting_to_solr to supply f.fieldname.facet.limit values in solr request (no @response available), and used in display (with @response available) to create a facet paginator with the right limit.



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 93

def facet_limit
  return unless facet_field.limit

  if @display_facet
    limit = @display_facet.limit

    if limit.nil? # we didn't get or a set a limit, so infer one.
      facet_field.limit if facet_field.limit != true
    elsif limit == -1 # limit -1 is solr-speak for unlimited
      nil
    else
      limit.to_i - 1 # we added 1 to find out if we needed to paginate
    end
  else
    facet_field.limit == true ? DEFAULT_FACET_LIMIT : facet.limit
  end
end

#in_advanced_search?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 45

def in_advanced_search?
  search_state.params[:action] == "advanced_search"
end

#in_modal?Boolean

Returns:

  • (Boolean)


49
50
51
52
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 49

def in_modal?
  modal_like_actions = %w[facet facet_suggest]
  modal_like_actions.include? search_state.params[:action]
end

#item_presenter(facet_item) ⇒ Object

Parameters:



22
23
24
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 22

def item_presenter(facet_item)
  facet_field.item_presenter.new(facet_item, facet_field, view_context, key, search_state)
end

#labelObject



60
61
62
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 60

def label
  view_context.facet_field_label(key)
end


54
55
56
57
58
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 54

def modal_path
  return unless paginator

  view_context.search_facet_path(id: key) unless paginator&.last_page?
end

#paginatorObject



73
74
75
76
77
78
79
80
81
82
83
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 73

def paginator
  return unless display_facet

  @paginator ||= blacklight_config.facet_paginator_class.new(
    display_facet.items,
    sort: display_facet.sort,
    offset: display_facet.offset,
    prefix: display_facet.prefix,
    limit: facet_limit
  )
end

#suggest?Boolean

Is facet suggest feature configured on for this facet, or by global default.

Returns:

  • (Boolean)


29
30
31
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 29

def suggest?
  !!(facet_field.suggest.nil? ? blacklight_config.default_facet_suggest : facet_field.suggest)
end

#valuesObject



64
65
66
# File 'app/presenters/blacklight/facet_field_presenter.rb', line 64

def values
  search_state&.filter(facet_field)&.values || []
end