react-rails 1.9.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +345 -9
  3. data/README.md +137 -389
  4. data/lib/assets/javascripts/JSXTransformer.js +6 -6
  5. data/lib/assets/javascripts/react_ujs.js +1 -7
  6. data/lib/assets/react-source/development/react-server.js +423 -21528
  7. data/lib/assets/react-source/development/react.js +191 -21409
  8. data/lib/assets/react-source/production/react-server.js +2 -19
  9. data/lib/assets/react-source/production/react.js +2 -19
  10. data/lib/generators/react/component_generator.rb +203 -73
  11. data/lib/generators/react/install_generator.rb +98 -25
  12. data/lib/generators/templates/component.es6.jsx +9 -12
  13. data/lib/generators/templates/component.es6.tsx +24 -0
  14. data/lib/generators/templates/component.js.jsx +15 -18
  15. data/lib/generators/templates/component.js.jsx.coffee +5 -8
  16. data/lib/generators/templates/component.js.jsx.tsx +36 -0
  17. data/lib/generators/templates/react_server_rendering.rb +4 -0
  18. data/lib/generators/templates/server_rendering.js +6 -0
  19. data/lib/generators/templates/server_rendering_pack.js +5 -0
  20. data/lib/react/jsx/babel_transformer.rb +12 -6
  21. data/lib/react/jsx/jsx_transformer.rb +7 -6
  22. data/lib/react/jsx/processor.rb +3 -1
  23. data/lib/react/jsx/sprockets_strategy.rb +12 -6
  24. data/lib/react/jsx/template.rb +7 -6
  25. data/lib/react/jsx.rb +11 -7
  26. data/lib/react/rails/asset_variant.rb +7 -8
  27. data/lib/react/rails/component_mount.rb +48 -14
  28. data/lib/react/rails/controller_lifecycle.rb +36 -7
  29. data/lib/react/rails/controller_renderer.rb +13 -4
  30. data/lib/react/rails/railtie.rb +34 -29
  31. data/lib/react/rails/test_helper.rb +25 -0
  32. data/lib/react/rails/version.rb +4 -2
  33. data/lib/react/rails/view_helper.rb +3 -1
  34. data/lib/react/rails.rb +9 -7
  35. data/lib/react/server_rendering/{sprockets_renderer → bundle_renderer}/console_replay.js +1 -1
  36. data/lib/react/server_rendering/bundle_renderer/console_reset.js +3 -0
  37. data/lib/react/server_rendering/bundle_renderer/timeout_polyfill.js +26 -0
  38. data/lib/react/server_rendering/bundle_renderer.rb +117 -0
  39. data/lib/react/server_rendering/environment_container.rb +2 -0
  40. data/lib/react/server_rendering/exec_js_renderer.rb +43 -16
  41. data/lib/react/server_rendering/manifest_container.rb +5 -1
  42. data/lib/react/server_rendering/separate_server_bundle_container.rb +19 -0
  43. data/lib/react/server_rendering/yaml_manifest_container.rb +12 -4
  44. data/lib/react/server_rendering.rb +26 -12
  45. data/lib/react-rails.rb +12 -4
  46. data/lib/react.rb +8 -4
  47. metadata +106 -41
  48. data/lib/assets/javascripts/react_ujs_event_setup.js +0 -29
  49. data/lib/assets/javascripts/react_ujs_mount.js +0 -104
  50. data/lib/assets/javascripts/react_ujs_native.js +0 -18
  51. data/lib/assets/javascripts/react_ujs_pjax.js +0 -10
  52. data/lib/assets/javascripts/react_ujs_turbolinks.js +0 -9
  53. data/lib/assets/javascripts/react_ujs_turbolinks_classic.js +0 -10
  54. data/lib/assets/javascripts/react_ujs_turbolinks_classic_deprecated.js +0 -13
  55. data/lib/assets/react-source/development-with-addons/react-server.js +0 -24053
  56. data/lib/assets/react-source/development-with-addons/react.js +0 -23890
  57. data/lib/assets/react-source/production-with-addons/react-server.js +0 -19
  58. data/lib/assets/react-source/production-with-addons/react.js +0 -19
  59. data/lib/generators/react/ujs_generator.rb +0 -44
  60. data/lib/react/server_rendering/sprockets_renderer.rb +0 -79
  61. /data/lib/react/server_rendering/{sprockets_renderer → bundle_renderer}/console_polyfill.js +0 -0
