diff --git a/lib/react/server_rendering/sprockets_renderer.rb b/lib/react/server_rendering/sprockets_renderer.rb index c8082ca74..b099b2dc3 100644 --- a/lib/react/server_rendering/sprockets_renderer.rb +++ b/lib/react/server_rendering/sprockets_renderer.rb @@ -11,34 +11,53 @@ class SprocketsRenderer < ExecJSRenderer def initialize(options={}) @replay_console = options.fetch(:replay_console, true) - filenames = options.fetch(:files, ["react-server.js", "components.js"]) js_code = CONSOLE_POLYFILL.dup + js_code << load_asset_files(options) + super(options.merge(code: js_code)) + end - filenames.each do |filename| - js_code << ::Rails.application.assets[filename].to_s + # pass prerender: :static to use renderToStaticMarkup + def render(component_name, props, prerender_options) + if !props.is_a?(String) + props = props.to_json end - super(options.merge(code: js_code)) + super(component_name, props, prerender_options_with_defaults(prerender_options)) end - def render(component_name, props, prerender_options) - # pass prerender: :static to use renderToStaticMarkup + def after_render(component_name, props, prerender_options) + @replay_console ? CONSOLE_REPLAY : "" + end + + private + + def prerender_options_with_defaults(prerender_options) react_render_method = if prerender_options == :static "renderToStaticMarkup" else "renderToString" end - if !props.is_a?(String) - props = props.to_json - end + render_function_option = { + render_function: react_render_method + } - super(component_name, props, {render_function: react_render_method}) + if prerender_options.respond_to?(:merge) + prerender_options.merge(render_function_option) + else + render_function_option + end end - def after_render(component_name, props, prerender_options) - @replay_console ? CONSOLE_REPLAY : "" + def load_asset_files(options) + "".tap do |js_code| + filenames = options.fetch(:files, ["react-server.js", "components.js"]) + filenames.each do |filename| + js_code << ::Rails.application.assets[filename].to_s + end + end end + end end end