module Lookbook::HierarchicalCollection

def collect_ordered_entities(start_node)

def collect_ordered_entities(start_node)
  start_node.flat_map do |node|
    node_entity = node.content? ? [node.content] : []
    child_entities = collect_ordered_entities(node)
    [*node_entity, *child_entities]
  end
end

def entities

def entities
  @_cache[:entities] ||= collect_ordered_entities(to_tree(include_hidden: true))
end

def to_tree(include_hidden: false)

def to_tree(include_hidden: false)
  cache_key = include_hidden ? :tree_with_hidden : :tree
  @_cache[cache_key] ||= self.class::TREE_BUILDER.call(@entities, include_hidden: include_hidden)
end