@mui/x-codemod 8.0.0-alpha.10 → 8.0.0-alpha.12
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 +67 -0
- package/package.json +6 -6
- package/v8.0.0/charts/preset-safe/index.js +4 -0
- package/v8.0.0/charts/remove-on-axis-click-handler/index.js +74 -0
- 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/README.md
CHANGED
|
@@ -242,6 +242,73 @@ Renames `labelFontSize` and `tickFontSize` props to the corresponding `xxxStyle`
|
|
|
242
242
|
/>
|
|
243
243
|
```
|
|
244
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
|
+
|
|
245
312
|
### Data Grid codemods
|
|
246
313
|
|
|
247
314
|
#### `preset-safe` for Data Grid v8.0.0
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-codemod",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.12",
|
|
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.9",
|
|
29
|
+
"@babel/runtime": "^7.26.9",
|
|
30
|
+
"@babel/traverse": "^7.26.9",
|
|
31
31
|
"jscodeshift": "17.1.2",
|
|
32
32
|
"yargs": "^17.7.2",
|
|
33
|
-
"@mui/x-internals": "8.0.0-alpha.
|
|
33
|
+
"@mui/x-internals": "8.0.0-alpha.12"
|
|
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,
|
|
@@ -12,6 +12,8 @@ var _replaceLegendDirectionValues = _interopRequireDefault(require("../replace-l
|
|
|
12
12
|
var _replaceLegendPositionValues = _interopRequireDefault(require("../replace-legend-position-values"));
|
|
13
13
|
var _removeExperimentalMarkRendering = _interopRequireDefault(require("../remove-experimental-mark-rendering"));
|
|
14
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"));
|
|
15
17
|
function transformer(file, api, options) {
|
|
16
18
|
file.source = (0, _renameLegendToSlotsLegend.default)(file, api, options);
|
|
17
19
|
file.source = (0, _renameResponsiveChartContainer.default)(file, api, options);
|
|
@@ -20,5 +22,7 @@ function transformer(file, api, options) {
|
|
|
20
22
|
file.source = (0, _replaceLegendPositionValues.default)(file, api, options);
|
|
21
23
|
file.source = (0, _removeExperimentalMarkRendering.default)(file, api, options);
|
|
22
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);
|
|
23
27
|
return file.source;
|
|
24
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
|
+
}
|
|
@@ -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
|
+
}
|