Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion lib/react_on_rails/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ def react_component(component_name, options = {})
console_script = internal_result[:result]["consoleReplayScript"]
render_options = internal_result[:render_options]
badge = pro_warning_badge_if_needed(render_options.force_load)
render_options.set_option(:force_load, false) unless support_pro_features?

case server_rendered_html
when String
Expand Down Expand Up @@ -215,6 +216,7 @@ def react_component_hash(component_name, options = {})
console_script = internal_result[:result]["consoleReplayScript"]
render_options = internal_result[:render_options]
badge = pro_warning_badge_if_needed(render_options.force_load)
render_options.set_option(:force_load, false) unless support_pro_features?

if server_rendered_html.is_a?(String) && internal_result[:result]["hasErrors"]
server_rendered_html = { COMPONENT_HTML_KEY => internal_result[:result]["html"] }
Expand Down Expand Up @@ -257,6 +259,7 @@ def react_component_hash(component_name, options = {})
def redux_store(store_name, props: {}, defer: false, force_load: nil)
force_load = ReactOnRails.configuration.force_load if force_load.nil?
badge = pro_warning_badge_if_needed(force_load)
force_load = false unless support_pro_features?

redux_store_data = { store_name: store_name,
props: props,
Expand Down Expand Up @@ -447,9 +450,13 @@ def load_pack_for_generated_component(react_component_name, render_options)

# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity

def support_pro_features?
ReactOnRails::Utils.react_on_rails_pro_licence_valid?
end

def pro_warning_badge_if_needed(force_load)
return "".html_safe unless force_load
return "".html_safe if ReactOnRails::Utils.react_on_rails_pro_licence_valid?
return "".html_safe if support_pro_features?

warning_message = "[REACT ON RAILS] The 'force_load' feature requires a React on Rails Pro license. " \
"Please visit https://shakacode.com/react-on-rails-pro to learn more."
Expand Down
15 changes: 15 additions & 0 deletions node_package/src/ClientSideRenderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import reactHydrateOrRender from './reactHydrateOrRender.ts';
import { debugTurbolinks } from './turbolinksUtils.ts';
import * as StoreRegistry from './StoreRegistry.ts';
import * as ComponentRegistry from './ComponentRegistry.ts';
import { onPageLoaded } from './pageLifecycle.ts';

const REACT_ON_RAILS_STORE_ATTRIBUTE = 'data-js-react-on-rails-store';

Expand Down Expand Up @@ -78,6 +79,20 @@ class ComponentRenderer {
* delegates to a renderer registered by the user.
*/
private async render(el: Element, railsContext: RailsContext): Promise<void> {
const isComponentForceLoaded = el.getAttribute('data-force-load') === 'true';
if (!railsContext.rorPro && (isComponentForceLoaded || document.readyState === 'loading')) {
console.warn(
"[REACT ON RAILS] The 'force_load' feature is being used without a React on Rails Pro license. " +
"That's not allowed. " +
'Please visit https://shakacode.com/react-on-rails-pro to get a license.',
);

// Wait for the page to be loaded before continuing
await new Promise<void>((resolve) => {
onPageLoaded(resolve);
});
}

// This must match lib/react_on_rails/helper.rb
const name = el.getAttribute('data-component-name') || '';
const { domNodeId } = this;
Expand Down
3 changes: 2 additions & 1 deletion spec/dummy/spec/support/selenium_logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
err_msg.include?("Timed out receiving message from renderer: 0.100") ||
err_msg.include?("SharedArrayBuffer will require cross-origin isolation") ||
err_msg.include?("You are currently using minified code outside of NODE_ENV === \\\"production\\\"") ||
err_msg.include?("This version of ChromeDriver has not been tested with Chrome version")
err_msg.include?("This version of ChromeDriver has not been tested with Chrome version") ||
err_msg.include?("The 'force_load' feature is being used without a React on Rails Pro license")
end

raise("Java Script Error(s) on the page:\n\n#{clean_errors.join("\n")}") if clean_errors.present?
Expand Down
Loading