Skip to content

Commit 78d1316

Browse files
youknowriadMamadukagziolotyxlasirreal
authored andcommitted
React: Upgrade to the new JSX transform (WordPress#61692)
Co-authored-by: youknowriad <[email protected]> Co-authored-by: Mamaduka <[email protected]> Co-authored-by: gziolo <[email protected]> Co-authored-by: tyxla <[email protected]> Co-authored-by: sirreal <[email protected]> Co-authored-by: jsnajdr <[email protected]> Co-authored-by: kevin940726 <[email protected]>
1 parent a8fabe8 commit 78d1316

File tree

17 files changed

+117
-101
lines changed

17 files changed

+117
-101
lines changed

lib/client-assets.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,14 @@ function gutenberg_register_vendor_scripts( $scripts ) {
590590
array( 'react' ),
591591
'18'
592592
);
593+
594+
gutenberg_override_script(
595+
$scripts,
596+
'react-jsx-runtime',
597+
gutenberg_url( 'build/vendors/react-jsx-runtime' . $extension ),
598+
array( 'react' ),
599+
'18'
600+
);
593601
}
594602
add_action( 'wp_default_scripts', 'gutenberg_register_vendor_scripts' );
595603

package-lock.json

Lines changed: 1 addition & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@
9292
"@wordpress/warning": "file:packages/warning",
9393
"@wordpress/widgets": "file:packages/widgets",
9494
"@wordpress/wordcount": "file:packages/wordcount",
95-
"es-module-shims": "^1.8.2",
96-
"wicg-inert": "3.1.2"
95+
"es-module-shims": "^1.8.2"
9796
},
9897
"devDependencies": {
9998
"@actions/core": "1.9.1",

packages/babel-preset-default/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## Unreleased
44

5+
### Breaking Changes
6+
7+
- Use React's automatic runtime to transform JSX ([#61692](https://github.com/WordPress/gutenberg/pull/61692)).
8+
59
## 7.42.0 (2024-05-16)
610

711
## 7.41.0 (2024-05-02)

packages/babel-preset-default/index.js

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,21 +75,10 @@ module.exports = ( api ) => {
7575
],
7676
plugins: [
7777
require.resolve( '@wordpress/warning/babel-plugin' ),
78-
[
79-
require.resolve( '@wordpress/babel-plugin-import-jsx-pragma' ),
80-
{
81-
scopeVariable: 'createElement',
82-
scopeVariableFrag: 'Fragment',
83-
source: 'react',
84-
isDefault: false,
85-
},
86-
],
8778
[
8879
require.resolve( '@babel/plugin-transform-react-jsx' ),
8980
{
90-
pragma: 'createElement',
91-
pragmaFrag: 'Fragment',
92-
useSpread: true,
81+
runtime: 'automatic',
9382
},
9483
],
9584
maybeGetPluginTransformRuntime(),

packages/babel-preset-default/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
"@babel/preset-env": "^7.16.0",
3636
"@babel/preset-typescript": "^7.16.0",
3737
"@babel/runtime": "^7.16.0",
38-
"@wordpress/babel-plugin-import-jsx-pragma": "file:../babel-plugin-import-jsx-pragma",
3938
"@wordpress/browserslist-config": "file:../browserslist-config",
4039
"@wordpress/warning": "file:../warning",
4140
"browserslist": "^4.21.10",

packages/block-editor/src/components/global-styles/color-panel.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -710,19 +710,22 @@ export default function ColorPanel( {
710710
onChange={ onChange }
711711
panelId={ panelId }
712712
>
713-
{ items.map( ( item ) => (
714-
<ColorPanelDropdown
715-
key={ item.key }
716-
{ ...item }
717-
colorGradientControlSettings={ {
718-
colors,
719-
disableCustomColors: ! areCustomSolidsEnabled,
720-
gradients,
721-
disableCustomGradients: ! areCustomGradientsEnabled,
722-
} }
723-
panelId={ panelId }
724-
/>
725-
) ) }
713+
{ items.map( ( item ) => {
714+
const { key, ...restItem } = item;
715+
return (
716+
<ColorPanelDropdown
717+
key={ key }
718+
{ ...restItem }
719+
colorGradientControlSettings={ {
720+
colors,
721+
disableCustomColors: ! areCustomSolidsEnabled,
722+
gradients,
723+
disableCustomGradients: ! areCustomGradientsEnabled,
724+
} }
725+
panelId={ panelId }
726+
/>
727+
);
728+
} ) }
726729
{ children }
727730
</Wrapper>
728731
);

packages/components/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010

1111
- `ComboboxControl`: Introduce Combobox expandOnFocus prop ([#61705](https://github.com/WordPress/gutenberg/pull/61705)).
1212

13+
### Internal
14+
15+
- Remove usage of deprecated spreading of `key` prop in JSX in CustomSelectControl and FormTokenField components ([#61692](https://github.com/WordPress/gutenberg/pull/61692)).
16+
1317
## 27.6.0 (2024-05-16)
1418

1519
### Internal

packages/components/src/custom-select-control/index.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,11 @@ export default function CustomSelectControl( props ) {
185185
<ul { ...menuProps } onKeyDown={ onKeyDownHandler }>
186186
{ isOpen &&
187187
items.map( ( item, index ) => (
188-
// eslint-disable-next-line react/jsx-key
189188
<li
189+
key={ item.key }
190190
{ ...getItemProps( {
191191
item,
192192
index,
193-
key: item.key,
194193
className: clsx(
195194
item.className,
196195
'components-custom-select-control__item',

packages/components/src/form-token-field/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,6 @@ export function FormTokenField( props: FormTokenFieldProps ) {
644644
autoCapitalize,
645645
autoComplete,
646646
placeholder: value.length === 0 ? placeholder : '',
647-
key: 'input',
648647
disabled,
649648
value: incompleteTokenValue,
650649
onBlur,
@@ -654,6 +653,7 @@ export function FormTokenField( props: FormTokenFieldProps ) {
654653

655654
return (
656655
<TokenInput
656+
key="input"
657657
{ ...inputProps }
658658
onChange={
659659
! ( maxLength && value.length >= maxLength )

packages/dependency-extraction-webpack-plugin/lib/util.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ function defaultRequestToExternal( request ) {
4242

4343
case 'react-dom':
4444
return 'ReactDOM';
45+
46+
case 'react/jsx-runtime':
47+
case 'react/jsx-dev-runtime':
48+
return 'ReactJSXRuntime';
4549
}
4650

4751
if ( request.includes( 'react-refresh/runtime' ) ) {
@@ -117,6 +121,9 @@ function defaultRequestToHandle( request ) {
117121

118122
case 'lodash-es':
119123
return 'lodash';
124+
125+
case 'react/jsx-runtime':
126+
return 'react-jsx-runtime';
120127
}
121128

122129
if ( request.includes( 'react-refresh/runtime' ) ) {

packages/interactivity/src/directives.tsx

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// eslint-disable-next-line eslint-comments/disable-enable-pair
22
/* eslint-disable react-hooks/exhaustive-deps */
33

4-
/* @jsx createElement */
5-
64
/**
75
* External dependencies
86
*/
@@ -231,6 +229,7 @@ export default () => {
231229
// data-wp-context
232230
directive(
233231
'context',
232+
// @ts-ignore-next-line
234233
( {
235234
directives: { context },
236235
props: { children },
@@ -260,7 +259,7 @@ export default () => {
260259
return proxifyContext( currentValue.current, inheritedValue );
261260
}, [ defaultEntry, inheritedValue ] );
262261

263-
return <Provider value={ contextStack }>{ children }</Provider>;
262+
return createElement( Provider, { value: contextStack }, children );
264263
},
265264
{ priority: 5 }
266265
);
@@ -481,12 +480,10 @@ export default () => {
481480
} ) => {
482481
// Preserve the initial inner HTML.
483482
const cached = useMemo( () => innerHTML, [] );
484-
return (
485-
<Type
486-
dangerouslySetInnerHTML={ { __html: cached } }
487-
{ ...rest }
488-
/>
489-
);
483+
return createElement( Type, {
484+
dangerouslySetInnerHTML: { __html: cached },
485+
...rest,
486+
} );
490487
}
491488
);
492489

@@ -549,10 +546,10 @@ export default () => {
549546
? getEvaluate( { scope } )( eachKey[ 0 ] )
550547
: item;
551548

552-
return (
553-
<Provider value={ mergedContext } key={ key }>
554-
{ element.props.content }
555-
</Provider>
549+
return createElement(
550+
Provider,
551+
{ value: mergedContext, key },
552+
element.props.content
556553
);
557554
} );
558555
},

packages/interactivity/src/hooks.tsx

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
/* @jsx createElement */
2-
31
// eslint-disable-next-line eslint-comments/disable-enable-pair
42
/* eslint-disable react-hooks/exhaustive-deps */
53

@@ -352,17 +350,15 @@ const Directives = ( {
352350

353351
// Recursively render the wrapper for the next priority level.
354352
const children =
355-
nextPriorityLevels.length > 0 ? (
356-
<Directives
357-
directives={ directives }
358-
priorityLevels={ nextPriorityLevels }
359-
element={ element }
360-
originalProps={ originalProps }
361-
previousScope={ scope }
362-
/>
363-
) : (
364-
element
365-
);
353+
nextPriorityLevels.length > 0
354+
? createElement( Directives, {
355+
directives,
356+
priorityLevels: nextPriorityLevels,
357+
element,
358+
originalProps,
359+
previousScope: scope,
360+
} )
361+
: element;
366362

367363
const props = { ...originalProps, children };
368364
const directiveArgs = {

packages/scripts/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## Unreleased
44

5+
### Breaking Changes
6+
7+
- Use React's automatic runtime to transform JSX ([#61692](https://github.com/WordPress/gutenberg/pull/61692)).
8+
59
## 27.9.0 (2024-05-16)
610

711
### New Features

tools/webpack/packages.js

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -102,34 +102,6 @@ const exportDefaultPackages = [
102102
'warning',
103103
];
104104

105-
const vendors = {
106-
react: [
107-
'react/umd/react.development.js',
108-
'react/umd/react.production.min.js',
109-
],
110-
'react-dom': [
111-
'react-dom/umd/react-dom.development.js',
112-
'react-dom/umd/react-dom.production.min.js',
113-
],
114-
'inert-polyfill': [
115-
'wicg-inert/dist/inert.js',
116-
'wicg-inert/dist/inert.min.js',
117-
],
118-
};
119-
const vendorsCopyConfig = Object.entries( vendors ).flatMap(
120-
( [ key, [ devFilename, prodFilename ] ] ) => {
121-
return [
122-
{
123-
from: `node_modules/${ devFilename }`,
124-
to: `build/vendors/${ key }.js`,
125-
},
126-
{
127-
from: `node_modules/${ prodFilename }`,
128-
to: `build/vendors/${ key }.min.js`,
129-
},
130-
];
131-
}
132-
);
133105
module.exports = {
134106
...baseConfig,
135107
name: 'packages',
@@ -176,8 +148,7 @@ module.exports = {
176148
transform: stylesTransform,
177149
noErrorOnMissing: true,
178150
} ) )
179-
.concat( bundledPackagesPhpConfig )
180-
.concat( vendorsCopyConfig ),
151+
.concat( bundledPackagesPhpConfig ),
181152
} ),
182153
new MomentTimezoneDataPlugin( {
183154
startYear: 2000,

0 commit comments

Comments
 (0)