Skip to content

Commit f1332f1

Browse files
[pickers] Rename AdapterDateFns into AdapterDateFnsV2 and AdapterDateFnsV3 into AdapterDateFns (mui#16082)
Signed-off-by: Lukas Tyla <[email protected]> Co-authored-by: Michel Engelen <[email protected]>
1 parent 0a7ba21 commit f1332f1

File tree

37 files changed

+436
-295
lines changed

37 files changed

+436
-295
lines changed

babel.config.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,25 +100,23 @@ module.exports = function getBabelConfig(api) {
100100

101101
if (process.env.NODE_ENV === 'test') {
102102
plugins.push(['@babel/plugin-transform-export-namespace-from']);
103-
// We replace `date-fns` imports with an aliased `date-fns@v4` version installed as `date-fns-v4` for tests.
104-
// The plugin is patched to only run on `AdapterDateFnsV3.ts`.
105-
// TODO: remove when we upgrade to date-fns v4 by default.
103+
// We replace `date-fns` imports with an aliased `date-fns@v2` version installed as `date-fns-v2` for tests.
106104
plugins.push([
107105
'babel-plugin-replace-imports',
108106
{
109107
test: /date-fns/i,
110-
replacer: 'date-fns-v4',
108+
replacer: 'date-fns-v2',
111109
// This option is provided by the `patches/[email protected]` patch
112-
filenameIncludes: 'src/AdapterDateFnsV3/',
110+
filenameIncludes: 'src/AdapterDateFnsV2/',
113111
},
114112
]);
115113
plugins.push([
116114
'babel-plugin-replace-imports',
117115
{
118116
test: /date-fns-jalali/i,
119-
replacer: 'date-fns-jalali-v4',
117+
replacer: 'date-fns-jalali-v2',
120118
// This option is provided by the `patches/[email protected]` patch
121-
filenameIncludes: 'src/AdapterDateFnsJalaliV3/',
119+
filenameIncludes: 'src/AdapterDateFnsJalaliV2/',
122120
},
123121
'replace-date-fns-jalali-imports',
124122
]);

docs/data/data-grid/custom-columns/EditingWithDatePickers.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { DatePicker } from '@mui/x-date-pickers/DatePicker';
1616
import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
1717
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
1818
import { enUS as locale } from 'date-fns/locale';
19-
import format from 'date-fns/format';
19+
import { format } from 'date-fns/format';
2020
import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
2121
/**
2222
* `date` column

docs/data/data-grid/custom-columns/EditingWithDatePickers.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { DatePicker } from '@mui/x-date-pickers/DatePicker';
2121
import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
2222
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
2323
import { enUS as locale } from 'date-fns/locale';
24-
import format from 'date-fns/format';
24+
import { format } from 'date-fns/format';
2525
import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/utils';
2626
/**
2727
* `date` column

docs/data/date-pickers/adapters-locale/adapters-locale.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,18 @@ We support `date-fns` package v2.x, v3.x, and v4.x major versions.
4545

4646
A single adapter cannot work for all `date-fns` versions, because the way functions are exported has been changed in v3.x.
4747

48-
To use `date-fns` v3.x or v4.x, you need to import the adapter from `@mui/x-date-pickers/AdapterDateFnsV3` instead of `@mui/x-date-pickers/AdapterDateFns`.
48+
To use `date-fns` v2.x, you need to import the adapter from `@mui/x-date-pickers/AdapterDateFnsV2` instead of `@mui/x-date-pickers/AdapterDateFns`.
4949
:::
5050

5151
```tsx
52-
// with date-fns v2.x
53-
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
5452
// with date-fns v3.x or v4.x
55-
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
53+
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
5654
// with date-fns v2.x
57-
import de from 'date-fns/locale/de';
55+
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV2';
5856
// with date-fns v3.x or v4.x
5957
import { de } from 'date-fns/locale/de';
58+
// with date-fns v2.x
59+
import de from 'date-fns/locale/de';
6060

6161
<LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={de}>
6262
{children}
@@ -303,10 +303,10 @@ For `date-fns`, override the `options.weekStartsOn` of the used locale:
303303

304304
```ts
305305
import { Locale } from 'date-fns';
306+
// with date-fns v3.x or v4.x
307+
import { enUS } from 'date-fns/locale/en-US';
306308
// with date-fns v2.x
307309
import enUS from 'date-fns/locale/en-US';
308-
// with date-fns v3.x
309-
import { enUS } from 'date-fns/locale/en-US';
310310

311311
const customEnLocale: Locale = {
312312
...enUS,

docs/data/date-pickers/calendar-systems/calendar-systems.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ We support `date-fns-jalali` package v2.x, v3.x, and v4.x major versions.
2424

2525
A single adapter cannot work for all `date-fns-jalali` versions, because the way functions are exported has been changed in v3.x.
2626

27-
To use `date-fns-jalali` v3.x or v4.x, you will have to import the adapter from `@mui/x-date-pickers/AdapterDateFnsJalaliV3` instead of `@mui/x-date-pickers/AdapterDateFnsJalali`.
27+
To use `date-fns-jalali` v2.x, you need to import the adapter from `@mui/x-date-pickers/AdapterDateFnsJalaliV2` instead of `@mui/x-date-pickers/AdapterDateFnsJalali`.
2828

2929
```tsx
30-
// with date-fns-jalali v2.x
31-
import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
3230
// with date-fns-jalali v3.x or v4.x
33-
import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV3';
31+
import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
32+
// with date-fns-jalali v2.x
33+
import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV2';
3434
```
3535

3636
:::

docs/data/migration/migration-pickers-v7/migration-pickers-v7.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ The following variables and types have been renamed to have a coherent `Picker`
742742
+const pickerContext = usePickerContext();
743743
```
744744

745-
- `FieldValueType`
745+
- `FieldValueType`
746746

747747
```diff
748748
-import { FieldValueType } from '@mui/x-date-pickers/models';
@@ -1131,6 +1131,36 @@ If you were using them, you need to replace them with the following code:
11311131
+ extends BaseMultiInputPickersTextFieldProps<true> {}
11321132
```
11331133

1134+
## ✅ Rename `date-fns` adapter imports
1135+
1136+
:::warning
1137+
This codemod is not idempotent. Running it multiple times will rename the imports back and forth.
1138+
1139+
In example: usage of `AdapterDateFnsV3` would be replaced by `AdapterDateFns` and a subsequent run would rename it to `AdapterDateFnsV2`.
1140+
:::
1141+
1142+
- The `AdapterDateFns` and `AdapterDateFnsJalali` adapters have been renamed to `AdapterDateFnsV2` and `AdapterDateFnsJalaliV2` respectively.
1143+
If you were using the old imports, you need to update them:
1144+
1145+
```diff
1146+
-import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
1147+
-import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
1148+
+import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV2';
1149+
+import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV2';
1150+
```
1151+
1152+
Or consider updating the `date-fns` or `date-fns-jalali` package to the latest version and use the updated adapters.
1153+
1154+
- The `AdapterDateFnsV3` and `AdapterDateFnsJalaliV3` adapters have been renamed to `AdapterDateFns` and `AdapterDateFnsJalali` respectively.
1155+
If you were using the old imports, you need to update them:
1156+
1157+
```diff
1158+
-import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
1159+
-import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV3';
1160+
+import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
1161+
+import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
1162+
```
1163+
11341164
## Stop using `LicenseInfo` from `@mui/x-date-pickers-pro`
11351165

11361166
The `LicenseInfo` object is no longer exported from the `@mui/x-date-pickers-pro` package.

docs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
"core-js": "^2.6.12",
6262
"cross-env": "^7.0.3",
6363
"d3-scale-chromatic": "^3.1.0",
64-
"date-fns": "^2.30.0",
65-
"date-fns-jalali": "^2.30.0-0",
64+
"date-fns": "^4.1.0",
65+
"date-fns-jalali": "^4.1.0-0",
6666
"dayjs": "^1.11.13",
6767
"doctrine": "^3.0.0",
6868
"exceljs": "^4.4.0",

docs/src/modules/components/PickersRenderingInstructions.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ export default function PickersRenderingInstructions() {
2222
const commandLines = [
2323
`import { LocalizationProvider } from '${componentPackage}';`,
2424
...(libraryUsed === 'date-fns'
25-
? ['// If you are using date-fns v2.x, please import `AdapterDateFns`']
25+
? ['// If you are using date-fns v3.x or v4.x, please import `AdapterDateFns`']
2626
: []),
27-
`import { ${adapterName} } from '${componentPackage}/${adapterName}'`,
27+
`import { ${adapterName} } from '${componentPackage}/${adapterName}';`,
2828
...(libraryUsed === 'date-fns'
2929
? [
30-
'// If you are using date-fns v3.x or v4.x, please import the v3 adapter',
31-
`import { ${adapterName} } from '${componentPackage}/AdapterDateFnsV3'`,
30+
'// If you are using date-fns v2.x, please import the v2 adapter',
31+
`import { ${adapterName} } from '${componentPackage}/AdapterDateFnsV2';`,
3232
]
3333
: []),
3434
'',

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@
134134
"cpy-cli": "^5.0.0",
135135
"cross-env": "^7.0.3",
136136
"danger": "^12.3.3",
137-
"date-fns-jalali-v4": "npm:date-fns-jalali@4.1.0-0",
138-
"date-fns-v4": "npm:date-fns@4.1.0",
137+
"date-fns-jalali-v2": "npm:date-fns-jalali@2.30.0-0",
138+
"date-fns-v2": "npm:date-fns@2.30.0",
139139
"eslint": "^8.57.1",
140140
"eslint-config-airbnb": "^19.0.4",
141141
"eslint-config-airbnb-typescript": "^18.0.0",

packages/x-codemod/README.md

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,15 @@ Renames `ResponsiveChartContainer` and `ResponsiveChartContainerPro` by `ChartCo
172172
+</ChartContainer>
173173
```
174174

175-
:::warning
176-
If you imported both `ResponsiveChartContainer` and `ChartContainer` in the same file, you might end up with duplicated import.
177-
Verify the git diff to remove the duplicate.
178-
179-
```diff
180-
import { ChartContainer } from '@mui/x-charts/ChartContainer';
181-
-import { ResponsiveChartContainer } from '@mui/x-charts/ResponsiveChartContainer';
182-
+import { ChartContainer } from '@mui/x-charts/ChartContainer';
183-
```
184-
185-
:::
175+
> [!WARNING]
176+
> If you imported both `ResponsiveChartContainer` and `ChartContainer` in the same file, you might end up with duplicated import.
177+
> Verify the git diff to remove the duplicate.
178+
>
179+
> ```diff
180+
> import { ChartContainer } from '@mui/x-charts/ChartContainer';
181+
> -import { ResponsiveChartContainer } from '@mui/x-charts/ResponsiveChartContainer';
182+
> +import { ChartContainer } from '@mui/x-charts/ChartContainer';
183+
> ```
186184
187185
#### `rename-label-and-tick-font-size`
188186
@@ -249,8 +247,39 @@ npx @mui/x-codemod@next v8.0.0/pickers/preset-safe <path|folder>
249247

250248
The list includes these transformers
251249

250+
- [`rename-adapter-date-fns-imports`](#rename-adapter-date-fns-imports)
252251
- [`rename-and-move-field-value-type`](#rename-and-move-field-value-type)
253252

253+
#### `rename-adapter-date-fns-imports`
254+
255+
> [!WARNING]
256+
> This codemod is not idempotent. Running it multiple times will rename the imports back and forth.
257+
> Usage of `AdapterDateFnsV3` would be replaced by `AdapterDateFns` and a subsequent run would rename it to `AdapterDateFnsV2`.
258+
259+
- Renames `AdapterDateFns` and `AdapterDateFnsJalali` imports to `AdapterDateFnsV2` and `AdapterDateFnsJalaliV2` respectfully.
260+
261+
```diff
262+
-import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
263+
-import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
264+
+import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV2';
265+
+import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV2';
266+
```
267+
268+
- Renames `AdapterDateFnsV3` and `AdapterDateFnsJalaliV3` imports to `AdapterDateFns` and `AdapterDateFnsJalali` respectfully.
269+
270+
```diff
271+
-import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
272+
-import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV3';
273+
+import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
274+
+import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
275+
```
276+
277+
<!-- #default-branch-switch -->
278+
279+
```bash
280+
npx @mui/x-codemod@next v8.0.0/pickers/rename-adapter-date-fns-imports <path>
281+
```
282+
254283
#### `rename-and-move-field-value-type`
255284

256285
Renames `FieldValueType` to `PickerValueType`.

packages/x-codemod/src/v8.0.0/pickers/preset-safe/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import transformAdapterDateFnsImports from '../rename-adapter-date-fns-imports';
12
import transformFieldValue from '../rename-and-move-field-value-type';
23

34
import { JsCodeShiftAPI, JsCodeShiftFileInfo } from '../../../types';
45

56
export default function transformer(file: JsCodeShiftFileInfo, api: JsCodeShiftAPI, options: any) {
7+
file.source = transformAdapterDateFnsImports(file, api, options);
68
file.source = transformFieldValue(file, api, options);
79

810
return file.source;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// @ts-nocheck
2+
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';
3+
import { AdapterDateFns as DateFns } from '@mui/x-date-pickers/AdapterDateFns';
4+
import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV3';
5+
import { AdapterDateFnsJalali as DateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// @ts-nocheck
2+
import { AdapterDateFns } from '@mui/x-date-pickers-pro/AdapterDateFnsV3';
3+
import { AdapterDateFns as DateFns } from '@mui/x-date-pickers-pro/AdapterDateFns';
4+
import { AdapterDateFnsJalali } from '@mui/x-date-pickers-pro/AdapterDateFnsJalaliV3';
5+
import { AdapterDateFnsJalali as DateFnsJalali } from '@mui/x-date-pickers-pro/AdapterDateFnsJalali';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
2+
import { AdapterDateFns as DateFns } from '@mui/x-date-pickers/AdapterDateFnsV2';
3+
import { AdapterDateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalali';
4+
import { AdapterDateFnsJalali as DateFnsJalali } from '@mui/x-date-pickers/AdapterDateFnsJalaliV2';
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { AdapterDateFns } from '@mui/x-date-pickers-pro/AdapterDateFns';
2+
import { AdapterDateFns as DateFns } from '@mui/x-date-pickers-pro/AdapterDateFnsV2';
3+
import { AdapterDateFnsJalali } from '@mui/x-date-pickers-pro/AdapterDateFnsJalali';
4+
import { AdapterDateFnsJalali as DateFnsJalali } from '@mui/x-date-pickers-pro/AdapterDateFnsJalaliV2';
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import type { JsCodeShiftAPI, JsCodeShiftFileInfo } from '../../../types';
2+
import { renameImports } from '../../../util/renameImports';
3+
4+
export default function transformer(file: JsCodeShiftFileInfo, api: JsCodeShiftAPI, options: any) {
5+
const j = api.jscodeshift;
6+
const root = j(file.source);
7+
8+
const printOptions = options.printOptions || {
9+
quote: 'single',
10+
trailingComma: true,
11+
};
12+
13+
renameImports({
14+
j,
15+
root,
16+
packageNames: ['@mui/x-date-pickers', '@mui/x-date-pickers-pro'],
17+
imports: [
18+
{
19+
oldEndpoint: 'AdapterDateFns',
20+
newEndpoint: 'AdapterDateFnsV2',
21+
importsMapping: {
22+
AdapterDateFns: 'AdapterDateFns',
23+
},
24+
},
25+
{
26+
oldEndpoint: 'AdapterDateFnsV3',
27+
newEndpoint: 'AdapterDateFns',
28+
importsMapping: {
29+
AdapterDateFns: 'AdapterDateFns',
30+
},
31+
},
32+
{
33+
oldEndpoint: 'AdapterDateFnsJalali',
34+
newEndpoint: 'AdapterDateFnsJalaliV2',
35+
importsMapping: {
36+
AdapterDateFnsJalali: 'AdapterDateFnsJalali',
37+
},
38+
},
39+
{
40+
oldEndpoint: 'AdapterDateFnsJalaliV3',
41+
newEndpoint: 'AdapterDateFnsJalali',
42+
importsMapping: {
43+
AdapterDateFnsJalali: 'AdapterDateFnsJalali',
44+
},
45+
},
46+
],
47+
});
48+
return root.toSource(printOptions);
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import path from 'path';
2+
import { expect } from 'chai';
3+
import jscodeshift from 'jscodeshift';
4+
import transform from '.';
5+
import readFile from '../../../util/readFile';
6+
7+
function read(fileName) {
8+
return readFile(path.join(__dirname, fileName));
9+
}
10+
11+
const TEST_FILES = ['community-import', 'pro-import'];
12+
13+
describe('v8.0.0/pickers', () => {
14+
describe('rename-adapter-date-fns-imports', () => {
15+
TEST_FILES.forEach((testFile) => {
16+
const actualPath = `./actual-${testFile}.spec.tsx`;
17+
const expectedPath = `./expected-${testFile}.spec.tsx`;
18+
19+
describe(`${testFile.replace(/-/g, ' ')}`, () => {
20+
it('transforms imports as needed', () => {
21+
const actual = transform(
22+
{ source: read(actualPath) },
23+
{ jscodeshift: jscodeshift.withParser('tsx') },
24+
{},
25+
);
26+
27+
const expected = read(expectedPath);
28+
expect(actual).to.equal(expected, 'The transformed version should be correct');
29+
});
30+
});
31+
});
32+
});
33+
});

packages/x-data-grid-premium/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
"@mui/material": "^5.16.13",
7777
"@mui/system": "^5.16.13",
7878
"@types/prop-types": "^15.7.14",
79-
"date-fns": "^2.30.0",
79+
"date-fns": "^4.1.0",
8080
"rimraf": "^6.0.1"
8181
},
8282
"engines": {

packages/x-data-grid-premium/src/tests/license.DataGridPremium.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from 'react';
2-
import addYears from 'date-fns/addYears';
2+
import { addYears } from 'date-fns/addYears';
33
import { expect } from 'chai';
44
import { createRenderer, screen, waitFor } from '@mui/internal-test-utils';
55
import { DataGridPremium } from '@mui/x-data-grid-premium';

0 commit comments

Comments
 (0)