Sha256: b8640d3d72c31fd8a6d18a86d3754bd3cfa701c6863d5b9d752e2a45c5449887

Contents?: true

Size: 1.79 KB

Versions: 5

Compression:

Stored size: 1.79 KB

Contents

module Hyperstack
  module Internal
    module Component
      module Rails
        class ComponentMount < React::Rails::ComponentMount
          attr_accessor :controller

          def setup(controller)
            self.controller = controller
          end

          def react_component(name, props = {}, options = {}, &block)
            if options[:prerender] || [:on, 'on', true].include?(Hyperstack.prerendering)
              options = context_initializer_options(options, name)
            end
            props = serialized_props(props, name, controller)
            result = super(top_level_name, props, options, &block).gsub("\n","")
            result = result.gsub(/(<script.*<\/script>)<\/div>$/,'</div>\1').html_safe
            result + footers
          end

          private

          def context_initializer_options(options, name)
            options[:prerender] = {options[:prerender] => true} unless options[:prerender].is_a? Hash
            existing_context_initializer = options[:prerender][:context_initializer]

            options[:prerender][:context_initializer] = lambda do |ctx|
              Hyperstack::Component::IsomorphicHelpers.load_context(ctx, controller, name)
              existing_context_initializer.call(ctx) if existing_context_initializer
            end

            options
          end

          def serialized_props(props, name, controller)
            { render_params: props, component_name: name,
              controller: controller.class.name.gsub(/Controller$/,"") }.react_serializer
          end

          def top_level_name
            'Hyperstack.Internal.Component.TopLevelRailsComponent'
          end

          def footers
            Hyperstack::Component::IsomorphicHelpers.prerender_footers(controller)
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
hyper-component-1.0.alpha1.4 lib/hyperstack/internal/component/rails/component_mount.rb
hyper-component-1.0.alpha1.3 lib/hyperstack/internal/component/rails/component_mount.rb
hyper-component-1.0.alpha1.2 lib/hyperstack/internal/component/rails/component_mount.rb
hyper-component-1.0.alpha1.1 lib/hyperstack/internal/component/rails/component_mount.rb
hyper-component-1.0.alpha1 lib/hyperstack/internal/component/rails/component_mount.rb