Skip to content
Snippets Groups Projects
page.rb 1.25 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
class Communication::Block::Template::Page < Communication::Block::Template::Base
Arnaud Levy's avatar
Arnaud Levy committed
  has_rich_text :text
Arnaud Levy's avatar
Arnaud Levy committed

Arnaud Levy's avatar
Arnaud Levy committed
  LAYOUTS = [:grid, :list, :cards].freeze
Arnaud Levy's avatar
Arnaud Levy committed

alexisben's avatar
alexisben committed
  def build_git_dependencies
Arnaud Levy's avatar
Arnaud Levy committed
    add_dependency main_page
Arnaud Levy's avatar
Arnaud Levy committed
    selected_pages.each do |page|
Arnaud Levy's avatar
Arnaud Levy committed
      add_dependency page
Arnaud Levy's avatar
Arnaud Levy committed
      add_dependency page.active_storage_blobs
    end
alexisben's avatar
alexisben committed
  end

alexisben's avatar
alexisben committed
  def selected_pages
Arnaud Levy's avatar
Arnaud Levy committed
    # kind could be: selection (default), children
    @selected_pages ||= send "selected_pages_#{kind}"
alexisben's avatar
alexisben committed
  end

  def main_page
    @main_page ||= page(data['page_id'])
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def layout
    data['layout'] || 'grid'
  end

alexisben's avatar
alexisben committed
  def show_main_description
    data['show_main_description'] || false
  end

Arnaud Levy's avatar
Arnaud Levy committed
  def show_description
    data['show_description'] || false
alexisben's avatar
alexisben committed
  end
alexisben's avatar
alexisben committed

Arnaud Levy's avatar
Arnaud Levy committed
  def show_image
    data['show_image'] || false
alexisben's avatar
alexisben committed
  end

alexisben's avatar
alexisben committed
  protected

Arnaud Levy's avatar
Arnaud Levy committed
  def kind
    @kind ||= data['kind'] || 'selection'
  end

  def selected_pages_selection
    elements.map { |element|
      page element['id']
    }.compact
  end

  def selected_pages_children
    return [] unless main_page
    main_page.children
             .published
             .ordered
alexisben's avatar
alexisben committed
  end
alexisben's avatar
alexisben committed

alexisben's avatar
alexisben committed
  def page(id)
    return if id.blank?
Arnaud Levy's avatar
Arnaud Levy committed
    page = block.about&.website
                       .pages
                       .published
                       .find_by(id: id)
alexisben's avatar
alexisben committed
  end
alexisben's avatar
alexisben committed
end