@@ -58,15 +58,17 @@ def react_component(component_name, options = {})
5858 server_rendered_html = internal_result [ :result ] [ "html" ]
5959 console_script = internal_result [ :result ] [ "consoleReplayScript" ]
6060 render_options = internal_result [ :render_options ]
61+ badge = pro_warning_badge_if_needed ( render_options . force_load )
6162
6263 case server_rendered_html
6364 when String
64- build_react_component_result_for_server_rendered_string (
65+ html = build_react_component_result_for_server_rendered_string (
6566 server_rendered_html : server_rendered_html ,
6667 component_specification_tag : internal_result [ :tag ] ,
6768 console_script : console_script ,
6869 render_options : render_options
6970 )
71+ ( badge + html ) . html_safe
7072 when Hash
7173 msg = <<~MSG
7274 Use react_component_hash (not react_component) to return a Hash to your ruby view code. See
@@ -212,18 +214,21 @@ def react_component_hash(component_name, options = {})
212214 server_rendered_html = internal_result [ :result ] [ "html" ]
213215 console_script = internal_result [ :result ] [ "consoleReplayScript" ]
214216 render_options = internal_result [ :render_options ]
217+ badge = pro_warning_badge_if_needed ( render_options . force_load )
215218
216219 if server_rendered_html . is_a? ( String ) && internal_result [ :result ] [ "hasErrors" ]
217220 server_rendered_html = { COMPONENT_HTML_KEY => internal_result [ :result ] [ "html" ] }
218221 end
219222
220223 if server_rendered_html . is_a? ( Hash )
221- build_react_component_result_for_server_rendered_hash (
224+ result = build_react_component_result_for_server_rendered_hash (
222225 server_rendered_html : server_rendered_html ,
223226 component_specification_tag : internal_result [ :tag ] ,
224227 console_script : console_script ,
225228 render_options : render_options
226229 )
230+ result [ COMPONENT_HTML_KEY ] = badge + result [ COMPONENT_HTML_KEY ]
231+ result
227232 else
228233 msg = <<~MSG
229234 Render-Function used by react_component_hash for #{ component_name } is expected to return
@@ -251,6 +256,8 @@ def react_component_hash(component_name, options = {})
251256 # waiting for the page to load.
252257 def redux_store ( store_name , props : { } , defer : false , force_load : nil )
253258 force_load = ReactOnRails . configuration . force_load if force_load . nil?
259+ badge = pro_warning_badge_if_needed ( force_load )
260+
254261 redux_store_data = { store_name : store_name ,
255262 props : props ,
256263 force_load : force_load }
@@ -261,7 +268,7 @@ def redux_store(store_name, props: {}, defer: false, force_load: nil)
261268 else
262269 registered_stores << redux_store_data
263270 result = render_redux_store_data ( redux_store_data )
264- prepend_render_rails_context ( result )
271+ ( badge + prepend_render_rails_context ( result ) ) . html_safe
265272 end
266273 end
267274
@@ -440,7 +447,28 @@ def load_pack_for_generated_component(react_component_name, render_options)
440447
441448 # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
442449
443- private
450+ def pro_warning_badge_if_needed ( force_load )
451+ return "" . html_safe if !force_load && !ReactOnRails . configuration . force_load
452+ return "" . html_safe if ReactOnRails ::Utils . react_on_rails_pro?
453+
454+ warning_message = "[REACT ON RAILS] The 'force_load' feature requires a React on Rails Pro license. " \
455+ "Please visit https://shakacode.com/react-on-rails-pro to learn more."
456+ puts warning_message
457+ Rails . logger . warn warning_message
458+
459+ tooltip_text = "The 'force_load' feature requires a React on Rails Pro license. Click to learn more."
460+
461+ badge_html = <<~HTML
462+ < a href ="https://shakacode.com/react-on-rails-pro " target ="_blank " rel ="noopener noreferrer " title ="#{ tooltip_text } ">
463+ < div style ="position: fixed; top: 0; right: 0; width: 180px; height: 180px; overflow: hidden; z-index: 9999; pointer-events: none; ">
464+ < div style ="position: absolute; top: 50px; right: -40px; transform: rotate(45deg); background-color: rgba(220, 53, 69, 0.85); color: white; padding: 7px 40px; text-align: center; font-weight: bold; font-family: sans-serif; font-size: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.3); pointer-events: auto; ">
465+ React On Rails Pro Required
466+ </ div >
467+ </ div >
468+ </ a>
469+ HTML
470+ badge_html . strip . html_safe
471+ end
444472
445473 def run_stream_inside_fiber
446474 unless ReactOnRails ::Utils . react_on_rails_pro?
0 commit comments