Class: Spree::MegaNavPresenter

Inherits:
Object
  • Object
show all
Defined in:
app/presenters/spree/mega_nav_presenter.rb

Defined Under Namespace

Classes: ColumnPresenter

Instance Method Summary collapse

Constructor Details

#initialize(mega_nav) ⇒ MegaNavPresenter

Returns a new instance of MegaNavPresenter.



5
6
7
# File 'app/presenters/spree/mega_nav_presenter.rb', line 5

def initialize(mega_nav)
  @mega_nav = mega_nav
end

Instance Method Details

#columnsObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/presenters/spree/mega_nav_presenter.rb', line 18

def columns
  @columns ||=
    if mega_nav.is_a?(Spree::PageBlocks::MegaNavWithSubcategories)
      subcategories = mega_nav.taxon&.self_and_descendants || []
      main_subcategories = subcategories.find_all { |c| c.parent_id == mega_nav.taxon.id }.sort_by(&:position)

      main_subcategories.first(max_columns).map do |child_category|
        links = subcategories.find_all { |c| c.parent_id == child_category.id }.sort_by(&:position).map(&method(:to_link))
        ColumnPresenter.new(title: child_category.name, links: links, view_all_linkable: child_category)
      end.compact_blank
    elsif mega_nav.is_a?(Spree::PageBlocks::MegaNav)
      [ColumnPresenter.new(title: main_link.label, links: mega_nav.links.drop(1), view_all_linkable: main_link.linkable)]
    else
      []
    end
end


9
10
11
12
13
14
15
16
# File 'app/presenters/spree/mega_nav_presenter.rb', line 9

def main_link
  @main_link ||=
    if mega_nav.is_a?(Spree::PageBlocks::MegaNavWithSubcategories)
      to_link(mega_nav.taxon)
    else
      mega_nav.links.first
    end
end