Skip to content

Commit 2ee4c78

Browse files
add a warning badge when force_load feature is enabled but rorp is not used
1 parent 20e4455 commit 2ee4c78

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

lib/react_on_rails/helper.rb

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)