metadata CHANGED
@@ -1,14 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: react-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul O’Shannessy
8
- autorequire:
8
+ - Robert Mosolgo
9
+ - Gregory Myers
10
+ - Tsukuru Tanimichi
11
+ autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2016-10-07 00:00:00.000000000 Z
14
+ date: 2024-05-17 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: appraisal
@@ -28,16 +31,16 @@ dependencies:
28
31
  name: bundler
29
32
  requirement: !ruby/object:Gem::Requirement
30
33
  requirements:
31
- - - ">="
34
+ - - '='
32
35
  - !ruby/object:Gem::Version
33
- version: 1.2.2
36
+ version: 2.4.9
34
37
  type: :development
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - ">="
41
+ - - '='
39
42
  - !ruby/object:Gem::Version
40
- version: 1.2.2
43
+ version: 2.4.9
41
44
  - !ruby/object:Gem::Dependency
42
45
  name: codeclimate-test-reporter
43
46
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +83,20 @@ dependencies:
80
83
  - - ">="
81
84
  - !ruby/object:Gem::Version
82
85
  version: 2.0.5
86
+ - !ruby/object:Gem::Dependency
87
+ name: gem-release
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
83
100
  - !ruby/object:Gem::Dependency
84
101
  name: guard
85
102
  requirement: !ruby/object:Gem::Requirement
@@ -137,19 +154,33 @@ dependencies:
137
154
  - !ruby/object:Gem::Version
138
155
  version: 3.0.0
139
156
  - !ruby/object:Gem::Dependency
140
- name: poltergeist
157
+ name: capybara
141
158
  requirement: !ruby/object:Gem::Requirement
142
159
  requirements:
143
160
  - - ">="
144
161
  - !ruby/object:Gem::Version
145
- version: 0.3.3
162
+ version: '0'
146
163
  type: :development
147
164
  prerelease: false
148
165
  version_requirements: !ruby/object:Gem::Requirement
149
166
  requirements:
150
167
  - - ">="
151
168
  - !ruby/object:Gem::Version
152
- version: 0.3.3
169
+ version: '0'
170
+ - !ruby/object:Gem::Dependency
171
+ name: selenium-webdriver
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
153
184
  - !ruby/object:Gem::Dependency
154
185
  name: test-unit
155
186
  requirement: !ruby/object:Gem::Requirement
@@ -165,47 +196,81 @@ dependencies:
165
196
  - !ruby/object:Gem::Version
166
197
  version: '2.5'
167
198
  - !ruby/object:Gem::Dependency
168
- name: turbolinks
199
+ name: pry-byebug
169
200
  requirement: !ruby/object:Gem::Requirement
170
201
  requirements:
171
202
  - - ">="
172
203
  - !ruby/object:Gem::Version
173
- version: 2.0.0
204
+ version: '0'
174
205
  type: :development
175
206
  prerelease: false
176
207
  version_requirements: !ruby/object:Gem::Requirement
177
208
  requirements:
178
209
  - - ">="
179
210
  - !ruby/object:Gem::Version
180
- version: 2.0.0
211
+ version: '0'
181
212
  - !ruby/object:Gem::Dependency
182
- name: rails
213
+ name: package_json
183
214
  requirement: !ruby/object:Gem::Requirement
184
215
  requirements:
185
216
  - - ">="
186
217
  - !ruby/object:Gem::Version
