diff --git a/lib/react/rails/controller_renderer.rb b/lib/react/rails/controller_renderer.rb index f368e1e4e..462aa05bd 100644 --- a/lib/react/rails/controller_renderer.rb +++ b/lib/react/rails/controller_renderer.rb @@ -28,7 +28,7 @@ def initialize(options={}) # @return [String] HTML for `component_name` with `options[:props]` def call(component_name, options, &block) props = options.fetch(:props, {}) - options = default_options.merge(options.slice(:data, :aria, :tag, :class, :id, :prerender)) + options = default_options.merge(options.slice(:data, :aria, :tag, :class, :id, :prerender, :camelize_props)) react_component(component_name, props, options, &block) end diff --git a/test/dummy_sprockets/app/controllers/server_controller.rb b/test/dummy_sprockets/app/controllers/server_controller.rb index de3cb5af8..b2df49093 100644 --- a/test/dummy_sprockets/app/controllers/server_controller.rb +++ b/test/dummy_sprockets/app/controllers/server_controller.rb @@ -16,6 +16,14 @@ def inline_component_prerender_false render(component_options.merge(prerender: false)) end + def inline_component_with_camelize_props_prerender_true + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true + end + + def inline_component_with_camelize_props_prerender_false + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false + end + private def component_options diff --git a/test/dummy_sprockets/config/routes.rb b/test/dummy_sprockets/config/routes.rb index ae1bf8fb1..46cdd035d 100644 --- a/test/dummy_sprockets/config/routes.rb +++ b/test/dummy_sprockets/config/routes.rb @@ -6,6 +6,8 @@ get :console_example get :inline_component_prerender_true get :inline_component_prerender_false + get :inline_component_with_camelize_props_prerender_true + get :inline_component_with_camelize_props_prerender_false end end diff --git a/test/dummy_webpacker1/app/controllers/server_controller.rb b/test/dummy_webpacker1/app/controllers/server_controller.rb index de3cb5af8..b2df49093 100644 --- a/test/dummy_webpacker1/app/controllers/server_controller.rb +++ b/test/dummy_webpacker1/app/controllers/server_controller.rb @@ -16,6 +16,14 @@ def inline_component_prerender_false render(component_options.merge(prerender: false)) end + def inline_component_with_camelize_props_prerender_true + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true + end + + def inline_component_with_camelize_props_prerender_false + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false + end + private def component_options diff --git a/test/dummy_webpacker1/config/routes.rb b/test/dummy_webpacker1/config/routes.rb index b14bca4c8..45aabf8be 100644 --- a/test/dummy_webpacker1/config/routes.rb +++ b/test/dummy_webpacker1/config/routes.rb @@ -5,6 +5,8 @@ get :console_example get :inline_component_prerender_true get :inline_component_prerender_false + get :inline_component_with_camelize_props_prerender_true + get :inline_component_with_camelize_props_prerender_false end end diff --git a/test/dummy_webpacker2/app/controllers/server_controller.rb b/test/dummy_webpacker2/app/controllers/server_controller.rb index de3cb5af8..b2df49093 100644 --- a/test/dummy_webpacker2/app/controllers/server_controller.rb +++ b/test/dummy_webpacker2/app/controllers/server_controller.rb @@ -16,6 +16,14 @@ def inline_component_prerender_false render(component_options.merge(prerender: false)) end + def inline_component_with_camelize_props_prerender_true + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true + end + + def inline_component_with_camelize_props_prerender_false + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false + end + private def component_options diff --git a/test/dummy_webpacker2/config/routes.rb b/test/dummy_webpacker2/config/routes.rb index b14bca4c8..45aabf8be 100644 --- a/test/dummy_webpacker2/config/routes.rb +++ b/test/dummy_webpacker2/config/routes.rb @@ -5,6 +5,8 @@ get :console_example get :inline_component_prerender_true get :inline_component_prerender_false + get :inline_component_with_camelize_props_prerender_true + get :inline_component_with_camelize_props_prerender_false end end diff --git a/test/dummy_webpacker3/app/controllers/server_controller.rb b/test/dummy_webpacker3/app/controllers/server_controller.rb index de3cb5af8..b2df49093 100644 --- a/test/dummy_webpacker3/app/controllers/server_controller.rb +++ b/test/dummy_webpacker3/app/controllers/server_controller.rb @@ -16,6 +16,14 @@ def inline_component_prerender_false render(component_options.merge(prerender: false)) end + def inline_component_with_camelize_props_prerender_true + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true + end + + def inline_component_with_camelize_props_prerender_false + render component: 'TodoList', props: { test_camelize_props: true, todos: ['dummy'] }, camelize_props: true, prerender: false + end + private def component_options diff --git a/test/dummy_webpacker3/config/routes.rb b/test/dummy_webpacker3/config/routes.rb index b14bca4c8..45aabf8be 100644 --- a/test/dummy_webpacker3/config/routes.rb +++ b/test/dummy_webpacker3/config/routes.rb @@ -5,6 +5,8 @@ get :console_example get :inline_component_prerender_true get :inline_component_prerender_false + get :inline_component_with_camelize_props_prerender_true + get :inline_component_with_camelize_props_prerender_false end end diff --git a/test/server_rendered_html_test.rb b/test/server_rendered_html_test.rb index d4dfb44fc..886209d52 100644 --- a/test/server_rendered_html_test.rb +++ b/test/server_rendered_html_test.rb @@ -134,5 +134,17 @@ def wait_to_ensure_asset_pipeline_detects_changes # make sure the tag closes immediately: assert_match(/<\/span>/, rendered_html) end + + test 'react inline component rendering with camelize_props (pre-rendered)' do + get '/server/inline_component_with_camelize_props_prerender_true' + rendered_html = response.body + assert_match(/data-react-props.*testCamelizeProps.*true/, rendered_html) + end + + test 'react inline component rendering with camelize_props (not pre-rendered)' do + get '/server/inline_component_with_camelize_props_prerender_false' + rendered_html = response.body + assert_match(/data-react-props.*testCamelizeProps.*true/, rendered_html) + end end end