lib/lookbook/entities/collections/preview_collection.rb in lookbook-1.5.5 vs lib/lookbook/entities/collections/preview_collection.rb in lookbook-2.0.0.beta.0

- old
+ new

@@ -1,41 +1,66 @@ module Lookbook class PreviewCollection < EntityCollection include HierarchicalCollection - def find_example_by_path(lookup_path) - examples.find_by_path(lookup_path) + def find_scenario_by_path(lookup_path) + scenarios.find_by_path(lookup_path) end def find_by_preview_class(klass) find { |preview| preview.preview_class.name == klass.to_s } end - def load(code_objects) - @entities = [] - clear_cache + def load(code_objects, changes = nil) + changes.present? ? reload_changed(code_objects, changes) : reload_all(code_objects) + end - previews = Array(code_objects).map { |obj| PreviewCollection.preview_from_code_object(obj) }.compact + def reload_all(code_objects) + clear_all + previews = code_objects.map { |obj| PreviewCollection.preview_from_code_object(obj) }.compact add(previews) end - def self.preview_from_code_object(code_object) - klass = code_object.path.constantize - Preview.new(code_object) if preview_class?(klass) - rescue => exception - Lookbook.logger.error exception.to_s - nil + def reload_changed(code_objects, changes) + modified = Array(changes[:modified]) + removed = Array(changes[:removed]) + modified + added = Array(changes[:added]) + modified + + remove_by_file_path(removed) + + previews = added.map do |path| + code_object = code_objects.find { |obj| obj if obj&.file.to_s == path.to_s } + PreviewCollection.preview_from_code_object(code_object) if code_object + end.compact + + add(previews) end - def self.preview_class?(klass) - if klass.ancestors.include?(ViewComponent::Preview) - !klass.respond_to?(:abstract_class) || klass.abstract_class != true + def remove_by_file_path(paths) + paths = Array(paths).map(&:to_s) + @entities.reject! { |preview| preview.file_path.to_s.in?(paths) } + clear_cache + end + + class << self + def preview_from_code_object(code_object) + klass = code_object.path.constantize + PreviewEntity.new(code_object) if preview_class?(klass) + rescue => exception + Lookbook.logger.error exception.to_s + nil end + + def preview_class?(klass) + if (defined?(ViewComponent) && klass.ancestors.include?(ViewComponent::Preview)) || klass.ancestors.include?(Lookbook::Preview) + !klass.respond_to?(:abstract_class) || klass.abstract_class != true + end + end end protected - def examples - @_cache[:examples] ||= PreviewExampleCollection.new(flat_map(&:examples)) + def scenarios + @_cache[:scenarios] ||= ScenarioCollection.new(flat_map(&:scenarios)) end end end