lib/ariadne/static/generate_previews.rb



# frozen_string_literal: true

# :nocov:

require "json"

module Ariadne
  module Static
    # :nodoc:
    module GeneratePreviews
      class << self
        def call
          Lookbook.previews.filter_map do |preview|
            next if preview.preview_class == Ariadne::FormsPreview
            next if Ariadne::Accessibility.ignore_preview?(preview.preview_class)

            class_name, _ = Ariadne::Yard::DocsHelper.component_and_short_name(preview.preview_class)

            {
              type: preview.lookup_path.split("/")[1], # e.g. preview.lookup_path => "ariadne/ui/badge"
              name: preview.name,
              component: class_name,
              lookup_path: preview.lookup_path,
              examples: preview.scenarios.flat_map do |parent_scenario|
                scenarios = parent_scenario.type == :scenario_group ? parent_scenario.scenarios : [parent_scenario]

                scenarios.map do |scenario|
                  snapshot_tag = scenario.tags.find { |tag| tag.tag_name == "snapshot" }
                  snapshot = if snapshot_tag.nil?
                    "false"
                  elsif snapshot_tag.text.blank?
                    "true"
                  else
                    snapshot_tag.text
                  end
                  {
                    preview_path: scenario.lookup_path,
                    name: scenario.name,
                    snapshot: snapshot,
                    skip_rules: Ariadne::Accessibility.axe_rules_to_skip(
                      component: class_name,
                      scenario_name: scenario.name,
                    ),
                  }
                end
              end,
            }
          end
        end
      end
    end
  end
end