@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.
Files changed (27) hide show
  1. package/README.md +399 -4
  2. package/codemod.js +1 -1
  3. package/package.json +4 -4
  4. package/util/addComponentsSlots.js +67 -0
  5. package/util/removeProps.js +22 -0
  6. package/util/renameComponentsSlots.js +31 -0
  7. package/util/renameProps.js +7 -8
  8. package/v6.0.0/component-rename-prop/index.js +3 -2
  9. package/v6.0.0/data-grid/column-menu-components-rename/index.js +50 -0
  10. package/v6.0.0/data-grid/preset-safe/index.js +20 -0
  11. package/v6.0.0/data-grid/remove-disableExtendRowFullWidth-prop/index.js +24 -0
  12. package/v6.0.0/data-grid/rename-rowsPerPageOptions-prop/index.js +26 -0
  13. package/v6.0.0/data-grid/rename-selectors-and-events/index.js +39 -0
  14. package/v6.0.0/data-grid/row-selection-props-rename/index.js +32 -0
  15. package/v6.0.0/pickers/adapter-change-import/index.js +56 -0
  16. package/v6.0.0/{localization-provider-rename-locale → pickers/localization-provider-rename-locale}/index.js +4 -3
  17. package/v6.0.0/pickers/migrate-to-components-componentsProps/index.js +101 -0
  18. package/v6.0.0/pickers/preset-safe/index.js +32 -0
  19. package/v6.0.0/pickers/rename-components-to-slots/index.js +62 -0
  20. package/v6.0.0/pickers/rename-should-disable-time/index.js +39 -0
  21. package/v6.0.0/pickers/replace-arrows-button-slot/index.js +41 -0
  22. package/v6.0.0/pickers/replace-tabs-props/index.js +53 -0
  23. package/v6.0.0/pickers/replace-toolbar-props-by-slot/index.js +69 -0
  24. package/v6.0.0/pickers/text-props-to-localeText/index.js +101 -0
  25. package/v6.0.0/pickers/view-components-rename/index.js +83 -0
  26. package/v6.0.0/pickers/view-components-rename-value-prop/index.js +22 -0
  27. 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 _localizationProviderRenameLocale = _interopRequireDefault(require("../localization-provider-rename-locale"));
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, _localizationProviderRenameLocale.default)(file, api, options);
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
  }