187
- version: '3.2'
218
+ version: '0'
188
219
  type: :development
189
220
  prerelease: false
190
221
  version_requirements: !ruby/object:Gem::Requirement
191
222
  requirements:
192
223
  - - ">="
193
224
  - !ruby/object:Gem::Version
194
- version: '3.2'
225
+ version: '0'
195
226
  - !ruby/object:Gem::Dependency
196
- name: coffee-script-source
227
+ name: rails
197
228
  requirement: !ruby/object:Gem::Requirement
198
229
  requirements:
199
230
  - - "~>"
200
231
  - !ruby/object:Gem::Version
201
- version: '1.8'
202
- type: :runtime
232
+ version: 7.0.7
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: 7.0.7.2
236
+ type: :development
203
237
  prerelease: false
204
238
  version_requirements: !ruby/object:Gem::Requirement
205
239
  requirements:
206
240
  - - "~>"
207
241
  - !ruby/object:Gem::Version
208
- version: '1.8'
242
+ version: 7.0.7
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: 7.0.7.2
246
+ - !ruby/object:Gem::Dependency
247
+ name: turbo-rails
248
+ requirement: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - ">="
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ type: :development
254
+ prerelease: false
255
+ version_requirements: !ruby/object:Gem::Requirement
256
+ requirements:
257
+ - - ">="
258
+ - !ruby/object:Gem::Version
259
+ version: '0'
260
+ - !ruby/object:Gem::Dependency
261
+ name: minitest-retry
262
+ requirement: !ruby/object:Gem::Requirement
263
+ requirements:
264
+ - - ">="
265
+ - !ruby/object:Gem::Version
266
+ version: '0'
267
+ type: :development
268
+ prerelease: false
269
+ version_requirements: !ruby/object:Gem::Requirement
270
+ requirements:
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ version: '0'
209
274
  - !ruby/object:Gem::Dependency
210
275
  name: connection_pool
211
276
  requirement: !ruby/object:Gem::Requirement
@@ -276,9 +341,13 @@ dependencies:
276
341
  - - ">="
277
342
  - !ruby/object:Gem::Version
278
343
  version: 0.7.0
279
- description: Compile your JSX on demand or precompile for production.
344
+ description: Render components in views or controller actions. Server-side rendering
345
+ powered by ExecJS. Transform JSX in the asset pipeline or use Shakapacker.
280
346
  email:
281
347
  - paul@oshannessy.com
348
+ - rmosolgo@gmail.com
349
+ - neonmd@hotmail.co.uk
350
+ - info@ttanimichi.com
282
351
  executables: []
283
352
  extensions: []
284
353
  extra_rdoc_files: []
@@ -288,27 +357,20 @@ files:
288
357
  - README.md
289
358
  - lib/assets/javascripts/JSXTransformer.js
290
359
  - lib/assets/javascripts/react_ujs.js
291
- - lib/assets/javascripts/react_ujs_event_setup.js
292
- - lib/assets/javascripts/react_ujs_mount.js
293
- - lib/assets/javascripts/react_ujs_native.js
294
- - lib/assets/javascripts/react_ujs_pjax.js
295
- - lib/assets/javascripts/react_ujs_turbolinks.js
296
- - lib/assets/javascripts/react_ujs_turbolinks_classic.js
297
- - lib/assets/javascripts/react_ujs_turbolinks_classic_deprecated.js
298
- - lib/assets/react-source/development-with-addons/react-server.js
299
- - lib/assets/react-source/development-with-addons/react.js
300
360
  - lib/assets/react-source/development/react-server.js
301
361
  - lib/assets/react-source/development/react.js
302
- - lib/assets/react-source/production-with-addons/react-server.js
303
- - lib/assets/react-source/production-with-addons/react.js
304
362
  - lib/assets/react-source/production/react-server.js
305
363
  - lib/assets/react-source/production/react.js
306
364
  - lib/generators/react/component_generator.rb
