@mui/x-codemod 8.0.0-alpha.9 → 8.0.0-beta.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.
- package/README.md +155 -4
- package/package.json +6 -6
- package/v8.0.0/charts/preset-safe/index.js +10 -1
- package/v8.0.0/charts/remove-on-axis-click-handler/index.js +74 -0
- package/v8.0.0/{pickers/rename-and-move-field-value-type → charts/rename-legend-position-type}/index.js +6 -4
- package/v8.0.0/charts/rename-sparkline-colors-to-color/index.js +40 -0
- package/v8.0.0/charts/rename-unstable-use-series/index.js +33 -0
- package/v8.0.0/charts/replace-legend-position-values/index.js +60 -0
- package/v8.0.0/data-grid/preset-safe/index.js +4 -0
- package/v8.0.0/data-grid/remove-props/index.js +24 -0
- package/v8.0.0/data-grid/rename-props/index.js +26 -0
- package/v8.0.0/pickers/preset-safe/index.js +2 -2
- package/v8.0.0/pickers/rename-type-imports/index.js +50 -0
package/README.md
CHANGED
|
@@ -173,6 +173,24 @@ Replace `row` and `column` values by `horizontal` and `vertical` respectively.
|
|
|
173
173
|
/>
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
+
#### `replace-legend-position-values`
|
|
177
|
+
|
|
178
|
+
Replace `"left" | "middle" | "right"` values `"start" | "center" | "end"` respectively.
|
|
179
|
+
This is to align with the CSS values and reflect the RTL ability of the legend component.
|
|
180
|
+
|
|
181
|
+
```diff
|
|
182
|
+
<BarChart
|
|
183
|
+
slotProps={{
|
|
184
|
+
legend: {
|
|
185
|
+
position: {
|
|
186
|
+
- horizontal: "left",
|
|
187
|
+
+ horizontal: "start",
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}}
|
|
191
|
+
/>
|
|
192
|
+
```
|
|
193
|
+
|
|
176
194
|
#### `rename-responsive-chart-container`
|
|
177
195
|
|
|
178
196
|
Renames `ResponsiveChartContainer` and `ResponsiveChartContainerPro` by `ChartContainer` and `ChartContainerPro` which have the same behavior in v8.
|
|
@@ -188,6 +206,15 @@ Renames `ResponsiveChartContainer` and `ResponsiveChartContainerPro` by `ChartCo
|
|
|
188
206
|
+</ChartContainer>
|
|
189
207
|
```
|
|
190
208
|
|
|
209
|
+
#### `rename-legend-position-type`
|
|
210
|
+
|
|
211
|
+
Renames `LegendPosition` to `Position`.
|
|
212
|
+
|
|
213
|
+
```diff
|
|
214
|
+
-import { LegendPosition } from '@mui/x-charts/ChartsLegend';
|
|
215
|
+
+import { Position } from '@mui/x-charts/models';
|
|
216
|
+
```
|
|
217
|
+
|
|
191
218
|
> [!WARNING]
|
|
192
219
|
> If you imported both `ResponsiveChartContainer` and `ChartContainer` in the same file, you might end up with duplicated import.
|
|
193
220
|
> Verify the git diff to remove the duplicate.
|
|
@@ -215,6 +242,73 @@ Renames `labelFontSize` and `tickFontSize` props to the corresponding `xxxStyle`
|
|
|
215
242
|
/>
|
|
216
243
|
```
|
|
217
244
|
|
|
245
|
+
#### `remove-on-axis-click-handler`
|
|
246
|
+
|
|
247
|
+
Remove the `<ChartsOnAxisClickHandler />` and move the associated `onAxisClick` prop to its parent.
|
|
248
|
+
|
|
249
|
+
> [!WARNING]
|
|
250
|
+
> This codemode does not work if component got renamed or if the handler is not a direct child of the container.
|
|
251
|
+
|
|
252
|
+
```diff
|
|
253
|
+
+ <ChartContainer onAxisClick={() => {}}>
|
|
254
|
+
- <ChartContainer>
|
|
255
|
+
- <ChartsOnAxisClickHandler onAxisClick={() => {}} />
|
|
256
|
+
</ChartContainer>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
#### `rename-unstable-use-series`
|
|
260
|
+
|
|
261
|
+
Remove `unstable_` prefix from `useSeries` and `use*Series` hooks, as they have now become stable.
|
|
262
|
+
|
|
263
|
+
```diff
|
|
264
|
+
import {
|
|
265
|
+
- unstable_useSeries,
|
|
266
|
+
+ useSeries,
|
|
267
|
+
- unstable_usePieSeries,
|
|
268
|
+
+ usePieSeries,
|
|
269
|
+
- unstable_useLineSeries,
|
|
270
|
+
+ useLineSeries,
|
|
271
|
+
- unstable_useBarSeries,
|
|
272
|
+
+ useBarSeries,
|
|
273
|
+
- unstable_useScatterSeries,
|
|
274
|
+
+ useScatterSeries,
|
|
275
|
+
} from '@mui/x-charts/hooks';
|
|
276
|
+
import {
|
|
277
|
+
- unstable_useHeatmapSeries,
|
|
278
|
+
+ useHeatmapSeries,
|
|
279
|
+
} from '@mui/x-charts-pro/hooks';
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
#### `rename-sparkline-colors-to-color`
|
|
283
|
+
|
|
284
|
+
Renames the `colors` prop of a `SparkLineChart` to `color` and accesses its first element.
|
|
285
|
+
|
|
286
|
+
```diff
|
|
287
|
+
<SparkLineChart
|
|
288
|
+
- colors={['red']}
|
|
289
|
+
+ color={'red'}
|
|
290
|
+
/>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
If `colors` is a function, it will be wrapped in another function that returns its first element.
|
|
294
|
+
|
|
295
|
+
```diff
|
|
296
|
+
<SparkLineChart
|
|
297
|
+
- colors={fn}
|
|
298
|
+
+ color={typeof fn === 'function' ? mode => fn(mode)[0] : fn[0]}
|
|
299
|
+
/>
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
If there are cases that the codemod cannot handle, you should see a comment with a `mui-x-codemod` prefix in the code.
|
|
303
|
+
|
|
304
|
+
```diff
|
|
305
|
+
<SparkLineChart
|
|
306
|
+
- colors={(mode) => (mode === 'light' ? ['black'] : ['white'])}
|
|
307
|
+
+ /* mui-x-codemod: We renamed the `colors` prop to `color`, but didn't change the value. Please ensure sure this prop receives a string or a function that returns a string. */
|
|
308
|
+
+ color={(mode) => (mode === 'light' ? ['black'] : ['white'])}
|
|
309
|
+
/>
|
|
310
|
+
```
|
|
311
|
+
|
|
218
312
|
### Data Grid codemods
|
|
219
313
|
|
|
220
314
|
#### `preset-safe` for Data Grid v8.0.0
|
|
@@ -230,6 +324,8 @@ npx @mui/x-codemod@next v8.0.0/data-grid/preset-safe <path|folder>
|
|
|
230
324
|
The list includes these transformers
|
|
231
325
|
|
|
232
326
|
- [`remove-stabilized-v8-experimentalFeatures`](#remove-stabilized-v8-experimentalFeatures)
|
|
327
|
+
- [`remove-props`](#remove-props)
|
|
328
|
+
- [`rename-props`](#rename-props)
|
|
233
329
|
|
|
234
330
|
#### `remove-stabilized-v8-experimentalFeatures`
|
|
235
331
|
|
|
@@ -249,6 +345,49 @@ Remove feature flags for stabilized `experimentalFeatures`.
|
|
|
249
345
|
npx @mui/x-codemod@next v8.0.0/data-grid/remove-stabilized-experimentalFeatures <path>
|
|
250
346
|
```
|
|
251
347
|
|
|
348
|
+
#### `remove-props`
|
|
349
|
+
|
|
350
|
+
Remove props that are no longer supported.
|
|
351
|
+
|
|
352
|
+
The list includes these props:
|
|
353
|
+
|
|
354
|
+
- `indeterminateCheckboxAction`
|
|
355
|
+
- `rowPositionsDebounceMs`
|
|
356
|
+
|
|
357
|
+
```diff
|
|
358
|
+
<DataGrid
|
|
359
|
+
- indeterminateCheckboxAction="deselect"
|
|
360
|
+
- rowPositionsDebounceMs={100}
|
|
361
|
+
/>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
<!-- #default-branch-switch -->
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
npx @mui/x-codemod@next v8.0.0/data-grid/remove-props <path>
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
#### `rename-props`
|
|
371
|
+
|
|
372
|
+
Rename props to the new ones.
|
|
373
|
+
|
|
374
|
+
The list includes these props:
|
|
375
|
+
|
|
376
|
+
- `unstable_rowSpanning` to `rowSpanning`
|
|
377
|
+
|
|
378
|
+
```diff
|
|
379
|
+
<DataGrid
|
|
380
|
+
- unstable_rowSpanning
|
|
381
|
+
+ rowSpanning
|
|
382
|
+
/>
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
<!-- #default-branch-switch -->
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
npx @mui/x-codemod@next v8.0.0/data-grid/rename-props <path>
|
|
389
|
+
```
|
|
390
|
+
|
|
252
391
|
### Pickers codemods
|
|
253
392
|
|
|
254
393
|
#### `preset-safe` for Pickers v8.0.0
|
|
@@ -264,7 +403,7 @@ npx @mui/x-codemod@next v8.0.0/pickers/preset-safe <path|folder>
|
|
|
264
403
|
The list includes these transformers
|
|
265
404
|
|
|
266
405
|
- [`rename-adapter-date-fns-imports`](#rename-adapter-date-fns-imports)
|
|
267
|
-
- [`rename-
|
|
406
|
+
- [`rename-type-imports`](#rename-type-imports)
|
|
268
407
|
|
|
269
408
|
#### `rename-adapter-date-fns-imports`
|
|
270
409
|
|
|
@@ -296,13 +435,25 @@ The list includes these transformers
|
|
|
296
435
|
npx @mui/x-codemod@next v8.0.0/pickers/rename-adapter-date-fns-imports <path>
|
|
297
436
|
```
|
|
298
437
|
|
|
299
|
-
#### `rename-
|
|
438
|
+
#### `rename-type-imports`
|
|
439
|
+
|
|
440
|
+
Renames:
|
|
300
441
|
|
|
301
|
-
|
|
442
|
+
- `usePickersTranslations` to `usePickerTranslations`
|
|
443
|
+
- `usePickersContext` to `usePickerContext`
|
|
444
|
+
- `FieldValueType` to `PickerValueType`
|
|
445
|
+
- `RangeFieldSection` to `FieldRangeSection`
|
|
446
|
+
- `PickerShortcutChangeImportance` to `PickerChangeImportance`
|
|
302
447
|
|
|
303
448
|
```diff
|
|
449
|
+
-import { usePickersTranslations, usePickersContext } from '@mui/x-date-pickers/hooks';
|
|
450
|
+
+import { usePickerTranslations, usePickerContext } from '@mui/x-date-pickers/hooks';
|
|
304
451
|
-import { FieldValueType } from '@mui/x-date-pickers';
|
|
305
452
|
+import { PickerValueType } from '@mui/x-date-pickers';
|
|
453
|
+
-import { RangeFieldSection } from '@mui/x-date-pickers-pro/models';
|
|
454
|
+
+import { FieldRangeSection } from '@mui/x-date-pickers-pro/models';
|
|
455
|
+
-import { PickerShortcutChangeImportance } from '@mui/x-date-pickers/PickersShortcuts';
|
|
456
|
+
+import { PickerChangeImportance } from '@mui/x-date-pickers/models';
|
|
306
457
|
|
|
307
458
|
interface MyComponentProps {
|
|
308
459
|
- valueType: FieldValueType;
|
|
@@ -315,7 +466,7 @@ Renames `FieldValueType` to `PickerValueType`.
|
|
|
315
466
|
<!-- #default-branch-switch -->
|
|
316
467
|
|
|
317
468
|
```bash
|
|
318
|
-
npx @mui/x-codemod@next v8.0.0/pickers/rename-
|
|
469
|
+
npx @mui/x-codemod@next v8.0.0/pickers/rename-type-imports <path>
|
|
319
470
|
```
|
|
320
471
|
|
|
321
472
|
## v7.0.0
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-codemod",
|
|
3
|
-
"version": "8.0.0-
|
|
3
|
+
"version": "8.0.0-beta.0",
|
|
4
4
|
"bin": "./codemod.js",
|
|
5
5
|
"private": false,
|
|
6
6
|
"author": "MUI Team",
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
"url": "https://opencollective.com/mui-org"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@babel/core": "^7.26.
|
|
29
|
-
"@babel/runtime": "^7.26.
|
|
30
|
-
"@babel/traverse": "^7.26.
|
|
28
|
+
"@babel/core": "^7.26.10",
|
|
29
|
+
"@babel/runtime": "^7.26.10",
|
|
30
|
+
"@babel/traverse": "^7.26.10",
|
|
31
31
|
"jscodeshift": "17.1.2",
|
|
32
32
|
"yargs": "^17.7.2",
|
|
33
|
-
"@mui/x-internals": "8.0.0-
|
|
33
|
+
"@mui/x-internals": "8.0.0-beta.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/jscodeshift": "^0.12.0",
|
|
37
37
|
"dayjs": "^1.11.13",
|
|
38
|
-
"moment-timezone": "^0.5.
|
|
38
|
+
"moment-timezone": "^0.5.47",
|
|
39
39
|
"rimraf": "^6.0.1"
|
|
40
40
|
},
|
|
41
41
|
"sideEffects": false,
|
|
@@ -9,11 +9,20 @@ var _renameLegendToSlotsLegend = _interopRequireDefault(require("../rename-legen
|
|
|
9
9
|
var _renameResponsiveChartContainer = _interopRequireDefault(require("../rename-responsive-chart-container"));
|
|
10
10
|
var _renameLabelAndTickFontSize = _interopRequireDefault(require("../rename-label-and-tick-font-size"));
|
|
11
11
|
var _replaceLegendDirectionValues = _interopRequireDefault(require("../replace-legend-direction-values"));
|
|
12
|
+
var _replaceLegendPositionValues = _interopRequireDefault(require("../replace-legend-position-values"));
|
|
13
|
+
var _removeExperimentalMarkRendering = _interopRequireDefault(require("../remove-experimental-mark-rendering"));
|
|
14
|
+
var _renameLegendPositionType = _interopRequireDefault(require("../rename-legend-position-type"));
|
|
15
|
+
var _removeOnAxisClickHandler = _interopRequireDefault(require("../remove-on-axis-click-handler"));
|
|
16
|
+
var _renameUnstableUseSeries = _interopRequireDefault(require("../rename-unstable-use-series"));
|
|
12
17
|
function transformer(file, api, options) {
|
|
13
18
|
file.source = (0, _renameLegendToSlotsLegend.default)(file, api, options);
|
|
14
19
|
file.source = (0, _renameResponsiveChartContainer.default)(file, api, options);
|
|
15
20
|
file.source = (0, _renameLabelAndTickFontSize.default)(file, api, options);
|
|
16
|
-
file.source = (0, _renameLabelAndTickFontSize.default)(file, api, options);
|
|
17
21
|
file.source = (0, _replaceLegendDirectionValues.default)(file, api, options);
|
|
22
|
+
file.source = (0, _replaceLegendPositionValues.default)(file, api, options);
|
|
23
|
+
file.source = (0, _removeExperimentalMarkRendering.default)(file, api, options);
|
|
24
|
+
file.source = (0, _renameLegendPositionType.default)(file, api, options);
|
|
25
|
+
file.source = (0, _removeOnAxisClickHandler.default)(file, api, options);
|
|
26
|
+
file.source = (0, _renameUnstableUseSeries.default)(file, api, options);
|
|
18
27
|
return file.source;
|
|
19
28
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
/**
|
|
8
|
+
* @param {import('jscodeshift').FileInfo} file
|
|
9
|
+
* @param {import('jscodeshift').API} api
|
|
10
|
+
*/
|
|
11
|
+
function transformer(file, api, options) {
|
|
12
|
+
const j = api.jscodeshift;
|
|
13
|
+
const printOptions = options.printOptions;
|
|
14
|
+
const root = j(file.source);
|
|
15
|
+
|
|
16
|
+
// Move the handler to the container
|
|
17
|
+
root.findJSXElements().filter(path => Boolean(path.node.openingElement) && path.node.openingElement.name.type === 'JSXIdentifier' && path.node.openingElement.name.name.includes('ChartContainer')).forEach(path => {
|
|
18
|
+
// We find the <ChartsOnAxisClickHandler /> node
|
|
19
|
+
const clickHandler = path.node.children?.find(child => {
|
|
20
|
+
if (child.type !== 'JSXElement') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (child.openingElement.name.type !== 'JSXIdentifier') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return child.openingElement.name.name === 'ChartsOnAxisClickHandler';
|
|
27
|
+
});
|
|
28
|
+
if (!clickHandler) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const clickCallback = clickHandler.openingElement.attributes?.find(attr => attr.type === 'JSXAttribute' && attr.name.name === 'onAxisClick');
|
|
32
|
+
if (!clickCallback) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Move the callback to the container
|
|
37
|
+
path.node.openingElement.attributes?.push(clickCallback);
|
|
38
|
+
|
|
39
|
+
// Remove the children
|
|
40
|
+
path.node.children = path.node.children?.filter(child => {
|
|
41
|
+
if (child.type !== 'JSXElement') {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
if (child.openingElement.name.type !== 'JSXIdentifier') {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return child.openingElement.name.name !== 'ChartsOnAxisClickHandler';
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Remove nested import
|
|
52
|
+
root.find(j.ImportDeclaration, {
|
|
53
|
+
source: {
|
|
54
|
+
value: '@mui/x-charts/ChartsOnAxisClickHandler'
|
|
55
|
+
}
|
|
56
|
+
}).remove();
|
|
57
|
+
|
|
58
|
+
// Remove global import
|
|
59
|
+
root.find(j.ImportDeclaration).forEach(path => {
|
|
60
|
+
if (typeof path.node.source.value !== 'string') {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!path.node.source.value.includes('@mui/x-charts')) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
path.node.specifiers = path.node.specifiers?.filter(specifier => {
|
|
67
|
+
if (specifier.type !== 'ImportSpecifier') {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
return specifier.imported.name !== 'ChartsOnAxisClickHandler';
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
return root.toSource(printOptions);
|
|
74
|
+
}
|
|
@@ -10,16 +10,18 @@ function transformer(file, api, options) {
|
|
|
10
10
|
const root = j(file.source);
|
|
11
11
|
const printOptions = options.printOptions || {
|
|
12
12
|
quote: 'single',
|
|
13
|
-
trailingComma: true
|
|
13
|
+
trailingComma: true,
|
|
14
|
+
wrapColumn: 40
|
|
14
15
|
};
|
|
15
16
|
(0, _renameImports.renameImports)({
|
|
16
17
|
j,
|
|
17
18
|
root,
|
|
18
|
-
packageNames: ['@mui/x-
|
|
19
|
+
packageNames: ['@mui/x-charts', '@mui/x-charts-pro'],
|
|
19
20
|
imports: [{
|
|
20
|
-
oldEndpoint: '
|
|
21
|
+
oldEndpoint: 'ChartsLegend',
|
|
22
|
+
newEndpoint: 'models',
|
|
21
23
|
importsMapping: {
|
|
22
|
-
|
|
24
|
+
LegendPosition: 'Position'
|
|
23
25
|
}
|
|
24
26
|
}]
|
|
25
27
|
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
/**
|
|
8
|
+
* @param {import('jscodeshift').FileInfo} file
|
|
9
|
+
* @param {import('jscodeshift').API} api
|
|
10
|
+
*/
|
|
11
|
+
function transformer(file, api, options) {
|
|
12
|
+
const j = api.jscodeshift;
|
|
13
|
+
const printOptions = options.printOptions;
|
|
14
|
+
const root = j(file.source);
|
|
15
|
+
const componentNames = ['SparkLineChart'];
|
|
16
|
+
const props = {
|
|
17
|
+
colors: 'color'
|
|
18
|
+
};
|
|
19
|
+
const colorAttributes = root.find(j.JSXElement).filter(path => {
|
|
20
|
+
return componentNames.includes(path.value.openingElement.name.name);
|
|
21
|
+
}).find(j.JSXAttribute).filter(attribute => Object.keys(props).includes(attribute.node.name.name));
|
|
22
|
+
return colorAttributes.forEach(attribute => {
|
|
23
|
+
const colorsAttributeExpression = attribute.node.value?.type === 'JSXExpressionContainer' ? attribute.node.value.expression : null;
|
|
24
|
+
let colorAttributeExpression;
|
|
25
|
+
if (colorsAttributeExpression?.type === 'ArrayExpression') {
|
|
26
|
+
colorAttributeExpression = colorsAttributeExpression.elements[0];
|
|
27
|
+
} else if (colorsAttributeExpression?.type === 'Identifier') {
|
|
28
|
+
colorAttributeExpression = j.conditionalExpression(j.binaryExpression('===', j.unaryExpression('typeof', colorsAttributeExpression), j.literal('function')), j.arrowFunctionExpression([j.identifier('mode')], j.chainExpression(j.optionalMemberExpression(j.callExpression(colorsAttributeExpression, [j.identifier('mode')]), j.literal(0)))), colorsAttributeExpression);
|
|
29
|
+
} else {
|
|
30
|
+
// Don't know how to handle this case
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Only transform the value if we know how to handle it, otherwise rename the prop and add a comment
|
|
34
|
+
if (colorAttributeExpression) {
|
|
35
|
+
j(attribute).replaceWith(j.jsxAttribute(j.jsxIdentifier(props[attribute.node.name.name]), j.jsxExpressionContainer(colorAttributeExpression)));
|
|
36
|
+
} else {
|
|
37
|
+
j(attribute).replaceWith(j.jsxAttribute(j.jsxIdentifier(props[attribute.node.name.name]), attribute.node.value)).insertBefore(j.commentBlock(" mui-x-codemod: We renamed the `colors` prop to `color`, but didn't change the value. Please ensure sure this prop receives a string or a function that returns a string. "));
|
|
38
|
+
}
|
|
39
|
+
}).toSource(printOptions);
|
|
40
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
var _renameImports = require("../../../util/renameImports");
|
|
8
|
+
function transformer(file, api, options) {
|
|
9
|
+
const j = api.jscodeshift;
|
|
10
|
+
const root = j(file.source);
|
|
11
|
+
const printOptions = options.printOptions || {
|
|
12
|
+
quote: 'single',
|
|
13
|
+
trailingComma: true,
|
|
14
|
+
wrapColumn: 40
|
|
15
|
+
};
|
|
16
|
+
(0, _renameImports.renameImports)({
|
|
17
|
+
j,
|
|
18
|
+
root,
|
|
19
|
+
packageNames: ['@mui/x-charts', '@mui/x-charts-pro'],
|
|
20
|
+
imports: [{
|
|
21
|
+
oldEndpoint: 'hooks',
|
|
22
|
+
importsMapping: {
|
|
23
|
+
unstable_useSeries: 'useSeries',
|
|
24
|
+
unstable_usePieSeries: 'usePieSeries',
|
|
25
|
+
unstable_useLineSeries: 'useLineSeries',
|
|
26
|
+
unstable_useBarSeries: 'useBarSeries',
|
|
27
|
+
unstable_useScatterSeries: 'useScatterSeries',
|
|
28
|
+
unstable_useHeatmapSeries: 'useHeatmapSeries'
|
|
29
|
+
}
|
|
30
|
+
}]
|
|
31
|
+
});
|
|
32
|
+
return root.toSource(printOptions);
|
|
33
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
var _addComponentsSlots = require("../../../util/addComponentsSlots");
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('jscodeshift').FileInfo} file
|
|
10
|
+
* @param {import('jscodeshift').API} api
|
|
11
|
+
*/
|
|
12
|
+
function transformer(file, api, options) {
|
|
13
|
+
const j = api.jscodeshift;
|
|
14
|
+
const printOptions = options.printOptions;
|
|
15
|
+
const root = j(file.source);
|
|
16
|
+
root.find(j.ImportDeclaration).filter(({
|
|
17
|
+
node
|
|
18
|
+
}) => {
|
|
19
|
+
return typeof node.source.value === 'string' && node.source.value.startsWith('@mui/x-charts');
|
|
20
|
+
}).forEach(path => {
|
|
21
|
+
path.node.specifiers?.forEach(node => {
|
|
22
|
+
root.findJSXElements(node.local?.name).forEach(elementPath => {
|
|
23
|
+
if (elementPath.node.type !== 'JSXElement') {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const slotProps = elementPath.node.openingElement.attributes?.find(elementNode => elementNode.type === 'JSXAttribute' && elementNode.name.name === 'slotProps');
|
|
27
|
+
if (slotProps === null) {
|
|
28
|
+
// No slotProps to manage
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const position = slotProps?.value?.expression?.properties
|
|
32
|
+
// @ts-expect-error
|
|
33
|
+
?.find(v => v?.key?.name === 'legend')
|
|
34
|
+
// @ts-expect-error
|
|
35
|
+
?.value?.properties?.find(v => v?.key?.name === 'position');
|
|
36
|
+
const horizontal = position?.value?.properties?.find(v => v?.key?.name === 'horizontal');
|
|
37
|
+
if (horizontal === undefined || horizontal?.value === undefined || horizontal?.value?.value === undefined) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const horizontalValue = horizontal.value;
|
|
41
|
+
horizontalValue.value = mapFix(horizontalValue.value);
|
|
42
|
+
(0, _addComponentsSlots.transformNestedProp)(elementPath, 'slotProps', 'legend.position.horizontal', horizontalValue, j);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
const transformed = root.findJSXElements();
|
|
47
|
+
return transformed.toSource(printOptions);
|
|
48
|
+
}
|
|
49
|
+
function mapFix(v) {
|
|
50
|
+
switch (v) {
|
|
51
|
+
case 'left':
|
|
52
|
+
return 'start';
|
|
53
|
+
case 'right':
|
|
54
|
+
return 'end';
|
|
55
|
+
case 'middle':
|
|
56
|
+
return 'center';
|
|
57
|
+
default:
|
|
58
|
+
return v;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -6,7 +6,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = transformer;
|
|
8
8
|
var _removeStabilizedExperimentalFeatures = _interopRequireDefault(require("../remove-stabilized-experimentalFeatures"));
|
|
9
|
+
var _removeProps = _interopRequireDefault(require("../remove-props"));
|
|
10
|
+
var _renameProps = _interopRequireDefault(require("../rename-props"));
|
|
9
11
|
function transformer(file, api, options) {
|
|
10
12
|
file.source = (0, _removeStabilizedExperimentalFeatures.default)(file, api, options);
|
|
13
|
+
file.source = (0, _renameProps.default)(file, api, options);
|
|
14
|
+
file.source = (0, _removeProps.default)(file, api, options);
|
|
11
15
|
return file.source;
|
|
12
16
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = transformer;
|
|
8
|
+
var _removeProps = _interopRequireDefault(require("../../../util/removeProps"));
|
|
9
|
+
const componentNames = ['DataGrid', 'DataGridPro', 'DataGridPremium'];
|
|
10
|
+
const props = ['indeterminateCheckboxAction', 'rowPositionsDebounceMs'];
|
|
11
|
+
function transformer(file, api, options) {
|
|
12
|
+
const j = api.jscodeshift;
|
|
13
|
+
const root = j(file.source);
|
|
14
|
+
const printOptions = options.printOptions || {
|
|
15
|
+
quote: 'single',
|
|
16
|
+
trailingComma: true
|
|
17
|
+
};
|
|
18
|
+
return (0, _removeProps.default)({
|
|
19
|
+
root,
|
|
20
|
+
j,
|
|
21
|
+
props,
|
|
22
|
+
componentNames
|
|
23
|
+
}).toSource(printOptions);
|
|
24
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = transformer;
|
|
8
|
+
var _renameProps = _interopRequireDefault(require("../../../util/renameProps"));
|
|
9
|
+
const componentNames = ['DataGrid', 'DataGridPro', 'DataGridPremium'];
|
|
10
|
+
const props = {
|
|
11
|
+
unstable_rowSpanning: 'rowSpanning'
|
|
12
|
+
};
|
|
13
|
+
function transformer(file, api, options) {
|
|
14
|
+
const j = api.jscodeshift;
|
|
15
|
+
const root = j(file.source);
|
|
16
|
+
const printOptions = options.printOptions || {
|
|
17
|
+
quote: 'single',
|
|
18
|
+
trailingComma: true
|
|
19
|
+
};
|
|
20
|
+
return (0, _renameProps.default)({
|
|
21
|
+
root,
|
|
22
|
+
j,
|
|
23
|
+
props,
|
|
24
|
+
componentNames
|
|
25
|
+
}).toSource(printOptions);
|
|
26
|
+
}
|
|
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = transformer;
|
|
8
8
|
var _renameAdapterDateFnsImports = _interopRequireDefault(require("../rename-adapter-date-fns-imports"));
|
|
9
|
-
var
|
|
9
|
+
var _renameTypeImports = _interopRequireDefault(require("../rename-type-imports"));
|
|
10
10
|
function transformer(file, api, options) {
|
|
11
11
|
file.source = (0, _renameAdapterDateFnsImports.default)(file, api, options);
|
|
12
|
-
file.source = (0,
|
|
12
|
+
file.source = (0, _renameTypeImports.default)(file, api, options);
|
|
13
13
|
return file.source;
|
|
14
14
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
var _renameImports = require("../../../util/renameImports");
|
|
8
|
+
function transformer(file, api, options) {
|
|
9
|
+
const j = api.jscodeshift;
|
|
10
|
+
let root = j(file.source);
|
|
11
|
+
const printOptions = options.printOptions || {
|
|
12
|
+
quote: 'single',
|
|
13
|
+
trailingComma: true
|
|
14
|
+
};
|
|
15
|
+
root = (0, _renameImports.renameImports)({
|
|
16
|
+
j,
|
|
17
|
+
root,
|
|
18
|
+
packageNames: ['@mui/x-date-pickers', '@mui/x-date-pickers-pro'],
|
|
19
|
+
imports: [{
|
|
20
|
+
oldEndpoint: 'hooks',
|
|
21
|
+
importsMapping: {
|
|
22
|
+
usePickersTranslations: 'usePickerTranslations',
|
|
23
|
+
usePickersContext: 'usePickerContext'
|
|
24
|
+
}
|
|
25
|
+
}, {
|
|
26
|
+
oldEndpoint: 'models',
|
|
27
|
+
importsMapping: {
|
|
28
|
+
FieldValueType: 'PickerValueType'
|
|
29
|
+
}
|
|
30
|
+
}, {
|
|
31
|
+
oldEndpoint: 'PickersShortcuts',
|
|
32
|
+
newEndpoint: 'models',
|
|
33
|
+
importsMapping: {
|
|
34
|
+
PickerShortcutChangeImportance: 'PickerChangeImportance'
|
|
35
|
+
}
|
|
36
|
+
}]
|
|
37
|
+
});
|
|
38
|
+
root = (0, _renameImports.renameImports)({
|
|
39
|
+
j,
|
|
40
|
+
root,
|
|
41
|
+
packageNames: ['@mui/x-date-pickers-pro'],
|
|
42
|
+
imports: [{
|
|
43
|
+
oldEndpoint: 'models',
|
|
44
|
+
importsMapping: {
|
|
45
|
+
RangeFieldSection: 'FieldRangeSection'
|
|
46
|
+
}
|
|
47
|
+
}]
|
|
48
|
+
});
|
|
49
|
+
return root.toSource(printOptions);
|
|
50
|
+
}
|