Skip to content

Commit 28475ca

Browse files
committed
Update to match React.createElement API signature
1 parent 78a94cc commit 28475ca

13 files changed

+87
-33
lines changed

jscomp/syntax/src/reactjs_jsx_v4.ml

+12-2
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,16 @@ let transformUppercaseCall3 ~config modulePath mapper jsxExprLoc callExprLoc
369369
recursivelyTransformedArgsForMake
370370
@
371371
match childrenExpr with
372-
| Exact children -> [(labelled "children", children)]
372+
| Exact children -> (
373+
match config.React_jsx_common.mode with
374+
| "automatic" -> [(labelled "children", children)]
375+
| _ ->
376+
childrenArg := Some (Ast_helper.Exp.array [children]);
377+
[
378+
( labelled "children",
379+
Exp.ident {txt = Ldot (Lident "React", "null"); loc = Location.none}
380+
);
381+
])
373382
| ListLiteral {pexp_desc = Pexp_array list} when list = [] -> []
374383
| ListLiteral expression -> (
375384
(* this is a hack to support react components that introspect into their children *)
@@ -386,7 +395,7 @@ let transformUppercaseCall3 ~config modulePath mapper jsxExprLoc callExprLoc
386395
| _ ->
387396
[
388397
( labelled "children",
389-
Exp.ident {loc = Location.none; txt = Ldot (Lident "React", "null")}
398+
Exp.ident {txt = Ldot (Lident "React", "null"); loc = Location.none}
390399
);
391400
])
392401
in
@@ -572,6 +581,7 @@ let transformLowercaseCall3 ~config mapper jsxExprLoc callExprLoc attrs
572581
[
573582
(* "div" *)
574583
(nolabel, componentNameExpr);
584+
(labelled "props", emptyRecord ~loc:Location.none);
575585
(* [|moreCreateElementCallsHere|] *)
576586
(nolabel, childrenExpr);
577587
]

jscomp/syntax/tests/ppx/react/expected/fileLevelConfig.res.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module V4C = {
2121
type props<'msg> = {msg: 'msg}
2222