307
365
  - lib/generators/react/install_generator.rb
308
- - lib/generators/react/ujs_generator.rb
309
366
  - lib/generators/templates/component.es6.jsx
367
+ - lib/generators/templates/component.es6.tsx
310
368
  - lib/generators/templates/component.js.jsx
311
369
  - lib/generators/templates/component.js.jsx.coffee
370
+ - lib/generators/templates/component.js.jsx.tsx
371
+ - lib/generators/templates/react_server_rendering.rb
372
+ - lib/generators/templates/server_rendering.js
373
+ - lib/generators/templates/server_rendering_pack.js
312
374
  - lib/react-rails.rb
313
375
  - lib/react.rb
314
376
  - lib/react/jsx.rb
@@ -323,21 +385,25 @@ files:
323
385
  - lib/react/rails/controller_lifecycle.rb
324
386
  - lib/react/rails/controller_renderer.rb
325
387
  - lib/react/rails/railtie.rb
388
+ - lib/react/rails/test_helper.rb
326
389
  - lib/react/rails/version.rb
327
390
  - lib/react/rails/view_helper.rb
328
391
  - lib/react/server_rendering.rb
392
+ - lib/react/server_rendering/bundle_renderer.rb
393
+ - lib/react/server_rendering/bundle_renderer/console_polyfill.js
394
+ - lib/react/server_rendering/bundle_renderer/console_replay.js
395
+ - lib/react/server_rendering/bundle_renderer/console_reset.js
396
+ - lib/react/server_rendering/bundle_renderer/timeout_polyfill.js
329
397
  - lib/react/server_rendering/environment_container.rb
330
398
  - lib/react/server_rendering/exec_js_renderer.rb
331
399
  - lib/react/server_rendering/manifest_container.rb
332
- - lib/react/server_rendering/sprockets_renderer.rb
333
- - lib/react/server_rendering/sprockets_renderer/console_polyfill.js
334
- - lib/react/server_rendering/sprockets_renderer/console_replay.js
400
+ - lib/react/server_rendering/separate_server_bundle_container.rb
335
401
  - lib/react/server_rendering/yaml_manifest_container.rb
336
402
  homepage: https://github.com/reactjs/react-rails
337
403
  licenses:
338
404
  - Apache-2.0
339
405
  metadata: {}
340
- post_install_message:
406
+ post_install_message:
341
407
  rdoc_options: []
342
408
  require_paths:
343
409
  - lib
@@ -352,9 +418,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
352
418
  - !ruby/object:Gem::Version
353
419
  version: '0'
354
420
  requirements: []
355
- rubyforge_project:
356
- rubygems_version: 2.5.1
357
- signing_key:
421
+ rubygems_version: 3.2.32
422
+ signing_key:
358
423
  specification_version: 4
359
- summary: React/JSX adapter for the Ruby on Rails asset pipeline.
424
+ summary: React integration for Ruby on Rails
360
425
  test_files: []
