@mui/x-codemod 6.0.0-alpha.9 → 6.0.0-beta.1
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 +399 -4
- package/codemod.js +1 -1
- package/package.json +4 -4
- package/util/addComponentsSlots.js +67 -0
- package/util/removeProps.js +22 -0
- package/util/renameComponentsSlots.js +31 -0
- package/util/renameProps.js +7 -8
- package/v6.0.0/component-rename-prop/index.js +3 -2
- package/v6.0.0/data-grid/column-menu-components-rename/index.js +50 -0
- package/v6.0.0/data-grid/preset-safe/index.js +20 -0
- package/v6.0.0/data-grid/remove-disableExtendRowFullWidth-prop/index.js +24 -0
- package/v6.0.0/data-grid/rename-rowsPerPageOptions-prop/index.js +26 -0
- package/v6.0.0/data-grid/rename-selectors-and-events/index.js +39 -0
- package/v6.0.0/data-grid/row-selection-props-rename/index.js +32 -0
- package/v6.0.0/pickers/adapter-change-import/index.js +56 -0
- package/v6.0.0/{localization-provider-rename-locale → pickers/localization-provider-rename-locale}/index.js +4 -3
- package/v6.0.0/pickers/migrate-to-components-componentsProps/index.js +101 -0
- package/v6.0.0/pickers/preset-safe/index.js +32 -0
- package/v6.0.0/pickers/rename-components-to-slots/index.js +62 -0
- package/v6.0.0/pickers/rename-should-disable-time/index.js +39 -0
- package/v6.0.0/pickers/replace-arrows-button-slot/index.js +41 -0
- package/v6.0.0/pickers/replace-tabs-props/index.js +53 -0
- package/v6.0.0/pickers/replace-toolbar-props-by-slot/index.js +69 -0
- package/v6.0.0/pickers/text-props-to-localeText/index.js +101 -0
- package/v6.0.0/pickers/view-components-rename/index.js +83 -0
- package/v6.0.0/pickers/view-components-rename-value-prop/index.js +22 -0
- package/v6.0.0/preset-safe/index.js +4 -2
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = transformer;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
const defaultPropsToKey = {
|
|
10
|
+
cancelText: ['cancelButtonLabel'],
|
|
11
|
+
okText: ['okButtonLabel'],
|
|
12
|
+
todayText: ['todayButtonLabel'],
|
|
13
|
+
clearText: ['clearButtonLabel'],
|
|
14
|
+
endText: ['end'],
|
|
15
|
+
getClockLabelText: ['clockLabelText'],
|
|
16
|
+
getHoursClockNumberText: ['hoursClockNumberText'],
|
|
17
|
+
getMinutesClockNumberText: ['minutesClockNumberText'],
|
|
18
|
+
getSecondsClockNumberText: ['secondsClockNumberText'],
|
|
19
|
+
getViewSwitchingButtonText: ['calendarViewSwitchingButtonAriaLabel'],
|
|
20
|
+
startText: ['start']
|
|
21
|
+
};
|
|
22
|
+
const isMonthSwitchComponent = {
|
|
23
|
+
DatePicker: true,
|
|
24
|
+
StaticDatePicker: true,
|
|
25
|
+
MobileDatePicker: true,
|
|
26
|
+
DesktopDatePicker: true,
|
|
27
|
+
DateRangePicker: true,
|
|
28
|
+
StaticDateRangePicker: true,
|
|
29
|
+
MobileDateRangePicker: true,
|
|
30
|
+
DesktopDateRangePicker: true,
|
|
31
|
+
CalendarPicker: true,
|
|
32
|
+
// Special cases of DateTimePickers present in both
|
|
33
|
+
DateTimePicker: true,
|
|
34
|
+
StaticDateTimePicker: true,
|
|
35
|
+
MobileDateTimePicker: true,
|
|
36
|
+
DesktopDateTimePicker: true
|
|
37
|
+
};
|
|
38
|
+
const isViewSwitchComponent = {
|
|
39
|
+
TimePicker: true,
|
|
40
|
+
StaticTimePicker: true,
|
|
41
|
+
MobileTimePicker: true,
|
|
42
|
+
DesktopTimePicker: true,
|
|
43
|
+
DateTimePicker: true,
|
|
44
|
+
ClockPicker: true,
|
|
45
|
+
// Special cases of DateTimePickers present in both
|
|
46
|
+
StaticDateTimePicker: true,
|
|
47
|
+
MobileDateTimePicker: true,
|
|
48
|
+
DesktopDateTimePicker: true
|
|
49
|
+
};
|
|
50
|
+
const needsWrapper = {
|
|
51
|
+
ClockPicker: true,
|
|
52
|
+
CalendarPicker: true
|
|
53
|
+
};
|
|
54
|
+
const impactedComponents = ['DateRangePicker', 'CalendarPicker', 'ClockPicker', 'DatePicker', 'DateRangePicker', 'DateRangePickerDay', 'DateTimePicker', 'DesktopDatePicker', 'DesktopDateRangePicker', 'DesktopDateTimePicker', 'DesktopTimePicker', 'MobileDatePicker', 'MobileDateRangePicker', 'MobileDateTimePicker', 'MobileTimePicker', 'StaticDatePicker', 'StaticDateRangePicker', 'StaticDateTimePicker', 'StaticTimePicker', 'TimePicker'];
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @param {import('jscodeshift').FileInfo} file
|
|
58
|
+
* @param {import('jscodeshift').API} api
|
|
59
|
+
*/
|
|
60
|
+
function transformer(file, api, options) {
|
|
61
|
+
const j = api.jscodeshift;
|
|
62
|
+
const printOptions = options.printOptions;
|
|
63
|
+
const root = j(file.source);
|
|
64
|
+
impactedComponents.forEach(componentName => {
|
|
65
|
+
const propsToKey = (0, _extends2.default)({}, defaultPropsToKey, {
|
|
66
|
+
leftArrowButtonText: [...(isViewSwitchComponent[componentName] ? ['openPreviousView'] : []), ...(isMonthSwitchComponent[componentName] ? ['previousMonth'] : [])],
|
|
67
|
+
rightArrowButtonText: [...(isViewSwitchComponent[componentName] ? ['openNextView'] : []), ...(isMonthSwitchComponent[componentName] ? ['nextMonth'] : [])]
|
|
68
|
+
});
|
|
69
|
+
root.findJSXElements(componentName).forEach(path => {
|
|
70
|
+
const newLocaleText = [];
|
|
71
|
+
const attributes = path.node.openingElement.attributes;
|
|
72
|
+
attributes.forEach((node, index) => {
|
|
73
|
+
if (node.type === 'JSXAttribute' && propsToKey[node.name.name] !== undefined) {
|
|
74
|
+
const newNames = propsToKey[node.name.name];
|
|
75
|
+
newNames.forEach(newName => {
|
|
76
|
+
const property = j.objectProperty(j.identifier(newName), node.value.expression ? node.value.expression : j.literal(node.value.value));
|
|
77
|
+
property.shorthand = node.value.expression && node.value.expression.name === newName;
|
|
78
|
+
newLocaleText.push(property);
|
|
79
|
+
});
|
|
80
|
+
delete attributes[index];
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
if (newLocaleText.length > 0) {
|
|
84
|
+
if (needsWrapper[componentName]) {
|
|
85
|
+
// From : https://www.codeshiftcommunity.com/docs/react/#wrapping-components
|
|
86
|
+
|
|
87
|
+
// Create a new JSXElement called "LocalizationProvider" and use the original component as children
|
|
88
|
+
const wrappedComponent = j.jsxElement(j.jsxOpeningElement(j.jsxIdentifier('LocalizationProvider'), [
|
|
89
|
+
// Add the new localeText prop
|
|
90
|
+
j.jsxAttribute(j.jsxIdentifier('localeText'), j.jsxExpressionContainer(j.objectExpression(newLocaleText)))]), j.jsxClosingElement(j.jsxIdentifier('LocalizationProvider')), [path.value] // Pass in the original component as children
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
j(path).replaceWith(wrappedComponent);
|
|
94
|
+
} else {
|
|
95
|
+
attributes.push(j.jsxAttribute(j.jsxIdentifier('localeText'), j.jsxExpressionContainer(j.objectExpression(newLocaleText))));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
return root.toSource(printOptions);
|
|
101
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
const SUB_PACKAGES = {
|
|
8
|
+
CalendarPicker: 'DateCalendar',
|
|
9
|
+
CalendarPickerSkeleton: 'DayCalendarSkeleton',
|
|
10
|
+
MonthPicker: 'MonthCalendar',
|
|
11
|
+
YearPicker: 'YearCalendar',
|
|
12
|
+
ClockPicker: 'TimeClock'
|
|
13
|
+
};
|
|
14
|
+
const VARIABLES = {
|
|
15
|
+
// Date Calendar
|
|
16
|
+
CalendarPicker: 'DateCalendar',
|
|
17
|
+
CalendarPickerProps: 'DateCalendarProps',
|
|
18
|
+
CalendarPickerSlotsComponent: 'DateCalendarSlotsComponent',
|
|
19
|
+
CalendarPickerSlotsComponentsProps: 'DateCalendarSlotsComponentsProps',
|
|
20
|
+
CalendarPickerClasses: 'DateCalendarClasses',
|
|
21
|
+
CalendarPickerClassKey: 'DateCalendarClassKey',
|
|
22
|
+
calendarPickerClasses: 'dateCalendarClasses',
|
|
23
|
+
getCalendarPickerUtilityClass: 'getDateCalendarUtilityClass',
|
|
24
|
+
// Month Calendar
|
|
25
|
+
MonthPicker: 'MonthCalendar',
|
|
26
|
+
MonthPickerProps: 'MonthCalendarProps',
|
|
27
|
+
MonthPickerClasses: 'MonthCalendarClasses',
|
|
28
|
+
MonthPickerClassKey: 'MonthCalendarClassKey',
|
|
29
|
+
monthPickerClasses: 'monthCalendarClasses',
|
|
30
|
+
getMonthPickerUtilityClass: 'getMonthCalendarUtilityClass',
|
|
31
|
+
YearPicker: 'YearCalendar',
|
|
32
|
+
YearPickerProps: 'YearCalendarProps',
|
|
33
|
+
YearPickerClasses: 'YearCalendarClasses',
|
|
34
|
+
YearPickerClassKey: 'YearCalendarClassKey',
|
|
35
|
+
yearPickerClasses: 'yearCalendarClasses',
|
|
36
|
+
getYearPickerUtilityClass: 'getYearCalendarUtilityClass',
|
|
37
|
+
ClockPicker: 'TimeClock',
|
|
38
|
+
ClockPickerProps: 'TimeClockProps',
|
|
39
|
+
ClockPickerClasses: 'TimeClockClasses',
|
|
40
|
+
ClockPickerClassKey: 'TimeClockClassKey',
|
|
41
|
+
clockPickerClasses: 'timeClockClasses',
|
|
42
|
+
getClockPickerUtilityClass: 'getTimeClockUtilityClass',
|
|
43
|
+
CalendarPickerSkeleton: 'DayCalendarSkeleton',
|
|
44
|
+
CalendarPickerSkeletonProps: 'DayCalendarSkeletonProps',
|
|
45
|
+
CalendarPickerSkeletonClasses: 'DayCalendarSkeletonClasses',
|
|
46
|
+
CalendarPickerSkeletonClassKey: 'DayCalendarSkeletonClassKey',
|
|
47
|
+
calendarPickerSkeletonClasses: 'dayCalendarSkeletonClasses',
|
|
48
|
+
getCalendarPickerSkeletonUtilityClass: 'getDayCalendarSkeletonUtilityClass'
|
|
49
|
+
};
|
|
50
|
+
const PACKAGE_REGEXP = /@mui\/x-date-pickers(-pro|)(\/(.*)|)/;
|
|
51
|
+
const matchImport = path => (path.node.source.value?.toString() ?? '').match(PACKAGE_REGEXP);
|
|
52
|
+
function transformer(file, api, options) {
|
|
53
|
+
const j = api.jscodeshift;
|
|
54
|
+
const root = j(file.source);
|
|
55
|
+
const printOptions = options.printOptions || {
|
|
56
|
+
quote: 'single',
|
|
57
|
+
trailingComma: true
|
|
58
|
+
};
|
|
59
|
+
const matchingImports = root.find(j.ImportDeclaration).filter(path => !!matchImport(path));
|
|
60
|
+
|
|
61
|
+
// Rename the import specifiers
|
|
62
|
+
// - import { MonthPicker } from '@mui/x-date-pickers/MonthPicker'
|
|
63
|
+
// + import { MonthCalendar } from '@mui/x-date-pickers/MonthPicker'
|
|
64
|
+
matchingImports.find(j.ImportSpecifier).filter(path => !!VARIABLES[path.node.imported.name]).replaceWith(path => j.importSpecifier(j.identifier(VARIABLES[path.node.imported.name])));
|
|
65
|
+
|
|
66
|
+
// Rename the nested import declarations
|
|
67
|
+
// - import {} from '@mui/x-date-pickers/MonthPicker'
|
|
68
|
+
// + import {} from '@mui/x-date-pickers/MonthCalendar'
|
|
69
|
+
matchingImports.filter(path => !!SUB_PACKAGES[matchImport(path)?.[3] ?? '']).replaceWith(path => {
|
|
70
|
+
const subPackage = matchImport(path)[3];
|
|
71
|
+
const importPath = path.node.source.value?.toString() ?? '';
|
|
72
|
+
return j.importDeclaration(path.node.specifiers,
|
|
73
|
+
// copy over the existing import specifiers
|
|
74
|
+
j.stringLiteral(importPath.replace(subPackage, SUB_PACKAGES[subPackage])) // Replace the source with our new source
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Rename the import usage
|
|
79
|
+
// - <CalendarPicker />
|
|
80
|
+
// + <DateCalendar />
|
|
81
|
+
root.find(j.Identifier).filter(path => !!VARIABLES[path.node.name]).replaceWith(path => j.identifier(VARIABLES[path.node.name]));
|
|
82
|
+
return root.toSource(printOptions);
|
|
83
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = transformer;
|
|
8
|
+
var _renameProps = _interopRequireDefault(require("../../../util/renameProps"));
|
|
9
|
+
function transformer(file, api, options) {
|
|
10
|
+
const j = api.jscodeshift;
|
|
11
|
+
const root = j(file.source);
|
|
12
|
+
const printOptions = options.printOptions;
|
|
13
|
+
const result = (0, _renameProps.default)({
|
|
14
|
+
root,
|
|
15
|
+
componentNames: ['MonthPicker', 'YearPicker', 'CalendarPicker', 'ClockPicker'],
|
|
16
|
+
props: {
|
|
17
|
+
date: 'value'
|
|
18
|
+
},
|
|
19
|
+
j
|
|
20
|
+
});
|
|
21
|
+
return result.toSource(printOptions);
|
|
22
|
+
}
|
|
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = transformer;
|
|
8
|
-
var
|
|
8
|
+
var _presetSafe = _interopRequireDefault(require("../pickers/preset-safe"));
|
|
9
|
+
var _presetSafe2 = _interopRequireDefault(require("../data-grid/preset-safe"));
|
|
9
10
|
function transformer(file, api, options) {
|
|
10
|
-
file.source = (0,
|
|
11
|
+
file.source = (0, _presetSafe.default)(file, api, options);
|
|
12
|
+
file.source = (0, _presetSafe2.default)(file, api, options);
|
|
11
13
|
return file.source;
|
|
12
14
|
}
|