2323
let make = ({msg, _}: props<_>) => {
24-
ReactDOM.createDOMElementVariadic("div", [{msg->React.string}])
24+
ReactDOM.createDOMElementVariadic("div", ~props={}, [{msg->React.string}])
2525
}
2626
let make = {
2727
let \"FileLevelConfig$V4C" = (props: props<_>) => make(props)

jscomp/syntax/tests/ppx/react/expected/firstClassModules.res.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ module Select = {
7474
>,
7575
) => {
7676
let _ = (model, selected, onChange, items)
77-
ReactDOM.createDOMElementVariadic("div", [])
77+
ReactDOM.createDOMElementVariadic("div", ~props={}, [])
7878
}
7979
let make = {
8080
let \"FirstClassModules$Select" = (props: props<_>) => make(props)

jscomp/syntax/tests/ppx/react/expected/forwardRef.res.txt

+10-4
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ module V4C = {
8181
) =>
8282
ReactDOM.createDOMElementVariadic(
8383
"div",
84+
~props={},
8485
[
8586
ReactDOM.createDOMElementVariadic(
8687
"input",
@@ -107,10 +108,12 @@ module V4C = {
107108

108109
ReactDOM.createDOMElementVariadic(
109110
"div",
111+
~props={},
110112
[
111-
React.createElement(
113+
React.createElementVariadic(
112114
FancyInput.make,
113-
{ref: input, children: {React.string("Click to focus")}},
115+
{ref: input, children: React.null},
116+
[{React.string("Click to focus")}],
114117
),
115118
],
116119
)
@@ -136,6 +139,7 @@ module V4CUncurried = {
136139
) =>
137140
ReactDOM.createDOMElementVariadic(
138141
"div",
142+
~props={},
139143
[
140144
ReactDOM.createDOMElementVariadic(
141145
"input",
@@ -162,10 +166,12 @@ module V4CUncurried = {
162166

163167
ReactDOM.createDOMElementVariadic(
164168
"div",
169+
~props={},
165170
[
166-
React.createElement(
171+
React.createElementVariadic(
167172
FancyInput.make,
168-
{ref: input, children: {React.string("Click to focus")}},
173+
{ref: input, children: React.null},
174+
[{React.string("Click to focus")}],
169175
),
170176
],
171177
)

jscomp/syntax/tests/ppx/react/expected/fragment.res.txt

+29-10
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,54 @@ let _ = React.createElement(React.fragment, {})
44
let _ = React.createElementVariadic(
55
React.fragment,
66
{},
7-
[ReactDOM.createDOMElementVariadic("div", [])],
7+
[ReactDOM.createDOMElementVariadic("div", ~props={}, [])],
88
)
99
let _ = React.createElementVariadic(
1010
React.fragment,
1111
{},
12-
[ReactDOM.createDOMElementVariadic("div", []), ReactDOM.createDOMElementVariadic("div", [])],
12+
[
13+
ReactDOM.createDOMElementVariadic("div", ~props={}, []),
14+
ReactDOM.createDOMElementVariadic("div", ~props={}, []),
15+
],
1316
)
1417
let _ = React.createElementVariadic(React.fragment, {}, [React.createElement(React.fragment, {})])
1518
let _ = React.createElement(Z.make, {})
16-
let _ = React.createElement(Z.make, {children: ReactDOM.createDOMElementVariadic("div", [])})
17-
let _ = React.createElement(
19+
let _ = React.createElementVariadic(
20+
Z.make,
21+
{children: React.null},
22+
[ReactDOM.createDOMElementVariadic("div", ~props={}, [])],
23+
)
24+
let _ = React.createElementVariadic(
1825
Z.make,
19-
{a: "a", children: ReactDOM.createDOMElementVariadic("div", [])},
26+
{a: "a", children: React.null},
27+
[ReactDOM.createDOMElementVariadic("div", ~props={}, [])],
2028
)
2129
let _ = React.createElementVariadic(
2230
Z.make,
2331
{children: React.null},
24-
[ReactDOM.createDOMElementVariadic("div", []), ReactDOM.createDOMElementVariadic("div", [])],
32+
[
33+
ReactDOM.createDOMElementVariadic("div", ~props={}, []),
34+
ReactDOM.createDOMElementVariadic("div", ~props={}, []),
35+
],
36+
)
37+
let _ = ReactDOM.createDOMElementVariadic("div", ~props={}, [])
38+
let _ = ReactDOM.createDOMElementVariadic(
39+
"div",
40+
~props={},
41+
[ReactDOM.createDOMElementVariadic("div", ~props={}, [])],
2542
)
26-
let _ = ReactDOM.createDOMElementVariadic("div", [])
27-
let _ = ReactDOM.createDOMElementVariadic("div", [ReactDOM.createDOMElementVariadic("div", [])])
2843
let _ = ReactDOM.createDOMElementVariadic(
2944
"div",
3045
~props={id: "id"},
31-
[ReactDOM.createDOMElementVariadic("div", [])],
46+
[ReactDOM.createDOMElementVariadic("div", ~props={}, [])],
3247
)
3348
let _ = ReactDOM.createDOMElementVariadic(
3449
"div",
35-
[ReactDOM.createDOMElementVariadic("div", []), ReactDOM.createDOMElementVariadic("div", [])],
50+
~props={},
51+
[
52+
ReactDOM.createDOMElementVariadic("div", ~props={}, []),
53+
ReactDOM.createDOMElementVariadic("div", ~props={}, []),
54+
],
3655
)
3756

3857
@@jsxConfig({version: 4, mode: "automatic"})

jscomp/syntax/tests/ppx/react/expected/lowercases.res.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
@@jsxConfig({version: 4, mode: "classic"})
22

3-
let _ = ReactDOM.createDOMElementVariadic("div", [])
3+
let _ = ReactDOM.createDOMElementVariadic("div", ~props={}, [])
44
let _ = ReactDOM.createDOMElementVariadic("div", ~props={key: "k"}, [])
55
let _ = ReactDOM.createDOMElementVariadic("div", ~props={x: x}, [])
66
let _ = ReactDOM.createDOMElementVariadic(
77
"div",
8-
[ReactDOM.createDOMElementVariadic("p", [{React.string(x)}])],
8+
~props={},
9+
[ReactDOM.createDOMElementVariadic("p", ~props={}, [{React.string(x)}])],
910
)
1011
let _ = ReactDOM.createDOMElementVariadic("div", ~props=str, [])
1112
let _ = ReactDOM.createDOMElementVariadic("div", ~props={...str, x: "x"}, [])

jscomp/syntax/tests/ppx/react/expected/newtype.res.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ module V4C = {
2727
type props<'a, 'b, 'c> = {a: 'a, b: 'b, c: 'c}
2828

2929
let make = (type a, {a, b, c, _}: props<a, array<option<[#Foo(a)]>>, 'a>) =>
30-
ReactDOM.createDOMElementVariadic("div", [])
30+
ReactDOM.createDOMElementVariadic("div", ~props={}, [])
3131
let make = {
3232
let \"Newtype$V4C" = (props: props<_>) => make(props)
3333

jscomp/syntax/tests/ppx/react/expected/noPropsWithKey.res.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module V4CA = {
44
type props = {}
55

6-
let make = (_: props) => ReactDOM.createDOMElementVariadic("div", [])
6+
let make = (_: props) => ReactDOM.createDOMElementVariadic("div", ~props={}, [])
77
let make = {
88
let \"NoPropsWithKey$V4CA" = props => make(props)
99

jscomp/syntax/tests/ppx/react/expected/optionalKeyType.res.txt

+12-3
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,26 @@ let _ = ReactDOM.createDOMElementVariadic("div", ~props={key: ?key}, [])
3939
let _ = ReactDOM.createDOMElementVariadic(
4040
"div",
4141
~props={key: "k"},
42-
[ReactDOM.createDOMElementVariadic("br", []), ReactDOM.createDOMElementVariadic("br", [])],
42+
[
43+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
44+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
45+
],
4346
)
4447
let _ = ReactDOM.createDOMElementVariadic(
4548
"div",
4649
~props={key: ?Some("k")},
47-
[ReactDOM.createDOMElementVariadic("br", []), ReactDOM.createDOMElementVariadic("br", [])],
50+
[
51+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
52+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
53+
],
4854
)
4955
let _ = ReactDOM.createDOMElementVariadic(
5056
"div",
5157
~props={key: ?key},
52-
[ReactDOM.createDOMElementVariadic("br", []), ReactDOM.createDOMElementVariadic("br", [])],
58+
[
59+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
60+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
61+
],
5362
)
5463

5564
@@jsxConfig({version: 4, mode: "automatic"})

jscomp/syntax/tests/ppx/react/expected/removedKeyProp.res.txt

+6-4
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,20 @@ let make = (_: props) =>
3131
[
3232
JsxPPXReactSupport.createElementWithKey(~key="k", Foo.make, {x: "x", y: "y"}),
3333
React.createElement(Foo.make, {x: "x", y: "y"}),
34-
JsxPPXReactSupport.createElementWithKey(
34+
JsxPPXReactSupport.createElementVariadicWithKey(
3535
~key="k",
3636
HasChildren.make,
3737
{
38-
children: React.createElement(Foo.make, {x: "x", y: "y"}),
38+
children: React.null,
3939
},
40+
[React.createElement(Foo.make, {x: "x", y: "y"})],
4041
),
41-
React.createElement(
42+
React.createElementVariadic(
4243
HasChildren.make,
4344
{
44-
children: React.createElement(Foo.make, {x: "x", y: "y"}),
45+
children: React.null,
4546
},
47+
[React.createElement(Foo.make, {x: "x", y: "y"})],
4648
),
4749
],
4850
)

jscomp/syntax/tests/ppx/react/expected/spreadProps.res.txt

+8-2
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,19 @@ let c4 = ReactDOM.createDOMElementVariadic("div", ~props={...p, x: "x", key: "k"
1818
let c4 = ReactDOM.createDOMElementVariadic(
1919
"div",
2020
~props={...p, key: "k"},
21-
[ReactDOM.createDOMElementVariadic("br", []), ReactDOM.createDOMElementVariadic("br", [])],
21+
[
22+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
23+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
24+
],
2225
)
2326

2427
let c5 = ReactDOM.createDOMElementVariadic(
2528
"div",
2629
~props={...p, key: "k"},
27-
[ReactDOM.createDOMElementVariadic("br", []), ReactDOM.createDOMElementVariadic("br", [])],
30+
[
31+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
32+
ReactDOM.createDOMElementVariadic("br", ~props={}, []),
33+
],
2834
)
2935

3036
// both need to be parsed

jscomp/syntax/tests/ppx/react/expected/topLevel.res.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ module V4C = {
2626

2727
let make = ({a, b, _}: props<_, _>) => {
2828
Js.log("This function should be named 'TopLevel.react'")
29-
ReactDOM.createDOMElementVariadic("div", [])
29+
ReactDOM.createDOMElementVariadic("div", ~props={}, [])
3030
}
3131
let make = {
3232
let \"TopLevel$V4C" = (props: props<_>) => make(props)

jscomp/syntax/tests/ppx/react/expected/typeConstraint.res.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ module V3 = {
1919
module V4C = {
2020
type props<'a, 'b> = {a: 'a, b: 'b}
2121

22-
let make = (type a, {a, b, _}: props<_, _>) => ReactDOM.createDOMElementVariadic("div", [])
22+
let make = (type a, {a, b, _}: props<_, _>) =>
23+
ReactDOM.createDOMElementVariadic("div", ~props={}, [])
2324
let make = {
2425
let \"TypeConstraint$V4C" = (props: props<_>) => make(props)
2526

0 commit comments

Comments
 (0)