@mui/x-date-pickers 8.0.0-alpha.5 → 8.0.0-alpha.7
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/AdapterDateFns/AdapterDateFns.d.ts +2 -4
- package/AdapterDateFns/AdapterDateFns.js +49 -47
- package/AdapterDateFnsBase/AdapterDateFnsBase.d.ts +1 -1
- package/AdapterDateFnsJalali/AdapterDateFnsJalali.d.ts +2 -4
- package/AdapterDateFnsJalali/AdapterDateFnsJalali.js +48 -46
- package/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.d.ts → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.d.ts} +2 -2
- package/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.js → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.js} +45 -52
- package/AdapterDateFnsJalaliV2/index.d.ts +1 -0
- package/AdapterDateFnsJalaliV2/index.js +1 -0
- package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/package.json +1 -1
- package/{AdapterDateFnsV3/AdapterDateFnsV3.d.ts → AdapterDateFnsV2/AdapterDateFnsV2.d.ts} +2 -2
- package/{AdapterDateFnsV3/AdapterDateFnsV3.js → AdapterDateFnsV2/AdapterDateFnsV2.js} +46 -54
- package/AdapterDateFnsV2/index.d.ts +1 -0
- package/AdapterDateFnsV2/index.js +1 -0
- package/{AdapterDateFnsV3 → AdapterDateFnsV2}/package.json +1 -1
- package/AdapterDayjs/AdapterDayjs.d.ts +1 -1
- package/AdapterLuxon/AdapterLuxon.d.ts +1 -1
- package/AdapterMoment/AdapterMoment.d.ts +1 -1
- package/CHANGELOG.md +206 -1
- package/DateCalendar/DateCalendar.js +1 -1
- package/DateCalendar/PickersFadeTransitionGroup.d.ts +1 -1
- package/DateCalendar/PickersSlideTransition.d.ts +1 -1
- package/DateField/useDateField.d.ts +1 -1
- package/DateField/useDateField.js +13 -11
- package/DatePicker/DatePicker.js +1 -1
- package/DatePicker/DatePicker.types.d.ts +5 -0
- package/DatePicker/DatePickerToolbar.d.ts +1 -3
- package/DatePicker/DatePickerToolbar.js +10 -25
- package/DatePicker/shared.d.ts +1 -1
- package/DateTimeField/useDateTimeField.d.ts +1 -1
- package/DateTimeField/useDateTimeField.js +13 -11
- package/DateTimePicker/DateTimePicker.js +2 -2
- package/DateTimePicker/DateTimePicker.types.d.ts +2 -2
- package/DateTimePicker/DateTimePickerTabs.d.ts +2 -5
- package/DateTimePicker/DateTimePickerTabs.js +7 -14
- package/DateTimePicker/DateTimePickerToolbar.d.ts +12 -4
- package/DateTimePicker/DateTimePickerToolbar.js +42 -48
- package/DateTimePicker/shared.d.ts +3 -3
- package/DesktopDatePicker/DesktopDatePicker.js +9 -3
- package/DesktopDatePicker/DesktopDatePicker.types.d.ts +7 -3
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -10
- package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +2 -2
- package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +1 -2
- package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -15
- package/DesktopTimePicker/DesktopTimePicker.js +3 -7
- package/DesktopTimePicker/DesktopTimePicker.types.d.ts +2 -2
- package/MobileDatePicker/MobileDatePicker.js +2 -2
- package/MobileDatePicker/MobileDatePicker.types.d.ts +2 -3
- package/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
- package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +4 -4
- package/MobileTimePicker/MobileTimePicker.js +2 -2
- package/MobileTimePicker/MobileTimePicker.types.d.ts +4 -4
- package/PickersActionBar/PickersActionBar.d.ts +6 -7
- package/PickersActionBar/PickersActionBar.js +18 -16
- package/PickersLayout/PickersLayout.d.ts +2 -2
- package/PickersLayout/PickersLayout.js +1 -15
- package/PickersLayout/PickersLayout.types.d.ts +12 -15
- package/PickersLayout/usePickerLayout.d.ts +2 -2
- package/PickersLayout/usePickerLayout.js +13 -47
- package/PickersShortcuts/PickersShortcuts.d.ts +2 -5
- package/PickersShortcuts/PickersShortcuts.js +13 -10
- package/PickersShortcuts/index.d.ts +1 -1
- package/PickersTextField/PickersInputBase/PickersInputBase.js +7 -0
- package/PickersTextField/PickersTextField.js +1 -1
- package/StaticDatePicker/StaticDatePicker.types.d.ts +2 -3
- package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +2 -2
- package/StaticTimePicker/StaticTimePicker.types.d.ts +2 -2
- package/TimeField/useTimeField.d.ts +1 -1
- package/TimeField/useTimeField.js +13 -11
- package/TimePicker/TimePicker.js +2 -2
- package/TimePicker/TimePicker.types.d.ts +2 -2
- package/TimePicker/TimePickerToolbar.d.ts +1 -2
- package/TimePicker/TimePickerToolbar.js +23 -35
- package/TimePicker/shared.d.ts +1 -1
- package/hooks/index.d.ts +2 -0
- package/hooks/index.js +3 -1
- package/hooks/useIsValidValue.d.ts +7 -0
- package/hooks/useIsValidValue.js +11 -0
- package/hooks/usePickerActionsContext.d.ts +7 -0
- package/hooks/usePickerActionsContext.js +15 -0
- package/hooks/usePickerContext.d.ts +3 -1
- package/hooks/usePickerContext.js +1 -2
- package/index.d.ts +1 -0
- package/index.js +3 -2
- package/internals/components/PickerProvider.d.ts +14 -8
- package/internals/components/PickerProvider.js +17 -6
- package/internals/components/PickersModalDialog.d.ts +1 -3
- package/internals/components/PickersModalDialog.js +9 -3
- package/internals/components/PickersPopper.d.ts +1 -3
- package/internals/components/PickersPopper.js +11 -6
- package/internals/components/PickersToolbar.d.ts +2 -3
- package/internals/components/PickersToolbar.js +1 -1
- package/internals/hooks/date-helpers-hooks.js +4 -3
- package/internals/hooks/useDesktopPicker/useDesktopPicker.js +10 -12
- package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +7 -7
- package/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
- package/internals/hooks/useField/index.d.ts +1 -1
- package/internals/hooks/useField/index.js +1 -1
- package/internals/hooks/useField/useField.d.ts +10 -1
- package/internals/hooks/useField/useField.js +17 -1
- package/internals/hooks/useField/useField.utils.js +2 -2
- package/internals/hooks/useField/useFieldState.js +2 -2
- package/internals/hooks/useField/useFieldV6TextField.js +2 -2
- package/internals/hooks/useMobilePicker/useMobilePicker.js +9 -10
- package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +7 -7
- package/internals/hooks/useOpenState.js +3 -2
- package/internals/hooks/usePicker/usePicker.d.ts +1 -1
- package/internals/hooks/usePicker/usePicker.js +0 -8
- package/internals/hooks/usePicker/usePicker.types.d.ts +6 -7
- package/internals/hooks/usePicker/usePickerProvider.d.ts +5 -5
- package/internals/hooks/usePicker/usePickerProvider.js +8 -5
- package/internals/hooks/usePicker/usePickerValue.d.ts +1 -1
- package/internals/hooks/usePicker/usePickerValue.js +82 -217
- package/internals/hooks/usePicker/usePickerValue.types.d.ts +82 -67
- package/internals/hooks/usePicker/usePickerViews.d.ts +35 -20
- package/internals/hooks/usePicker/usePickerViews.js +22 -14
- package/internals/hooks/useStaticPicker/useStaticPicker.js +1 -4
- package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +6 -6
- package/internals/hooks/useUtils.js +1 -1
- package/internals/index.d.ts +9 -7
- package/internals/index.js +5 -3
- package/internals/models/index.d.ts +1 -0
- package/internals/models/index.js +2 -1
- package/internals/models/manager.d.ts +12 -0
- package/internals/models/manager.js +1 -0
- package/internals/models/props/basePickerProps.d.ts +2 -2
- package/internals/models/props/tabs.d.ts +0 -13
- package/internals/models/props/toolbar.d.ts +1 -20
- package/internals/utils/date-utils.js +1 -1
- package/internals/utils/valueManagers.js +4 -4
- package/locales/index.d.ts +1 -0
- package/locales/index.js +1 -0
- package/locales/nbNO.js +15 -19
- package/locales/utils/getPickersLocalization.js +1 -1
- package/locales/zhTW.d.ts +80 -0
- package/locales/zhTW.js +73 -0
- package/managers/index.d.ts +6 -0
- package/managers/index.js +3 -0
- package/managers/package.json +6 -0
- package/managers/useDateManager.d.ts +27 -0
- package/managers/useDateManager.js +47 -0
- package/managers/useDateTimeManager.d.ts +28 -0
- package/managers/useDateTimeManager.js +52 -0
- package/managers/useTimeManager.d.ts +28 -0
- package/managers/useTimeManager.js +43 -0
- package/models/adapters.d.ts +1 -1
- package/models/index.d.ts +1 -0
- package/models/index.js +1 -0
- package/models/manager.d.ts +78 -0
- package/models/manager.js +1 -0
- package/models/pickers.d.ts +7 -0
- package/modern/AdapterDateFns/AdapterDateFns.js +49 -47
- package/modern/AdapterDateFnsJalali/AdapterDateFnsJalali.js +48 -46
- package/modern/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.js → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.js} +45 -52
- package/modern/AdapterDateFnsJalaliV2/index.js +1 -0
- package/modern/{AdapterDateFnsV3/AdapterDateFnsV3.js → AdapterDateFnsV2/AdapterDateFnsV2.js} +46 -54
- package/modern/AdapterDateFnsV2/index.js +1 -0
- package/modern/DateCalendar/DateCalendar.js +1 -1
- package/modern/DateField/useDateField.js +13 -11
- package/modern/DatePicker/DatePicker.js +1 -1
- package/modern/DatePicker/DatePickerToolbar.js +10 -25
- package/modern/DateTimeField/useDateTimeField.js +13 -11
- package/modern/DateTimePicker/DateTimePicker.js +2 -2
- package/modern/DateTimePicker/DateTimePickerTabs.js +7 -14
- package/modern/DateTimePicker/DateTimePickerToolbar.js +42 -48
- package/modern/DesktopDatePicker/DesktopDatePicker.js +9 -3
- package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -10
- package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -15
- package/modern/DesktopTimePicker/DesktopTimePicker.js +3 -7
- package/modern/MobileDatePicker/MobileDatePicker.js +2 -2
- package/modern/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
- package/modern/MobileTimePicker/MobileTimePicker.js +2 -2
- package/modern/PickersActionBar/PickersActionBar.js +18 -16
- package/modern/PickersLayout/PickersLayout.js +1 -15
- package/modern/PickersLayout/usePickerLayout.js +13 -47
- package/modern/PickersShortcuts/PickersShortcuts.js +13 -10
- package/modern/PickersTextField/PickersInputBase/PickersInputBase.js +7 -0
- package/modern/PickersTextField/PickersTextField.js +1 -1
- package/modern/TimeField/useTimeField.js +13 -11
- package/modern/TimePicker/TimePicker.js +2 -2
- package/modern/TimePicker/TimePickerToolbar.js +23 -35
- package/modern/hooks/index.js +3 -1
- package/modern/hooks/useIsValidValue.js +11 -0
- package/modern/hooks/usePickerActionsContext.js +15 -0
- package/modern/hooks/usePickerContext.js +1 -2
- package/modern/index.js +3 -2
- package/modern/internals/components/PickerProvider.js +17 -6
- package/modern/internals/components/PickersModalDialog.js +9 -3
- package/modern/internals/components/PickersPopper.js +11 -6
- package/modern/internals/components/PickersToolbar.js +1 -1
- package/modern/internals/hooks/date-helpers-hooks.js +4 -3
- package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +10 -12
- package/modern/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
- package/modern/internals/hooks/useField/index.js +1 -1
- package/modern/internals/hooks/useField/useField.js +17 -1
- package/modern/internals/hooks/useField/useField.utils.js +2 -2
- package/modern/internals/hooks/useField/useFieldState.js +2 -2
- package/modern/internals/hooks/useField/useFieldV6TextField.js +2 -2
- package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +9 -10
- package/modern/internals/hooks/useOpenState.js +3 -2
- package/modern/internals/hooks/usePicker/usePicker.js +0 -8
- package/modern/internals/hooks/usePicker/usePickerProvider.js +8 -5
- package/modern/internals/hooks/usePicker/usePickerValue.js +82 -217
- package/modern/internals/hooks/usePicker/usePickerViews.js +22 -14
- package/modern/internals/hooks/useStaticPicker/useStaticPicker.js +1 -4
- package/modern/internals/hooks/useUtils.js +1 -1
- package/modern/internals/index.js +5 -3
- package/modern/internals/models/index.js +2 -1
- package/modern/internals/models/manager.js +1 -0
- package/modern/internals/utils/date-utils.js +1 -1
- package/modern/internals/utils/valueManagers.js +4 -4
- package/modern/locales/index.js +1 -0
- package/modern/locales/nbNO.js +15 -19
- package/modern/locales/utils/getPickersLocalization.js +1 -1
- package/modern/locales/zhTW.js +73 -0
- package/modern/managers/index.js +3 -0
- package/modern/managers/useDateManager.js +47 -0
- package/modern/managers/useDateTimeManager.js +52 -0
- package/modern/managers/useTimeManager.js +43 -0
- package/modern/models/index.js +1 -0
- package/modern/models/manager.js +1 -0
- package/node/AdapterDateFns/AdapterDateFns.js +97 -97
- package/node/AdapterDateFnsJalali/AdapterDateFnsJalali.js +97 -96
- package/node/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.js → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.js} +94 -101
- package/node/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
- package/node/AdapterDateFnsV2/AdapterDateFnsV2.js +291 -0
- package/node/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
- package/node/DateCalendar/DateCalendar.js +1 -1
- package/node/DateField/useDateField.js +12 -10
- package/node/DatePicker/DatePicker.js +1 -1
- package/node/DatePicker/DatePickerToolbar.js +10 -25
- package/node/DateTimeField/useDateTimeField.js +12 -10
- package/node/DateTimePicker/DateTimePicker.js +2 -2
- package/node/DateTimePicker/DateTimePickerTabs.js +7 -14
- package/node/DateTimePicker/DateTimePickerToolbar.js +43 -49
- package/node/DesktopDatePicker/DesktopDatePicker.js +9 -3
- package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -10
- package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -15
- package/node/DesktopTimePicker/DesktopTimePicker.js +3 -7
- package/node/MobileDatePicker/MobileDatePicker.js +2 -2
- package/node/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
- package/node/MobileTimePicker/MobileTimePicker.js +2 -2
- package/node/PickersActionBar/PickersActionBar.js +20 -18
- package/node/PickersLayout/PickersLayout.js +1 -15
- package/node/PickersLayout/usePickerLayout.js +17 -51
- package/node/PickersShortcuts/PickersShortcuts.js +13 -10
- package/node/PickersTextField/PickersInputBase/PickersInputBase.js +7 -0
- package/node/PickersTextField/PickersTextField.js +1 -1
- package/node/TimeField/useTimeField.js +12 -10
- package/node/TimePicker/TimePicker.js +2 -2
- package/node/TimePicker/TimePickerToolbar.js +23 -35
- package/node/hooks/index.js +15 -1
- package/node/hooks/useIsValidValue.js +18 -0
- package/node/hooks/usePickerActionsContext.js +22 -0
- package/node/hooks/usePickerContext.js +1 -1
- package/node/index.js +13 -1
- package/node/internals/components/PickerProvider.js +18 -7
- package/node/internals/components/PickersModalDialog.js +9 -3
- package/node/internals/components/PickersPopper.js +11 -6
- package/node/internals/components/PickersToolbar.js +1 -1
- package/node/internals/hooks/date-helpers-hooks.js +4 -3
- package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +10 -12
- package/node/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
- package/node/internals/hooks/useField/index.js +6 -0
- package/node/internals/hooks/useField/useField.js +18 -1
- package/node/internals/hooks/useField/useField.utils.js +2 -2
- package/node/internals/hooks/useField/useFieldState.js +2 -2
- package/node/internals/hooks/useField/useFieldV6TextField.js +2 -2
- package/node/internals/hooks/useMobilePicker/useMobilePicker.js +9 -10
- package/node/internals/hooks/useOpenState.js +4 -2
- package/node/internals/hooks/usePicker/usePicker.js +0 -9
- package/node/internals/hooks/usePicker/usePickerProvider.js +8 -5
- package/node/internals/hooks/usePicker/usePickerValue.js +82 -217
- package/node/internals/hooks/usePicker/usePickerViews.js +22 -15
- package/node/internals/hooks/useStaticPicker/useStaticPicker.js +1 -4
- package/node/internals/hooks/useUtils.js +1 -1
- package/node/internals/index.js +28 -20
- package/node/internals/models/index.js +11 -0
- package/node/internals/models/manager.js +5 -0
- package/node/internals/utils/date-utils.js +1 -1
- package/node/internals/utils/valueManagers.js +4 -4
- package/node/locales/index.js +11 -0
- package/node/locales/nbNO.js +15 -19
- package/node/locales/utils/getPickersLocalization.js +1 -1
- package/node/locales/zhTW.js +79 -0
- package/node/managers/index.js +26 -0
- package/node/managers/useDateManager.js +55 -0
- package/node/managers/useDateTimeManager.js +60 -0
- package/node/managers/useTimeManager.js +51 -0
- package/node/models/index.js +11 -0
- package/node/models/manager.js +5 -0
- package/package.json +3 -3
- package/themeAugmentation/props.d.ts +2 -3
- package/validation/extractValidationProps.d.ts +1 -1
- package/AdapterDateFnsJalaliV3/index.d.ts +0 -1
- package/AdapterDateFnsJalaliV3/index.js +0 -1
- package/AdapterDateFnsV3/index.d.ts +0 -1
- package/AdapterDateFnsV3/index.js +0 -1
- package/internals/hooks/defaultizedFieldProps.d.ts +0 -18
- package/internals/hooks/defaultizedFieldProps.js +0 -40
- package/modern/AdapterDateFnsJalaliV3/index.js +0 -1
- package/modern/AdapterDateFnsV3/index.js +0 -1
- package/modern/internals/hooks/defaultizedFieldProps.js +0 -40
- package/node/AdapterDateFnsV3/AdapterDateFnsV3.js +0 -299
- package/node/internals/hooks/defaultizedFieldProps.js +0 -50
|
@@ -148,7 +148,7 @@ export const useFieldState = params => {
|
|
|
148
148
|
const updateValueFromValueStr = valueStr => {
|
|
149
149
|
const parseDateStr = (dateStr, referenceDate) => {
|
|
150
150
|
const date = utils.parse(dateStr, format);
|
|
151
|
-
if (
|
|
151
|
+
if (!utils.isValid(date)) {
|
|
152
152
|
return null;
|
|
153
153
|
}
|
|
154
154
|
const sections = buildSectionsFromFormat({
|
|
@@ -199,7 +199,7 @@ export const useFieldState = params => {
|
|
|
199
199
|
* Then we merge the value of the modified sections into the reference date.
|
|
200
200
|
* This makes sure that we don't lose some information of the initial date (like the time on a date field).
|
|
201
201
|
*/
|
|
202
|
-
if (
|
|
202
|
+
if (utils.isValid(newActiveDate)) {
|
|
203
203
|
const mergedDate = mergeDateIntoReferenceDate(utils, newActiveDate, newActiveDateSections, activeDateManager.referenceDate, true);
|
|
204
204
|
values = activeDateManager.getNewValuesFromNewActiveDate(mergedDate);
|
|
205
205
|
shouldPublish = true;
|
|
@@ -35,8 +35,8 @@ export const addPositionPropertiesToSections = (sections, localizedDigits, isRtl
|
|
|
35
35
|
};
|
|
36
36
|
export const useFieldV6TextField = params => {
|
|
37
37
|
const isRtl = useRtl();
|
|
38
|
-
const focusTimeoutRef = React.useRef();
|
|
39
|
-
const selectionSyncTimeoutRef = React.useRef();
|
|
38
|
+
const focusTimeoutRef = React.useRef(undefined);
|
|
39
|
+
const selectionSyncTimeoutRef = React.useRef(undefined);
|
|
40
40
|
const {
|
|
41
41
|
forwardedProps: {
|
|
42
42
|
onFocus,
|
|
@@ -46,9 +46,6 @@ export const useMobilePicker = _ref => {
|
|
|
46
46
|
const labelId = useId();
|
|
47
47
|
const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
|
|
48
48
|
const {
|
|
49
|
-
open,
|
|
50
|
-
actions,
|
|
51
|
-
layoutProps,
|
|
52
49
|
providerProps,
|
|
53
50
|
renderCurrentView,
|
|
54
51
|
fieldProps: pickerFieldProps,
|
|
@@ -58,7 +55,6 @@ export const useMobilePicker = _ref => {
|
|
|
58
55
|
fieldRef,
|
|
59
56
|
localeText,
|
|
60
57
|
autoFocusView: true,
|
|
61
|
-
additionalViewProps: {},
|
|
62
58
|
variant: 'mobile'
|
|
63
59
|
}));
|
|
64
60
|
const Field = slots.field;
|
|
@@ -86,8 +82,12 @@ export const useMobilePicker = _ref => {
|
|
|
86
82
|
}, isToolbarHidden && {
|
|
87
83
|
id: labelId
|
|
88
84
|
}, !(disabled || readOnly) && {
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
// These direct access to `providerProps` will go away in https://github.com/mui/mui-x/pull/15671
|
|
86
|
+
onClick: event => {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
providerProps.contextValue.setOpen(true);
|
|
89
|
+
},
|
|
90
|
+
onKeyDown: onSpaceOrEnter(() => providerProps.contextValue.setOpen(true))
|
|
91
91
|
}, !!inputRef && {
|
|
92
92
|
inputRef
|
|
93
93
|
}),
|
|
@@ -124,16 +124,15 @@ export const useMobilePicker = _ref => {
|
|
|
124
124
|
slots: slotsForField,
|
|
125
125
|
slotProps: slotProps,
|
|
126
126
|
unstableFieldRef: handleFieldRef
|
|
127
|
-
})), /*#__PURE__*/_jsx(PickersModalDialog,
|
|
128
|
-
open: open,
|
|
127
|
+
})), /*#__PURE__*/_jsx(PickersModalDialog, {
|
|
129
128
|
slots: slots,
|
|
130
129
|
slotProps: slotProps,
|
|
131
|
-
children: /*#__PURE__*/_jsx(Layout, _extends({},
|
|
130
|
+
children: /*#__PURE__*/_jsx(Layout, _extends({}, slotProps?.layout, {
|
|
132
131
|
slots: slots,
|
|
133
132
|
slotProps: slotProps,
|
|
134
133
|
children: renderCurrentView()
|
|
135
134
|
}))
|
|
136
|
-
})
|
|
135
|
+
})]
|
|
137
136
|
}));
|
|
138
137
|
return {
|
|
139
138
|
renderPicker
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import useEventCallback from '@mui/utils/useEventCallback';
|
|
2
3
|
export const useOpenState = ({
|
|
3
4
|
open,
|
|
4
5
|
onOpen,
|
|
@@ -17,7 +18,7 @@ export const useOpenState = ({
|
|
|
17
18
|
setOpenState(open);
|
|
18
19
|
}
|
|
19
20
|
}, [isControllingOpenProp, open]);
|
|
20
|
-
const setOpen =
|
|
21
|
+
const setOpen = useEventCallback(action => {
|
|
21
22
|
const newOpen = typeof action === 'function' ? action(openState) : action;
|
|
22
23
|
if (!isControllingOpenProp) {
|
|
23
24
|
setOpenState(newOpen);
|
|
@@ -28,7 +29,7 @@ export const useOpenState = ({
|
|
|
28
29
|
if (!newOpen && onClose) {
|
|
29
30
|
onClose();
|
|
30
31
|
}
|
|
31
|
-
}
|
|
32
|
+
});
|
|
32
33
|
return {
|
|
33
34
|
open: openState,
|
|
34
35
|
setOpen
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
1
|
import { warnOnce } from '@mui/x-internals/warning';
|
|
3
2
|
import { usePickerValue } from "./usePickerValue.js";
|
|
4
3
|
import { usePickerViews } from "./usePickerViews.js";
|
|
@@ -8,7 +7,6 @@ export const usePicker = ({
|
|
|
8
7
|
valueManager,
|
|
9
8
|
valueType,
|
|
10
9
|
variant,
|
|
11
|
-
additionalViewProps,
|
|
12
10
|
validator,
|
|
13
11
|
autoFocusView,
|
|
14
12
|
rendererInterceptor,
|
|
@@ -24,12 +22,10 @@ export const usePicker = ({
|
|
|
24
22
|
props,
|
|
25
23
|
valueManager,
|
|
26
24
|
valueType,
|
|
27
|
-
variant,
|
|
28
25
|
validator
|
|
29
26
|
});
|
|
30
27
|
const pickerViewsResponse = usePickerViews({
|
|
31
28
|
props,
|
|
32
|
-
additionalViewProps,
|
|
33
29
|
autoFocusView,
|
|
34
30
|
fieldRef,
|
|
35
31
|
propsFromPickerValue: pickerValueResponse.viewProps,
|
|
@@ -45,15 +41,11 @@ export const usePicker = ({
|
|
|
45
41
|
});
|
|
46
42
|
return {
|
|
47
43
|
// Picker value
|
|
48
|
-
open: pickerValueResponse.open,
|
|
49
|
-
actions: pickerValueResponse.actions,
|
|
50
44
|
fieldProps: pickerValueResponse.fieldProps,
|
|
51
45
|
// Picker views
|
|
52
46
|
renderCurrentView: pickerViewsResponse.renderCurrentView,
|
|
53
47
|
hasUIView: pickerViewsResponse.provider.hasUIView,
|
|
54
48
|
shouldRestoreFocus: pickerViewsResponse.shouldRestoreFocus,
|
|
55
|
-
// Picker layout
|
|
56
|
-
layoutProps: _extends({}, pickerViewsResponse.layoutProps, pickerValueResponse.layoutProps),
|
|
57
49
|
// Picker provider
|
|
58
50
|
providerProps,
|
|
59
51
|
// Picker owner state
|
|
@@ -53,19 +53,22 @@ export function usePickerProvider(parameters) {
|
|
|
53
53
|
pickerOrientation: orientation,
|
|
54
54
|
pickerVariant: variant
|
|
55
55
|
}), [utils, valueManager, paramsFromUsePickerValue.value, paramsFromUsePickerValue.contextValue.open, orientation, variant, props.disabled, props.readOnly]);
|
|
56
|
-
const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, {
|
|
56
|
+
const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, paramsFromUsePickerViews.contextValue, {
|
|
57
57
|
disabled: props.disabled ?? false,
|
|
58
58
|
readOnly: props.readOnly ?? false,
|
|
59
59
|
variant,
|
|
60
60
|
orientation
|
|
61
|
-
}), [paramsFromUsePickerValue.contextValue, variant, orientation, props.disabled, props.readOnly]);
|
|
62
|
-
const privateContextValue = React.useMemo(() => ({
|
|
61
|
+
}), [paramsFromUsePickerValue.contextValue, paramsFromUsePickerViews.contextValue, variant, orientation, props.disabled, props.readOnly]);
|
|
62
|
+
const privateContextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.privateContextValue, {
|
|
63
63
|
ownerState
|
|
64
|
-
}), [ownerState]);
|
|
64
|
+
}), [paramsFromUsePickerValue, ownerState]);
|
|
65
|
+
const actionsContextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.actionsContextValue, paramsFromUsePickerViews.actionsContextValue), [paramsFromUsePickerValue.actionsContextValue, paramsFromUsePickerViews.actionsContextValue]);
|
|
65
66
|
return {
|
|
66
67
|
localeText,
|
|
67
68
|
contextValue,
|
|
68
|
-
privateContextValue
|
|
69
|
+
privateContextValue,
|
|
70
|
+
actionsContextValue,
|
|
71
|
+
isValidContextValue: paramsFromUsePickerValue.isValidContextValue
|
|
69
72
|
};
|
|
70
73
|
}
|
|
71
74
|
|
|
@@ -5,106 +5,6 @@ import { useOpenState } from "../useOpenState.js";
|
|
|
5
5
|
import { useLocalizationContext, useUtils } from "../useUtils.js";
|
|
6
6
|
import { useValidation } from "../../../validation/index.js";
|
|
7
7
|
import { useValueWithTimezone } from "../useValueWithTimezone.js";
|
|
8
|
-
/**
|
|
9
|
-
* Decide if the new value should be published
|
|
10
|
-
* The published value will be passed to `onChange` if defined.
|
|
11
|
-
*/
|
|
12
|
-
const shouldPublishValue = params => {
|
|
13
|
-
const {
|
|
14
|
-
action,
|
|
15
|
-
hasChanged,
|
|
16
|
-
dateState,
|
|
17
|
-
isControlled
|
|
18
|
-
} = params;
|
|
19
|
-
const isCurrentValueTheDefaultValue = !isControlled && !dateState.hasBeenModifiedSinceMount;
|
|
20
|
-
|
|
21
|
-
// The field is responsible for only calling `onChange` when needed.
|
|
22
|
-
if (action.name === 'setValueFromField') {
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
if (action.name === 'setValueFromAction') {
|
|
26
|
-
// If the component is not controlled, and the value has not been modified since the mount,
|
|
27
|
-
// Then we want to publish the default value whenever the user pressed the "Accept", "Today" or "Clear" button.
|
|
28
|
-
if (isCurrentValueTheDefaultValue && ['accept', 'today', 'clear'].includes(action.pickerAction)) {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
return hasChanged(dateState.lastPublishedValue);
|
|
32
|
-
}
|
|
33
|
-
if (action.name === 'setValueFromView' && action.selectionState !== 'shallow') {
|
|
34
|
-
// On the first view,
|
|
35
|
-
// If the value is not controlled, then clicking on any value (including the one equal to `defaultValue`) should call `onChange`
|
|
36
|
-
if (isCurrentValueTheDefaultValue) {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
return hasChanged(dateState.lastPublishedValue);
|
|
40
|
-
}
|
|
41
|
-
if (action.name === 'setValueFromShortcut') {
|
|
42
|
-
// On the first view,
|
|
43
|
-
// If the value is not controlled, then clicking on any value (including the one equal to `defaultValue`) should call `onChange`
|
|
44
|
-
if (isCurrentValueTheDefaultValue) {
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
return hasChanged(dateState.lastPublishedValue);
|
|
48
|
-
}
|
|
49
|
-
return false;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Decide if the new value should be committed.
|
|
54
|
-
* The committed value will be passed to `onAccept` if defined.
|
|
55
|
-
* It will also be used as a reset target when calling the `cancel` picker action (when clicking on the "Cancel" button).
|
|
56
|
-
*/
|
|
57
|
-
const shouldCommitValue = params => {
|
|
58
|
-
const {
|
|
59
|
-
action,
|
|
60
|
-
hasChanged,
|
|
61
|
-
dateState,
|
|
62
|
-
isControlled,
|
|
63
|
-
closeOnSelect
|
|
64
|
-
} = params;
|
|
65
|
-
const isCurrentValueTheDefaultValue = !isControlled && !dateState.hasBeenModifiedSinceMount;
|
|
66
|
-
if (action.name === 'setValueFromAction') {
|
|
67
|
-
// If the component is not controlled, and the value has not been modified since the mount,
|
|
68
|
-
// Then we want to commit the default value whenever the user pressed the "Accept", "Today" or "Clear" button.
|
|
69
|
-
if (isCurrentValueTheDefaultValue && ['accept', 'today', 'clear'].includes(action.pickerAction)) {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
return hasChanged(dateState.lastCommittedValue);
|
|
73
|
-
}
|
|
74
|
-
if (action.name === 'setValueFromView' && action.selectionState === 'finish' && closeOnSelect) {
|
|
75
|
-
// On picker where the 1st view is also the last view,
|
|
76
|
-
// If the value is not controlled, then clicking on any value (including the one equal to `defaultValue`) should call `onAccept`
|
|
77
|
-
if (isCurrentValueTheDefaultValue) {
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
return hasChanged(dateState.lastCommittedValue);
|
|
81
|
-
}
|
|
82
|
-
if (action.name === 'setValueFromShortcut') {
|
|
83
|
-
return action.changeImportance === 'accept' && hasChanged(dateState.lastCommittedValue);
|
|
84
|
-
}
|
|
85
|
-
return false;
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Decide if the picker should be closed after the value is updated.
|
|
90
|
-
*/
|
|
91
|
-
const shouldClosePicker = params => {
|
|
92
|
-
const {
|
|
93
|
-
action,
|
|
94
|
-
closeOnSelect
|
|
95
|
-
} = params;
|
|
96
|
-
if (action.name === 'setValueFromAction') {
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
if (action.name === 'setValueFromView') {
|
|
100
|
-
return action.selectionState === 'finish' && closeOnSelect;
|
|
101
|
-
}
|
|
102
|
-
if (action.name === 'setValueFromShortcut') {
|
|
103
|
-
return action.changeImportance === 'accept';
|
|
104
|
-
}
|
|
105
|
-
return false;
|
|
106
|
-
};
|
|
107
|
-
|
|
108
8
|
/**
|
|
109
9
|
* Manage the value lifecycle of all the pickers.
|
|
110
10
|
*/
|
|
@@ -112,7 +12,6 @@ export const usePickerValue = ({
|
|
|
112
12
|
props,
|
|
113
13
|
valueManager,
|
|
114
14
|
valueType,
|
|
115
|
-
variant,
|
|
116
15
|
validator
|
|
117
16
|
}) => {
|
|
118
17
|
const {
|
|
@@ -120,7 +19,7 @@ export const usePickerValue = ({
|
|
|
120
19
|
onChange,
|
|
121
20
|
value: inValueWithoutRenderTimezone,
|
|
122
21
|
defaultValue: inDefaultValue,
|
|
123
|
-
closeOnSelect =
|
|
22
|
+
closeOnSelect = false,
|
|
124
23
|
timezone: timezoneProp,
|
|
125
24
|
referenceDate
|
|
126
25
|
} = props;
|
|
@@ -200,43 +99,49 @@ export const usePickerValue = ({
|
|
|
200
99
|
value: dateState.draft,
|
|
201
100
|
onError: props.onError
|
|
202
101
|
});
|
|
203
|
-
const
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
102
|
+
const setValue = useEventCallback((newValue, options) => {
|
|
103
|
+
const {
|
|
104
|
+
changeImportance = 'accept',
|
|
105
|
+
skipPublicationIfPristine = false,
|
|
106
|
+
validationError,
|
|
107
|
+
shortcut
|
|
108
|
+
} = options ?? {};
|
|
109
|
+
let shouldPublish;
|
|
110
|
+
let shouldCommit;
|
|
111
|
+
if (!skipPublicationIfPristine && !isControlled && !dateState.hasBeenModifiedSinceMount) {
|
|
112
|
+
// If the value is not controlled and the value has never been modified before,
|
|
113
|
+
// Then clicking on any value (including the one equal to `defaultValue`) should call `onChange` and `onAccept`
|
|
114
|
+
shouldPublish = true;
|
|
115
|
+
shouldCommit = changeImportance === 'accept';
|
|
116
|
+
} else {
|
|
117
|
+
shouldPublish = !valueManager.areValuesEqual(utils, newValue, dateState.lastPublishedValue);
|
|
118
|
+
shouldCommit = changeImportance === 'accept' && !valueManager.areValuesEqual(utils, newValue, dateState.lastCommittedValue);
|
|
119
|
+
}
|
|
214
120
|
setDateState(prev => _extends({}, prev, {
|
|
215
|
-
draft:
|
|
216
|
-
lastPublishedValue: shouldPublish ?
|
|
217
|
-
lastCommittedValue: shouldCommit ?
|
|
121
|
+
draft: newValue,
|
|
122
|
+
lastPublishedValue: shouldPublish ? newValue : prev.lastPublishedValue,
|
|
123
|
+
lastCommittedValue: shouldCommit ? newValue : prev.lastCommittedValue,
|
|
218
124
|
hasBeenModifiedSinceMount: true
|
|
219
125
|
}));
|
|
220
126
|
let cachedContext = null;
|
|
221
127
|
const getContext = () => {
|
|
222
128
|
if (!cachedContext) {
|
|
223
|
-
const validationError = action.name === 'setValueFromField' ? action.context.validationError : getValidationErrorForNewValue(action.value);
|
|
224
129
|
cachedContext = {
|
|
225
|
-
validationError
|
|
130
|
+
validationError: validationError == null ? getValidationErrorForNewValue(newValue) : validationError
|
|
226
131
|
};
|
|
227
|
-
if (
|
|
228
|
-
cachedContext.shortcut =
|
|
132
|
+
if (shortcut) {
|
|
133
|
+
cachedContext.shortcut = shortcut;
|
|
229
134
|
}
|
|
230
135
|
}
|
|
231
136
|
return cachedContext;
|
|
232
137
|
};
|
|
233
138
|
if (shouldPublish) {
|
|
234
|
-
handleValueChange(
|
|
139
|
+
handleValueChange(newValue, getContext());
|
|
235
140
|
}
|
|
236
141
|
if (shouldCommit && onAccept) {
|
|
237
|
-
onAccept(
|
|
142
|
+
onAccept(newValue, getContext());
|
|
238
143
|
}
|
|
239
|
-
if (
|
|
144
|
+
if (changeImportance === 'accept') {
|
|
240
145
|
setOpen(false);
|
|
241
146
|
}
|
|
242
147
|
});
|
|
@@ -251,85 +156,6 @@ export const usePickerValue = ({
|
|
|
251
156
|
hasBeenModifiedSinceMount: true
|
|
252
157
|
}));
|
|
253
158
|
}
|
|
254
|
-
const handleClear = useEventCallback(() => {
|
|
255
|
-
updateDate({
|
|
256
|
-
value: valueManager.emptyValue,
|
|
257
|
-
name: 'setValueFromAction',
|
|
258
|
-
pickerAction: 'clear'
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
const handleAccept = useEventCallback(() => {
|
|
262
|
-
updateDate({
|
|
263
|
-
value: dateState.lastPublishedValue,
|
|
264
|
-
name: 'setValueFromAction',
|
|
265
|
-
pickerAction: 'accept'
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
const handleDismiss = useEventCallback(() => {
|
|
269
|
-
updateDate({
|
|
270
|
-
value: dateState.lastPublishedValue,
|
|
271
|
-
name: 'setValueFromAction',
|
|
272
|
-
pickerAction: 'dismiss'
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
const handleCancel = useEventCallback(() => {
|
|
276
|
-
updateDate({
|
|
277
|
-
value: dateState.lastCommittedValue,
|
|
278
|
-
name: 'setValueFromAction',
|
|
279
|
-
pickerAction: 'cancel'
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
const handleSetToday = useEventCallback(() => {
|
|
283
|
-
updateDate({
|
|
284
|
-
value: valueManager.getTodayValue(utils, timezone, valueType),
|
|
285
|
-
name: 'setValueFromAction',
|
|
286
|
-
pickerAction: 'today'
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
const handleOpen = useEventCallback(event => {
|
|
290
|
-
event.preventDefault();
|
|
291
|
-
setOpen(true);
|
|
292
|
-
});
|
|
293
|
-
const handleClose = useEventCallback(event => {
|
|
294
|
-
event?.preventDefault();
|
|
295
|
-
setOpen(false);
|
|
296
|
-
});
|
|
297
|
-
const handleChange = useEventCallback((newValue, selectionState = 'partial') => updateDate({
|
|
298
|
-
name: 'setValueFromView',
|
|
299
|
-
value: newValue,
|
|
300
|
-
selectionState
|
|
301
|
-
}));
|
|
302
|
-
const handleSelectShortcut = useEventCallback((newValue, changeImportance, shortcut) => updateDate({
|
|
303
|
-
name: 'setValueFromShortcut',
|
|
304
|
-
value: newValue,
|
|
305
|
-
changeImportance,
|
|
306
|
-
shortcut
|
|
307
|
-
}));
|
|
308
|
-
const handleChangeFromField = useEventCallback((newValue, context) => updateDate({
|
|
309
|
-
name: 'setValueFromField',
|
|
310
|
-
value: newValue,
|
|
311
|
-
context
|
|
312
|
-
}));
|
|
313
|
-
const actions = {
|
|
314
|
-
onClear: handleClear,
|
|
315
|
-
onAccept: handleAccept,
|
|
316
|
-
onDismiss: handleDismiss,
|
|
317
|
-
onCancel: handleCancel,
|
|
318
|
-
onSetToday: handleSetToday,
|
|
319
|
-
onOpen: handleOpen,
|
|
320
|
-
onClose: handleClose
|
|
321
|
-
};
|
|
322
|
-
const fieldResponse = {
|
|
323
|
-
value: dateState.draft,
|
|
324
|
-
onChange: handleChangeFromField
|
|
325
|
-
};
|
|
326
|
-
const valueWithoutError = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
|
|
327
|
-
const viewResponse = {
|
|
328
|
-
value: valueWithoutError,
|
|
329
|
-
onChange: handleChange,
|
|
330
|
-
onClose: handleClose,
|
|
331
|
-
open
|
|
332
|
-
};
|
|
333
159
|
const isValid = testedValue => {
|
|
334
160
|
const error = validator({
|
|
335
161
|
adapter,
|
|
@@ -339,28 +165,67 @@ export const usePickerValue = ({
|
|
|
339
165
|
});
|
|
340
166
|
return !valueManager.hasError(error);
|
|
341
167
|
};
|
|
342
|
-
const
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
168
|
+
const clearValue = useEventCallback(() => setValue(valueManager.emptyValue));
|
|
169
|
+
const setValueToToday = useEventCallback(() => setValue(valueManager.getTodayValue(utils, timezone, valueType)));
|
|
170
|
+
const acceptValueChanges = useEventCallback(() => setValue(dateState.lastPublishedValue));
|
|
171
|
+
const cancelValueChanges = useEventCallback(() => setValue(dateState.lastCommittedValue, {
|
|
172
|
+
skipPublicationIfPristine: true
|
|
173
|
+
}));
|
|
174
|
+
const dismissViews = useEventCallback(() => {
|
|
175
|
+
setValue(dateState.lastPublishedValue, {
|
|
176
|
+
skipPublicationIfPristine: true
|
|
177
|
+
});
|
|
347
178
|
});
|
|
348
|
-
const
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
}
|
|
353
|
-
}
|
|
179
|
+
const fieldResponse = {
|
|
180
|
+
value: dateState.draft,
|
|
181
|
+
onChange: (newValue, context) => setValue(newValue, {
|
|
182
|
+
validationError: context.validationError
|
|
183
|
+
})
|
|
184
|
+
};
|
|
185
|
+
const setValueFromView = useEventCallback((newValue, selectionState = 'partial') => {
|
|
186
|
+
// TODO: Expose a new method (private?) like `setView` that only updates the draft value.
|
|
187
|
+
if (selectionState === 'shallow') {
|
|
188
|
+
setDateState(prev => _extends({}, prev, {
|
|
189
|
+
draft: newValue,
|
|
190
|
+
hasBeenModifiedSinceMount: true
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
setValue(newValue, {
|
|
194
|
+
changeImportance: selectionState === 'finish' && closeOnSelect ? 'accept' : 'set'
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
const valueWithoutError = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
|
|
198
|
+
const viewResponse = {
|
|
199
|
+
value: valueWithoutError,
|
|
200
|
+
onChange: setValueFromView,
|
|
201
|
+
open,
|
|
202
|
+
setOpen
|
|
203
|
+
};
|
|
204
|
+
const actionsContextValue = React.useMemo(() => ({
|
|
205
|
+
setValue,
|
|
206
|
+
setOpen,
|
|
207
|
+
clearValue,
|
|
208
|
+
setValueToToday,
|
|
209
|
+
acceptValueChanges,
|
|
210
|
+
cancelValueChanges
|
|
211
|
+
}), [setValue, setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges]);
|
|
212
|
+
const contextValue = React.useMemo(() => _extends({}, actionsContextValue, {
|
|
213
|
+
open,
|
|
214
|
+
value: dateState.draft
|
|
215
|
+
}), [actionsContextValue, open, dateState.draft]);
|
|
216
|
+
const privateContextValue = React.useMemo(() => ({
|
|
217
|
+
dismissViews
|
|
218
|
+
}), [dismissViews]);
|
|
354
219
|
const providerParams = {
|
|
355
220
|
value: valueWithoutError,
|
|
356
|
-
contextValue
|
|
221
|
+
contextValue,
|
|
222
|
+
actionsContextValue,
|
|
223
|
+
privateContextValue,
|
|
224
|
+
isValidContextValue: isValid
|
|
357
225
|
};
|
|
358
226
|
return {
|
|
359
|
-
open,
|
|
360
227
|
fieldProps: fieldResponse,
|
|
361
228
|
viewProps: viewResponse,
|
|
362
|
-
layoutProps: layoutResponse,
|
|
363
|
-
actions,
|
|
364
229
|
provider: providerParams
|
|
365
230
|
};
|
|
366
231
|
};
|
|
@@ -14,7 +14,7 @@ import { isTimeView } from "../../utils/time-utils.js";
|
|
|
14
14
|
/**
|
|
15
15
|
* Props used to handle the value of the pickers.
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
18
|
/**
|
|
19
19
|
* Manage the views of all the pickers:
|
|
20
20
|
* - Handles the view switch
|
|
@@ -24,15 +24,15 @@ import { isTimeView } from "../../utils/time-utils.js";
|
|
|
24
24
|
export const usePickerViews = ({
|
|
25
25
|
props,
|
|
26
26
|
propsFromPickerValue,
|
|
27
|
-
additionalViewProps,
|
|
28
27
|
autoFocusView,
|
|
29
|
-
rendererInterceptor,
|
|
28
|
+
rendererInterceptor: RendererInterceptor,
|
|
30
29
|
fieldRef
|
|
31
30
|
}) => {
|
|
32
31
|
const {
|
|
33
32
|
onChange,
|
|
33
|
+
value,
|
|
34
34
|
open,
|
|
35
|
-
|
|
35
|
+
setOpen
|
|
36
36
|
} = propsFromPickerValue;
|
|
37
37
|
const {
|
|
38
38
|
view: inView,
|
|
@@ -92,7 +92,7 @@ export const usePickerViews = ({
|
|
|
92
92
|
useEnhancedEffect(() => {
|
|
93
93
|
// Handle case of `DateTimePicker` without time renderers
|
|
94
94
|
if (currentViewMode === 'field' && open) {
|
|
95
|
-
|
|
95
|
+
setOpen(false);
|
|
96
96
|
setTimeout(() => {
|
|
97
97
|
fieldRef?.current?.setSelectedSections(view);
|
|
98
98
|
// focusing the input before the range selection is done
|
|
@@ -123,18 +123,21 @@ export const usePickerViews = ({
|
|
|
123
123
|
setFocusedView(newView, true);
|
|
124
124
|
}, [open]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
125
125
|
|
|
126
|
-
const
|
|
126
|
+
const actionsContextValue = React.useMemo(() => ({
|
|
127
|
+
setView
|
|
128
|
+
}), [setView]);
|
|
129
|
+
const contextValue = React.useMemo(() => _extends({}, actionsContextValue, {
|
|
127
130
|
views,
|
|
128
|
-
view: popperView
|
|
129
|
-
|
|
130
|
-
};
|
|
131
|
+
view: popperView
|
|
132
|
+
}), [actionsContextValue, views, popperView]);
|
|
131
133
|
const providerParams = {
|
|
132
134
|
hasUIView,
|
|
133
|
-
views
|
|
135
|
+
views,
|
|
136
|
+
contextValue,
|
|
137
|
+
actionsContextValue
|
|
134
138
|
};
|
|
135
139
|
return {
|
|
136
140
|
shouldRestoreFocus,
|
|
137
|
-
layoutProps,
|
|
138
141
|
provider: providerParams,
|
|
139
142
|
renderCurrentView: () => {
|
|
140
143
|
if (popperView == null) {
|
|
@@ -144,9 +147,10 @@ export const usePickerViews = ({
|
|
|
144
147
|
if (renderer == null) {
|
|
145
148
|
return null;
|
|
146
149
|
}
|
|
147
|
-
const rendererProps = _extends({}, propsToForwardToView,
|
|
150
|
+
const rendererProps = _extends({}, propsToForwardToView, {
|
|
148
151
|
views,
|
|
149
152
|
timezone,
|
|
153
|
+
value,
|
|
150
154
|
onChange: setValueAndGoToNextView,
|
|
151
155
|
view: popperView,
|
|
152
156
|
onViewChange: setView,
|
|
@@ -155,8 +159,12 @@ export const usePickerViews = ({
|
|
|
155
159
|
showViewSwitcher: timeViewsCount > 1,
|
|
156
160
|
timeViewsCount
|
|
157
161
|
});
|
|
158
|
-
if (
|
|
159
|
-
return
|
|
162
|
+
if (RendererInterceptor) {
|
|
163
|
+
return /*#__PURE__*/_jsx(RendererInterceptor, {
|
|
164
|
+
viewRenderers: viewRenderers,
|
|
165
|
+
popperView: popperView,
|
|
166
|
+
rendererProps: rendererProps
|
|
167
|
+
});
|
|
160
168
|
}
|
|
161
169
|
return renderer(rendererProps);
|
|
162
170
|
}
|
|
@@ -39,20 +39,17 @@ export const useStaticPicker = _ref => {
|
|
|
39
39
|
autoFocus
|
|
40
40
|
} = props;
|
|
41
41
|
const {
|
|
42
|
-
layoutProps,
|
|
43
42
|
providerProps,
|
|
44
43
|
renderCurrentView
|
|
45
44
|
} = usePicker(_extends({}, pickerParams, {
|
|
46
45
|
props,
|
|
47
46
|
autoFocusView: autoFocus ?? false,
|
|
48
|
-
fieldRef: undefined,
|
|
49
47
|
localeText,
|
|
50
|
-
additionalViewProps: {},
|
|
51
48
|
variant: displayStaticWrapperAs
|
|
52
49
|
}));
|
|
53
50
|
const Layout = slots?.layout ?? PickerStaticLayout;
|
|
54
51
|
const renderPicker = () => /*#__PURE__*/_jsx(PickerProvider, _extends({}, providerProps, {
|
|
55
|
-
children: /*#__PURE__*/_jsx(Layout, _extends({},
|
|
52
|
+
children: /*#__PURE__*/_jsx(Layout, _extends({}, slotProps?.layout, {
|
|
56
53
|
slots: slots,
|
|
57
54
|
slotProps: slotProps,
|
|
58
55
|
sx: [...(Array.isArray(sx) ? sx : [sx]), ...(Array.isArray(slotProps?.layout?.sx) ? slotProps.layout.sx : [slotProps?.layout?.sx])],
|
|
@@ -19,7 +19,7 @@ export const useUtils = () => useLocalizationContext().utils;
|
|
|
19
19
|
export const useDefaultDates = () => useLocalizationContext().defaultDates;
|
|
20
20
|
export const useNow = timezone => {
|
|
21
21
|
const utils = useUtils();
|
|
22
|
-
const now = React.useRef();
|
|
22
|
+
const now = React.useRef(undefined);
|
|
23
23
|
if (now.current === undefined) {
|
|
24
24
|
now.current = utils.date(undefined, timezone);
|
|
25
25
|
}
|