class Lookbook::Navigation

Public Class Methods

flat() click to toggle source
# File lib/lookbook/navigation.rb, line 9
def flat
  {
    flat: true,
    depth: 0,
    items: previews.map do |preview|
      nav_item_for_preview(preview, expand_name: true)
    end
  }
end
nested() click to toggle source
# File lib/lookbook/navigation.rb, line 19
def nested
  nav = {flat: false, depth: 0, items: []}
  previews.each do |preview|
    current = nav
    depth = preview.path_parts.size
    path = ""
    preview.path_parts.each_with_index do |segment, i|
      target = current[:items].find { |item| item[:name] == segment }
      if target.nil?
        path = "#{path.present? ? path + "." : ""}#{segment}"
        target = {
          depth: i + 1,
          nested: true,
          name: path,
          label: segment.titleize,
          type: :group,
          items: []
        }
        current[:items].append(target)
      end
      if depth == i + 1
        target[:items].push(nav_item_for_preview(preview))
      else
        current = target
      end
    end
  end
  nav
end
previews() click to toggle source
# File lib/lookbook/navigation.rb, line 4
def previews
  valid_previews = ViewComponent::Preview.all.filter { |preview| preview.get_visible_examples.any? && !preview.hidden? }
  valid_previews.sort_by(&:normalized_name)
end

Private Class Methods

nav_item_for_preview(preview, expand_name: false) click to toggle source