@@ -1,29 +0,0 @@
1
- ;(function(document, window) {
2
- // jQuery is optional. Use it to support legacy browsers.
3
- var $ = (typeof window.jQuery !== 'undefined') && window.jQuery;
4
- if ($) {
5
- ReactRailsUJS.handleEvent = function(eventName, callback) {
6
- $(document).on(eventName, callback);
7
- };
8
- } else {
9
- ReactRailsUJS.handleEvent = function(eventName, callback) {
10
- document.addEventListener(eventName, callback);
11
- };
12
- }
13
- // Detect which kind of events to set up:
14
- if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
15
- if (typeof Turbolinks.EVENTS !== 'undefined') {
16
- // Turbolinks.EVENTS is in classic version 2.4.0+
17
- ReactRailsUJS.TurbolinksClassic.setup();
18
- } else if (typeof Turbolinks.controller !== "undefined") {
19
- // Turbolinks.controller is in version 5+
20
- ReactRailsUJS.Turbolinks.setup();
21
- } else {
22
- ReactRailsUJS.TurbolinksClassicDeprecated.setup();
23
- }
24
- } else if ($ && typeof $.pjax === 'function') {
25
- ReactRailsUJS.pjax.setup();
26
- } else {
27
- ReactRailsUJS.Native.setup();
28
- }
29
- })(document, window);
@@ -1,104 +0,0 @@
1
- ;(function(document, window) {
2
- // jQuery is optional. Use it to support legacy browsers.
3
- var $ = (typeof window.jQuery !== 'undefined') && window.jQuery;
4
-
5
- window.ReactRailsUJS = {
6
- // This attribute holds the name of component which should be mounted
7
- // example: `data-react-class="MyApp.Items.EditForm"`
8
- CLASS_NAME_ATTR: 'data-react-class',
9
-
10
- // This attribute holds JSON stringified props for initializing the component
11
- // example: `data-react-props="{\"item\": { \"id\": 1, \"name\": \"My Item\"} }"`
12
- PROPS_ATTR: 'data-react-props',
13
-
14
- // helper method for the mount and unmount methods to find the
15
- // `data-react-class` DOM elements
16
- findDOMNodes: function(searchSelector) {
17
- // we will use fully qualified paths as we do not bind the callbacks
18
- var selector, parent;
19
-
20
- switch (typeof searchSelector) {
21
- case 'undefined':
22
- selector = '[' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']';
23
- parent = document;
24
- break;
25
- case 'object':
26
- selector = '[' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']';
27
- parent = searchSelector;
28
- break;
29
- case 'string':
30
- selector = searchSelector + '[' + window.ReactRailsUJS.CLASS_NAME_ATTR + '], ' +
31
- searchSelector + ' [' + window.ReactRailsUJS.CLASS_NAME_ATTR + ']';
32
- parent = document;
33
- break
34
- default:
35
- break;
36
- }
37
-
38
- if ($) {
39
- return $(selector, parent);
40
- } else {
41
- return parent.querySelectorAll(selector);
42
- }
43
- },
44
-
45
- // Get the constructor for a className
46
- getConstructor: function(className) {
47
- // Assume className is simple and can be found at top-level (window).
48
- // Fallback to eval to handle cases like 'My.React.ComponentName'.
49
- // Also, try to gracefully import Babel 6 style default exports
50
- //
51
- var constructor;
52
-
53
- // Try to access the class globally first
54
- constructor = window[className];
55
-
56
- // If that didn't work, try eval
57
- if (!constructor) {
58
- constructor = eval.call(window, className);
59
- }
60
-
61
- // Lastly, if there is a default attribute try that
62
- if (constructor && constructor.default) {
63
- constructor = constructor.default;
64
- }
65
-
66
- return constructor;
67
- },
68
-
69
- // Within `searchSelector`, find nodes which should have React components
70
- // inside them, and mount them with their props.
71
- mountComponents: function(searchSelector) {
72
- var nodes = window.ReactRailsUJS.findDOMNodes(searchSelector);
73
-
74
- for (var i = 0; i < nodes.length; ++i) {
75
- var node = nodes[i];
76
- var className = node.getAttribute(window.ReactRailsUJS.CLASS_NAME_ATTR);
77
- var constructor = this.getConstructor(className);
78
- var propsJson = node.getAttribute(window.ReactRailsUJS.PROPS_ATTR);
79
- var props = propsJson && JSON.parse(propsJson);
80
-
81
- if (typeof(constructor) === "undefined") {
82
- var message = "Cannot find component: '" + className + "'"
83
- if (console && console.log) { console.log("%c[react-rails] %c" + message + " for element", "font-weight: bold", "", node) }
84
- var error = new Error(message + ". Make sure your component is globally available to render.")
85
- throw error
86
- } else {
87
- ReactDOM.render(React.createElement(constructor, props), node);
88
- }
89
- }
90
- },
91
-
92
- // Within `searchSelector`, find nodes which have React components
93
- // inside them, and unmount those components.
94
- unmountComponents: function(searchSelector) {
95
- var nodes = window.ReactRailsUJS.findDOMNodes(searchSelector);
96
-
97
- for (var i = 0; i < nodes.length; ++i) {
98
- var node = nodes[i];
99
-
100
- ReactDOM.unmountComponentAtNode(node);
101
- }
102
- }
103
- };
104
- })(document, window);
@@ -1,18 +0,0 @@
1
- ;(function(document, window) {
2
- // jQuery is optional. Use it to support legacy browsers.
3
- var $ = (typeof window.jQuery !== 'undefined') && window.jQuery;
4
-
5
- window.ReactRailsUJS.Native = {
6
- // Attach handlers to browser events to mount & unmount components
7
- setup: function() {
8
- if ($) {
9
- $(function() {window.ReactRailsUJS.mountComponents()});
10
- } else if ('addEventListener' in window) {
11
- document.addEventListener('DOMContentLoaded', function() {window.ReactRailsUJS.mountComponents()});
12
- } else {
13
- // add support to IE8 without jQuery
14
- window.attachEvent('onload', function() {window.ReactRailsUJS.mountComponents()});
15
- }
16
- }
17
- };
18
- })(document, window);
@@ -1,10 +0,0 @@
1
- ;(function(document, window) {
2
- window.ReactRailsUJS.pjax = {
3
- // pjax support
4
- setup: function() {
5
- ReactRailsUJS.handleEvent('ready', function() {window.ReactRailsUJS.mountComponents()});
6
- ReactRailsUJS.handleEvent('pjax:end', function(e) {window.ReactRailsUJS.mountComponents(e.target)});
7
- ReactRailsUJS.handleEvent('pjax:beforeReplace', function(e) {window.ReactRailsUJS.unmountComponents(e.target)});
8
- }
9
- };
10
- })(document, window);
@@ -1,9 +0,0 @@
1
- ;(function(document, window) {
2
- window.ReactRailsUJS.Turbolinks = {
3
- // Turbolinks 5+ got rid of named events (?!)
4
- setup: function() {
5
- ReactRailsUJS.handleEvent('turbolinks:load', function() {window.ReactRailsUJS.mountComponents()});
6
- ReactRailsUJS.handleEvent('turbolinks:before-render', function() {window.ReactRailsUJS.unmountComponents()});
7
- }
8
- };
9
- })(document, window);
@@ -1,10 +0,0 @@
1
- ;(function(document, window) {
2
- window.ReactRailsUJS.TurbolinksClassic = {
3
- // Attach handlers to Turbolinks-Classic events
4
- // for mounting and unmounting components
5
- setup: function() {
6
- ReactRailsUJS.handleEvent(Turbolinks.EVENTS.CHANGE, function() {window.ReactRailsUJS.mountComponents()});
7
- ReactRailsUJS.handleEvent(Turbolinks.EVENTS.BEFORE_UNLOAD, function() {window.ReactRailsUJS.unmountComponents()});
8
- }
9
- };
10
- })(document, window);
@@ -1,13 +0,0 @@
1
- ;(function(document, window) {
2
- window.ReactRailsUJS.TurbolinksClassicDeprecated = {
3
- // Before Turbolinks 2.4.0, Turbolinks didn't
4
- // have named events and didn't have a before-unload event.
5
- // Also, it didn't work with the Turbolinks cache, see
6
- // https://github.com/reactjs/react-rails/issues/87
7
- setup: function() {
8
- Turbolinks.pagesCached(0)
9
- ReactRailsUJS.handleEvent('page:change', function() {window.ReactRailsUJS.mountComponents()});
10
- ReactRailsUJS.handleEvent('page:receive', function() {window.ReactRailsUJS.unmountComponents()});
11
- }
12
- };
13
- })(document, window);