react-rails 3.0.0 → 3.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e2392fd8c147fca4d725dd8e96d49e3515bb0c439c58e7f13c1c283b69d1ea4
4
- data.tar.gz: 8867c4ada55330af8fd290379b5d6f93611c714558791ab5cc27d80796b71300
3
+ metadata.gz: 1f3c2b4f28629f4fa197ec51a3951aa90ca430a4688f0f45d8eceac3a91c7309
4
+ data.tar.gz: 43f8580d6678c51cc0f6a7037dda28f63e256073ed7c5d16867c87d31d15af35
5
5
  SHA512:
6
- metadata.gz: 8ffac366e8a10b59f386722b280d1407b25607231ff5a42bbf71a374420cf3ff4a2a6a2ae6b0eb49e768b3c161f5407fc7aafb20f317766ffc67eacf0a5b4577
7
- data.tar.gz: ac63153752bb2b5da0d8f1303d24ac8359ab3751f7ab65e576dc5bcfedd63ac07f1336faeb2ffaff81431f833e06468821f282859513012cea484e4a0571ef1e
6
+ metadata.gz: b2a3fdff4d9d1438d9935b1d63b9fa1e891d6a79cce5dfd10731c364681b4d1cfc0c017960184c15d91c1228b5efb18fbe5e600f509ad0385f9d3c667894ac15
7
+ data.tar.gz: 84500c2291940cfeb41617f340ce59ee7e9de4f2a337b5b313dc42581fa5157b7ecaac759d00d5240b80cb48154e57eb590bce5183e951b01691deb3d9bd9898
data/CHANGELOG.md CHANGED
@@ -5,10 +5,17 @@ If you need help upgrading `react-rails`, `webpacker` to `shakapacker`, or JS pa
5
5
  [#1209 2.7 Release Discussion](https://github.com/reactjs/react-rails/issues/1209)
6
6
 
7
7
  ## Unreleased
8
- Changes since last non-beta release.
8
+ Changes since the last non-beta release.
9
9
 
10
10
  _Please add entries here for your pull requests that are not yet released._
11
11
 
12
+ ## [3.1.0] - 2023-08-15
13
+
14
+ #### Added
15
+ - Added option to replace `null`s in props with `undefined` via `config.react.null_to_undefined_props` in `config/application.rb` #1293
16
+
17
+ ## [3.0.0] - 2023-08-14
18
+
12
19
  ### Breaking Changes
13
20
  - Requires separate compilations for server & client bundles if using Shakapacker (see [Webpack config](https://github.com/reactjs/react-rails/tree/master/test/dummy/config/webpack)) #1274
14
21
  - Replaces WebpackManifestContainer, which searched for assets in the webpack manifest, with SeparateServerBundleContainer, which expects a single server bundle file & does not use the webpack manifest at all. #1274
@@ -555,6 +562,8 @@ _Please add entries here for your pull requests that are not yet released._
555
562
  - Server rendering with `prerender: true`
556
563
  - Transform `.jsx` in the asset pipeline
557
564
 
558
- [Unreleased]: https://github.com/reactjs/react-rails/compare/v2.7.1...master
559
- [2.7.1]: https://github.com/shakacode/shakapacker/compare/v2.7.0...v2.7.1
560
- [2.7.0]: https://github.com/shakacode/shakapacker/compare/v2.6.2...v2.7.0
565
+ [Unreleased]: https://github.com/reactjs/react-rails/compare/v3.1.0...master
566
+ [3.1.0]: https://github.com/reactjs/react-rails/compare/v3.0.0...v3.1.0
567
+ [3.0.0]: https://github.com/reactjs/react-rails/compare/v2.7.1...v3.0.0
568
+ [2.7.1]: https://github.com/reactjs/react-rails/compare/v2.7.0...v2.7.1
569
+ [2.7.0]: https://github.com/reactjs/react-rails/compare/v2.6.2...v2.7.0
data/README.md CHANGED
@@ -32,7 +32,7 @@ Here's a testimonial of how ShakaCode can help, from [Florian Gößler](https://
32
32
 
33
33
  Read the [full review here](https://clutch.co/profile/shakacode#reviews?sort_by=date_DESC#review-2118154). Here's [another review of a Shakapacker migration that led to more work](https://clutch.co/profile/shakacode#reviews?sort_by=date_DESC#review-2096078).
34
34
 
35
- ## Resouces
35
+ ## Resources
36
36
  * [Click to join **React + Rails Slack**](https://reactrails.slack.com/join/shared_invite/enQtNjY3NTczMjczNzYxLTlmYjdiZmY3MTVlMzU2YWE0OWM0MzNiZDI0MzdkZGFiZTFkYTFkOGVjODBmOWEyYWQ3MzA2NGE1YWJjNmVlMGE). Then join the channel `#react-rails`.
37
37
  * If you are upgrading, you might consider migrating to the [react_on_rails](https://github.com/shakacode/react_on_rails) gem.
38
38
  * Source code example utilizing React-Rails: https://github.com/BookOfGreg/react-rails-example-app
@@ -68,6 +68,8 @@ Read the [full review here](https://clutch.co/profile/shakacode#reviews?sort_by=
68
68
  - [Upgrading](#upgrading)
69
69
  - [2.7 to 3.0](#27-to-30)
70
70
  - [2.3 to 2.4](#23-to-24)
71
+ - [Other features](#other-features)
72
+ - [Replace `null` with `undefined` in props](#replace-null-with-undefined-in-props)
71
73
  - [Common Errors](#common-errors)
72
74
  - [Getting warning for `Can't resolve 'react-dom/client'` in React < 18](#getting-warning-for-cant-resolve-react-domclient-in-react--18)
73
75
  - [Undefined Set](#undefined-set)
@@ -75,6 +77,7 @@ Read the [full review here](https://clutch.co/profile/shakacode#reviews?sort_by=
75
77
  - [HMR](#hmr)
76
78
  - [Related Projects](#related-projects)
77
79
  - [Contributing](#contributing)
80
+ - [Supporters](#supporters)
78
81
 
79
82
  <!-- END doctoc generated TOC please keep comment here to allow auto update -->
80
83
 
@@ -528,7 +531,6 @@ use it like so:
528
531
  ReactUJS.getConstructor = ReactUJS.constructorFromRequireContext(require.context('components', true));
529
532
  ```
530
533
 
531
-
532
534
  ## Server-Side Rendering
533
535
 
534
536
  You can render React components inside your Rails server with `prerender: true`:
@@ -801,6 +803,26 @@ For the vast majority of cases this will get you most of the migration:
801
803
  - add `import PropTypes from 'prop-types'` (Webpacker only)
802
804
  - re-run `bundle exec rails webpacker:install:react` to update npm packages (Webpacker only)
803
805
 
806
+ ## Other features
807
+
808
+ ### Replace `null` with `undefined` in props
809
+
810
+ React-Rails converts `nil` to `null` while parsing props from Ruby to JavaScript. Optionally, you can configure React-Rails to parse `nil` values to `undefined` as per the following:
811
+
812
+ ```ruby
813
+ # config/application.rb
814
+ module TheAppName
815
+ class Application < Rails::Application
816
+ # ...
817
+ # Set to true to convert null values in props into undefined
818
+ config.react.null_to_undefined_props = true
819
+ # ...
820
+ end
821
+ end
822
+ ```
823
+
824
+ More information in: [discussion#1272](https://github.com/reactjs/react-rails/discussions/1272).
825
+
804
826
  ## Common Errors
805
827
  ### Getting warning for `Can't resolve 'react-dom/client'` in React < 18
806
828
 
@@ -857,7 +879,7 @@ By contributing to React-Rails, you agree to abide by the [code of conduct](http
857
879
 
858
880
  You can always help by submitting patches or triaging issues. Even offering reproduction steps to issues is incredibly helpful!
859
881
 
860
- # Supporters
882
+ ## Supporters
861
883
 
862
884
  The following companies support the development of this and other open-source projects maintained by ShakaCode by providing licenses to the ShakaCode team. ShakaCode stands by the usefulness of these products!
863
885
 
@@ -56,7 +56,10 @@ module React
56
56
  unless prerender_options == :static
57
57
  html_options[:data].tap do |data|
58
58
  data[:react_class] = name
59
- data[:react_props] = (props.is_a?(String) ? props : props.to_json)
59
+ data[:react_props] = props_to_json(
60
+ props,
61
+ null_to_undefined: Dummy::Application.config.react.null_to_undefined_props
62
+ )
60
63
  data[:hydrate] = "t" if prerender_options
61
64
 
62
65
  num_components = @cache_ids.count { |c| c.start_with? name }
@@ -67,6 +70,17 @@ module React
67
70
  html_options
68
71
  end
69
72
 
73
+ def props_to_json(props, options = { null_to_undefined: false })
74
+ return props if props.is_a?(String)
75
+ return props.to_json unless options[:null_to_undefined]
76
+
77
+ # This regex matches key:value with null values while ensuing no string with similar
78
+ # pattern gets matched. It doesn't include null values in arrays.
79
+ props.to_json
80
+ .gsub(/([^\\]":)null([,}\]])/, '\1undefined\2') # match simple null values
81
+ .gsub(/([^\\]":(\[[^\\"]+,|\[))null([,\]])/, '\1undefined\3') # Match nulls in array
82
+ end
83
+
70
84
  def rendered_tag(html_options, &block)
71
85
  html_tag = html_options[:tag] || :div
72
86
 
@@ -12,6 +12,7 @@ module React
12
12
  config.react.jsx_transformer_class = nil # defaults to BabelTransformer
13
13
  config.react.camelize_props = false # pass in an underscored hash but get a camelized hash
14
14
  config.react.sprockets_strategy = nil # how to attach JSX to the asset pipeline (or `false` for none)
15
+ config.react.null_to_undefined_props = false # Set to true to convert null values in props into undefined
15
16
 
16
17
  # Server rendering:
17
18
  config.react.server_renderer_pool_size = 1 # increase if you're on JRuby
@@ -4,6 +4,6 @@ module React
4
4
  module Rails
5
5
  # If you change this, make sure to update VERSIONS.md
6
6
  # and republish the UJS by updating package.json and `bundle exec rake ujs:publish`
7
- VERSION = "3.0.0"
7
+ VERSION = "3.1.0"
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: react-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul O’Shannessy
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-08-14 00:00:00.000000000 Z
14
+ date: 2023-08-15 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: appraisal