@@ -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