Class: Blacklight::DocumentComponent

Inherits:
ViewComponent::Base
  • Object
show all
Includes:
ContentAreasShim
Defined in:
app/components/blacklight/document_component.rb

Instance Method Summary collapse

Methods included from ContentAreasShim

#with

Constructor Details

#initialize(document: nil, presenter: nil, id: nil, classes: [], component: :article, title_component: nil, metadata_component: nil, embed_component: nil, thumbnail_component: nil, counter: nil, document_counter: nil, counter_offset: 0, show: false) ⇒ DocumentComponent

rubocop:disable Metrics/ParameterLists

Parameters:

  • document (Blacklight::Document) (defaults to: nil)
  • presenter (Blacklight::DocumentPresenter) (defaults to: nil)
  • id (String) (defaults to: nil)

    HTML id for the root element

  • classes (Array, String) (defaults to: [])

    additional HTML classes for the root element

  • component (Symbol, String) (defaults to: :article)

    HTML tag type to use for the root element

  • title_component (Symbol, String) (defaults to: nil)

    HTML tag type to use for the title element

  • metadata_component (Blacklight::DocumentMetadataComponent) (defaults to: nil)
  • counter (Number, nil) (defaults to: nil)

    a pre-computed counter for the position of this document in a search result set

  • document_counter (Number, nil) (defaults to: nil)

    alternatively, the document's position in a collection and,

  • counter_offset (Number) (defaults to: 0)

    with `document_counter`, the offset of the start of that collection counter to the overall result set

  • show (Boolean) (defaults to: false)

    are we showing only a single document (vs a list of search results); used for backwards-compatibility



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'app/components/blacklight/document_component.rb', line 77

def initialize(document: nil, presenter: nil,
               id: nil, classes: [], component: :article, title_component: nil,
               metadata_component: nil,
               embed_component: nil,
               thumbnail_component: nil,
               counter: nil, document_counter: nil, counter_offset: 0,
               show: false)
  if presenter.nil? && document.nil?
    raise ArgumentError, 'missing keyword: :document or :presenter'
  end

  @document = document || presenter&.document
  @presenter = presenter

  @component = component
  @title_component = title_component
  @id = id || ('document' if show)
  @classes = classes

  Deprecation.warn(Blacklight::DocumentComponent, 'Passing embed_component is deprecated') if @embed_component.present?
  @embed_component = embed_component

  Deprecation.warn(Blacklight::DocumentComponent, 'Passing metadata_component is deprecated') if @metadata_component.present?
  @metadata_component =  || Blacklight::DocumentMetadataComponent

  Deprecation.warn(Blacklight::DocumentComponent, 'Passing thumbnail_component is deprecated') if @thumbnail_component.present?
  @thumbnail_component = thumbnail_component || Blacklight::Document::ThumbnailComponent

  @document_counter = document_counter
  @counter = counter
  @counter ||= document_counter + 1 + counter_offset if document_counter.present?

  @show = show
end

Instance Method Details

#before_renderObject



123
124
125
126
127
128
# File 'app/components/blacklight/document_component.rb', line 123

def before_render
  set_slot(:title, nil) unless title
  set_slot(:thumbnail, nil, component: @thumbnail_component || presenter.view_config&.thumbnail_component) unless thumbnail || show?
  set_slot(:metadata, nil, component: @metadata_component, fields: presenter.field_presenters) unless 
  set_slot(:embed, nil, component: @embed_component || presenter.view_config&.embed_component) unless embed
end

#classesObject

HTML classes to apply to the root element



114
115
116
117
118
119
120
121
# File 'app/components/blacklight/document_component.rb', line 114

def classes
  [
    @classes,
    helpers.render_document_class(@document),
    'document',
    ("document-position-#{@counter}" if @counter)
  ].compact.flatten
end