Class: Www::ReviewsIo::ReviewListComponent

Inherits:
ApplicationComponent show all
Includes:
Concerns::ReviewsIoSupport
Defined in:
app/components/www/reviews_io/review_list_component.rb

Overview

Full-page review list component with client-side pagination and sorting.
All reviews are loaded upfront and handled by JavaScript.

Usage:
<%= render Www::ReviewsIo::ReviewListComponent.new(
product_line: 'floor-heating'
) %>

<%= render Www::ReviewsIo::ReviewListComponent.new(
skus: ['SKU-001', 'SKU-002'],
reviews_per_page: 10
) %>

With curated tag-based reviews merged in:

<%= render Www::ReviewsIo::ReviewListComponent.new(
product_line: 'radiant-panel',
tags: ['for-radiant-heat-panels-page']
) %>

Constant Summary collapse

REVIEWS_PER_PAGE =
15
SORT_OPTIONS =
{
  'newest' => 'Newest First',
  'oldest' => 'Oldest First',
  'highest' => 'Highest Rated',
  'lowest' => 'Lowest Rated'
}.freeze

Instance Method Summary collapse

Methods inherited from ApplicationComponent

#cms_link, #fetch_or_fallback, #image_asset_tag, #image_tag, #number_to_currency, #number_with_delimiter, #post_path, #post_url, #strip_tags

Constructor Details

#initialize(skus: nil, product_line: nil, tags: nil, reviews_per_page: REVIEWS_PER_PAGE, sort: 'newest', page: 1) ⇒ ReviewListComponent

Returns a new instance of ReviewListComponent.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/components/www/reviews_io/review_list_component.rb', line 34

def initialize(
  skus: nil,
  product_line: nil,
  tags: nil,
  reviews_per_page: REVIEWS_PER_PAGE,
  sort: 'newest',
  page: 1 # kept for backwards compatibility, ignored
)
  @skus = skus
  @product_line = product_line
  @tags = Array(tags).compact_blank.presence
  @reviews_per_page = reviews_per_page || REVIEWS_PER_PAGE
  @sort = sort
  super()
end

Instance Method Details

#render?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'app/components/www/reviews_io/review_list_component.rb', line 50

def render?
  resolved_skus.any? || @tags.present?
end