class Frails::Component::ReactRenderer
Public Instance Methods
render(context, options, &block)
click to toggle source
# File lib/frails/component/react_renderer.rb, line 8 def render(context, options, &block) @view = context @component = options.delete(:component) klass = presenter_class @presenter = klass.new(@view, @component, options) @children = @view.capture(&block) if block_given? render_with_callbacks || nil end
Private Instance Methods
camelize_keys(data)
click to toggle source
# File lib/frails/component/react_renderer.rb, line 60 def camelize_keys(data) data.deep_transform_keys do |key| Frails::Utils.camelize key.to_s, :lower, convert_slashes: false end end
content_tag(&block)
click to toggle source
# File lib/frails/component/react_renderer.rb, line 55 def content_tag(&block) class_names = "js__reactComponent #{@presenter.class_name}" @view.content_tag @presenter.tag, class: class_names, data: data_for_content_tag, &block end
data_for_content_tag()
click to toggle source
# File lib/frails/component/react_renderer.rb, line 45 def data_for_content_tag { componentPath: @component, componentName: @component.to_s.tr('/', '_').camelize, props: @props, contentLoader: @content_loader, renderMethod: @prerender ? 'hydrate' : 'render' }.to_json end
loader()
click to toggle source
# File lib/frails/component/react_renderer.rb, line 66 def loader return unless @content_loader @view.render @content_loader, class_name: 'js__reactComponent', data: data_for_content_tag end
move_console_replay_script(rendered_tag)
click to toggle source
Grab the server-rendered console replay script and move it outside the container div.
rubocop:disable Style/RegexpLiteral
# File lib/frails/component/react_renderer.rb, line 75 def move_console_replay_script(rendered_tag) regex = /\n(<script class="js__reactServerConsoleReplay">.*<\/script>)<\/(\w+)>$/m rendered_tag.sub(regex, '</\2>\1').html_safe end
presenter_class()
click to toggle source
Calls superclass method
Frails::Component::RendererConcerns#presenter_class
# File lib/frails/component/react_renderer.rb, line 41 def presenter_class super || Frails::Component::React end
render_with_callbacks()
click to toggle source
# File lib/frails/component/react_renderer.rb, line 22 def render_with_callbacks @presenter.run_callbacks :render do @prerender = @presenter.prerender @content_loader = @presenter.content_loader @props = camelize_keys(@presenter.props) @props[:children] = @children if instance_variable_defined?(:@children) @prerender && render_inline_styles rendered_tag = if @prerender content_tag { React::Renderer.new.render(@component, @props).html_safe } else loader || content_tag { nil } end @prerender ? move_console_replay_script(rendered_tag) : rendered_tag end end
stylesheet_entry_file()
click to toggle source
rubocop:enable Style/RegexpLiteral
# File lib/frails/component/react_renderer.rb, line 81 def stylesheet_entry_file "#{@component.tr('/', '-')}-index-entry-jsx" end