Sha256: d3bea3e5c065c507d593bd4806a67e996daa0fb7980f59e0df44f148e0fd64ae

Contents?: true

Size: 1.39 KB

Versions: 10

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

module Lcms
  module Engine
    class ReactMaterialsResolver
      class << self
        def resolve(html, document)
          content = Nokogiri::HTML.fragment(html)
          content.css("[data-react-class='MaterialsContainer']").each do |node|
            replace_react(node, document)
          end
          content.to_html
        end

        private

        def replace_react(node, document) # rubocop:disable Metrics/PerceivedComplexity
          node.remove && return if (data = node.attr('data-react-props')).blank?

          raw_props = if data.match?(/^\d+(?:,\s*\d+)*$/)
                        # comma separated list of numbers, i.e: '123' or '123,432' or '123, 42, 12'
                        { 'material_ids' => data.split(',').map(&:strip), 'activity' => {} }
                      else
                        JSON.parse(data)
                      end
          node.remove && return if (raw_props['material_ids']).empty?

          props = PreviewsMaterialSerializer.new(raw_props, document)
          node.remove && return if props.data && props.data.empty?

          node.replace(component(props, document))
        end

        def component(props, document)
          h.react_component('MaterialsContainer', props, prerender: document.content_type != 'none')
        end

        def h
          ActionController::Base.helpers
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
lcms-engine-0.5.5 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.5.4 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.5.3 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.5.2 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.5.1 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.5.0 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.4.2 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.4.1 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.4.0 app/services/lcms/engine/react_materials_resolver.rb
lcms-engine-0.3.1 app/services/lcms/engine/react_materials_resolver.rb