Migration from the lab
Material UI Date and Time Pickers are now available on MUI X!
Introduction
This is a reference for migrating your site's pickers from @mui/lab to @mui/x-date-pickers or @mui/x-date-pickers-pro.
This migration is about the npm packages used, it does not affect the behavior of the components in your application.
You can find why we are moving in this direction in the announcement blog post.
License
Most of our components remains MIT and are accessible for free in @mui/x-date-pickers.
The range-picker components: DateRangePicker, DateRangePickerDay, DesktopDateRangePicker, MobileDateRangePicker and StaticDateRangePicker
were marked as "intended for MUI X Pro" in our documentation and are now part of MUI X Pro.
If you are using one of these components, you will have to take a Pro license in order to migrate to @mui/x-date-pickers-pro (see the Pricing page for more information).
Migration steps
1. Install MUI X packages
Community plan
npm install @mui/x-date-pickersPro plan
npm install @mui/x-date-pickers-pro @mui/x-license-proWhen you purchase a commercial license, you'll receive a license key by email. You must set the license key before rendering the first component.
import { LicenseInfo } from '@mui/x-license-pro';
LicenseInfo.setLicenseKey('YOUR_LICENSE_KEY');
Learn more on the Licensing page.
2. Run the code mod
We have prepared a codemod to help you migrate your codebase.
You can either run it on a specific file, folder, or your entire codebase when choosing the <path> argument.
npx @mui/codemod v5.0.0/date-pickers-moved-to-x <path>
Which will transform the imports like this:
-import DatePicker from '@mui/lab/DatePicker';
+import { DatePicker } from '@mui/x-date-pickers/DatePicker';
-import DateRangePicker from '@mui/lab/DateRangePicker';
+import { DateRangePicker } from '@mui/x-date-pickers-pro/DateRangePicker';
-import { DatePicker, DateRangePicker } from '@mui/lab';
+import { DatePicker } from '@mui/x-date-pickers'; // DatePicker is also available in `@mui/x-date-pickers-pro`
+import { DateRangePicker } from '@mui/x-date-pickers-pro';
Components of the Community plan such as <DatePicker /> can be imported from both @mui/x-date-pickers-pro and @mui/x-date-pickers.
Date adapters such as AdapterDayjs can only be imported from @mui/x-date-pickers/[adapterName].
3. Handle breaking changes introduced in alpha
During the migration from @mui/lab to MUI X, we've focused on enhancing stability and developer experience.
Some APIs were improved to be more coherent and customizable.
Please check the complete list of the API changes before migrating from @mui/x-date-pickers 5.0.0-alpha.0 to the last v5.0.0.
Props renaming
The disableCloseOnSelect prop has been replaced by a new closeOnSelect prop which has the opposite behavior.
The default behavior remains the same (close after the last step on desktop but not on mobile).
// If you don't want to close after the last step
-<DatePicker disableCloseOnSelect={false} />
+<DatePicker closeOnSelect />
// If you want to close after the last step
-<DatePicker disableCloseOnSelect />
+<DatePicker closeOnSelect={false} />
The props of MonthPicker, YearPicker and DayPicker have been reworked to make them more consistent for a standalone usage.
- MonthPicker: The prop
onMonthChangehas been removed, you can useonChangeinstead since every change is a month change. - YearPicker: The prop
onYearChangehas been removed, you can useonChangeinstead since every change is a year change. - DayPicker: The prop
isDateDisabledhas been removed, you can now use the same validation props as for the other components (maxDate,minDate,shouldDisableDate,disableFutureanddisablePast).
Translation
Props for translation have been either deprecated or removed in favor of a global localization similar to the one used by the Data Grid. We already have ten locales provided by the community. (Thank you!)
Use slot for ActionBar
The props related to the action bar buttons (clearable, showTodayButton, cancelText, okText) have been removed.
To decide which button must be displayed and in which order, you can now use the actions prop of the actionBar component slot props.
<DatePicker
componentsProps={{
// The actions will be the same between desktop and mobile
actionBar: {
actions: ['clear'],
},
// The actions will be different between desktop and mobile
actionBar: ({ wrapperVariant }) => ({
actions: wrapperVariant === 'desktop' ? [] : ['clear'],
}),
}}
/>
The build-in ActionBar component supports 4 different actions: 'clear', 'cancel', 'accept', and 'today'.
By default, the pickers will render the cancel and accept button on mobile and no action on desktop.
If you need other actions, you can provide your own component to the ActionBar component slot
<DatePicker components={{ ActionBar: CustomActionBar }} />