@mui/x-date-pickers 8.5.2 → 8.6.0
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/CHANGELOG.md +203 -11
- package/DateCalendar/DateCalendar.js +16 -16
- package/DateCalendar/DayCalendar.js +48 -48
- package/DateCalendar/useCalendarState.js +25 -25
- package/DateCalendar/useIsDateDisabled.js +2 -2
- package/DatePicker/DatePickerToolbar.js +7 -9
- package/DateTimeField/DateTimeField.js +1 -1
- package/DateTimePicker/DateTimePicker.js +1 -1
- package/DateTimePicker/DateTimePickerToolbar.js +12 -13
- package/DateTimePicker/shared.js +3 -3
- package/DesktopDatePicker/DesktopDatePicker.js +3 -3
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +4 -4
- package/DesktopTimePicker/DesktopTimePicker.js +4 -4
- package/DigitalClock/DigitalClock.d.ts +1 -1
- package/DigitalClock/DigitalClock.js +16 -16
- package/LocalizationProvider/LocalizationProvider.d.ts +9 -3
- package/LocalizationProvider/LocalizationProvider.js +28 -19
- package/MobileDatePicker/MobileDatePicker.js +3 -3
- package/MobileDateTimePicker/MobileDateTimePicker.js +4 -4
- package/MobileTimePicker/MobileTimePicker.js +4 -4
- package/MonthCalendar/MonthCalendar.js +19 -18
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +32 -32
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.ts +4 -4
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +7 -7
- package/PickerDay2/PickerDay2.js +3 -3
- package/PickersActionBar/PickersActionBar.d.ts +2 -2
- package/PickersActionBar/PickersActionBar.js +2 -2
- package/PickersCalendarHeader/PickersCalendarHeader.js +7 -8
- package/PickersDay/PickersDay.js +3 -3
- package/PickersDay/usePickerDayOwnerState.js +5 -5
- package/PickersTextField/PickersFilledInput/pickersFilledInputClasses.d.ts +1 -0
- package/PickersTextField/PickersInput/pickersInputClasses.d.ts +1 -0
- package/PickersTextField/PickersInputBase/pickersInputBaseClasses.d.ts +2 -0
- package/PickersTextField/PickersInputBase/pickersInputBaseClasses.js +1 -1
- package/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.d.ts +1 -0
- package/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
- package/StaticTimePicker/StaticTimePicker.js +1 -1
- package/TimeClock/Clock.js +8 -9
- package/TimeClock/ClockNumbers.d.ts +3 -3
- package/TimeClock/ClockNumbers.js +5 -5
- package/TimeClock/TimeClock.js +29 -29
- package/TimeField/TimeField.js +1 -1
- package/TimePicker/TimePicker.js +1 -1
- package/TimePicker/TimePickerToolbar.js +7 -9
- package/TimePicker/shared.js +3 -3
- package/YearCalendar/YearCalendar.js +19 -18
- package/esm/DateCalendar/DateCalendar.js +16 -16
- package/esm/DateCalendar/DayCalendar.js +48 -48
- package/esm/DateCalendar/useCalendarState.js +25 -25
- package/esm/DateCalendar/useIsDateDisabled.js +2 -2
- package/esm/DatePicker/DatePickerToolbar.js +6 -8
- package/esm/DateTimeField/DateTimeField.js +1 -1
- package/esm/DateTimePicker/DateTimePicker.js +1 -1
- package/esm/DateTimePicker/DateTimePickerToolbar.js +11 -12
- package/esm/DateTimePicker/shared.js +3 -3
- package/esm/DesktopDatePicker/DesktopDatePicker.js +3 -3
- package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +4 -4
- package/esm/DesktopTimePicker/DesktopTimePicker.js +4 -4
- package/esm/DigitalClock/DigitalClock.d.ts +1 -1
- package/esm/DigitalClock/DigitalClock.js +16 -16
- package/esm/LocalizationProvider/LocalizationProvider.d.ts +9 -3
- package/esm/LocalizationProvider/LocalizationProvider.js +27 -18
- package/esm/MobileDatePicker/MobileDatePicker.js +3 -3
- package/esm/MobileDateTimePicker/MobileDateTimePicker.js +4 -4
- package/esm/MobileTimePicker/MobileTimePicker.js +4 -4
- package/esm/MonthCalendar/MonthCalendar.js +20 -19
- package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.js +32 -32
- package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.ts +4 -4
- package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +7 -7
- package/esm/PickerDay2/PickerDay2.js +3 -3
- package/esm/PickersActionBar/PickersActionBar.d.ts +2 -2
- package/esm/PickersActionBar/PickersActionBar.js +2 -2
- package/esm/PickersCalendarHeader/PickersCalendarHeader.js +6 -7
- package/esm/PickersDay/PickersDay.js +3 -3
- package/esm/PickersDay/usePickerDayOwnerState.js +5 -5
- package/esm/PickersTextField/PickersFilledInput/pickersFilledInputClasses.d.ts +1 -0
- package/esm/PickersTextField/PickersInput/pickersInputClasses.d.ts +1 -0
- package/esm/PickersTextField/PickersInputBase/pickersInputBaseClasses.d.ts +2 -0
- package/esm/PickersTextField/PickersInputBase/pickersInputBaseClasses.js +1 -1
- package/esm/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.d.ts +1 -0
- package/esm/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
- package/esm/StaticTimePicker/StaticTimePicker.js +1 -1
- package/esm/TimeClock/Clock.js +7 -8
- package/esm/TimeClock/ClockNumbers.d.ts +3 -3
- package/esm/TimeClock/ClockNumbers.js +5 -5
- package/esm/TimeClock/TimeClock.js +29 -29
- package/esm/TimeField/TimeField.js +1 -1
- package/esm/TimePicker/TimePicker.js +1 -1
- package/esm/TimePicker/TimePickerToolbar.js +6 -8
- package/esm/TimePicker/shared.js +3 -3
- package/esm/YearCalendar/YearCalendar.js +20 -19
- package/esm/hooks/index.d.ts +2 -1
- package/esm/hooks/index.js +2 -1
- package/esm/hooks/useParsedFormat.js +6 -6
- package/esm/hooks/usePickerAdapter.d.ts +7 -0
- package/esm/hooks/usePickerAdapter.js +20 -0
- package/esm/hooks/usePickerTranslations.js +1 -1
- package/esm/index.js +1 -1
- package/esm/internals/components/pickersToolbarClasses.d.ts +1 -1
- package/esm/internals/demo/DemoContainer.d.ts +2 -3
- package/esm/internals/demo/DemoContainer.js +3 -2
- package/esm/internals/hooks/date-helpers-hooks.js +16 -16
- package/esm/internals/hooks/useClockReferenceDate.d.ts +2 -2
- package/esm/internals/hooks/useClockReferenceDate.js +3 -3
- package/esm/internals/hooks/useControlledValue.js +8 -7
- package/esm/internals/hooks/useField/buildSectionsFromFormat.d.ts +1 -1
- package/esm/internals/hooks/useField/buildSectionsFromFormat.js +17 -17
- package/esm/internals/hooks/useField/useField.types.d.ts +2 -2
- package/esm/internals/hooks/useField/useField.utils.d.ts +10 -10
- package/esm/internals/hooks/useField/useField.utils.js +69 -69
- package/esm/internals/hooks/useField/useFieldCharacterEditing.js +11 -11
- package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.js +7 -7
- package/esm/internals/hooks/useField/useFieldSectionContentProps.js +15 -16
- package/esm/internals/hooks/useField/useFieldState.js +22 -24
- package/esm/internals/hooks/usePicker/hooks/useValueAndOpenStates.js +6 -6
- package/esm/internals/hooks/usePicker/usePicker.js +5 -6
- package/esm/internals/hooks/useUtils.d.ts +1 -8
- package/esm/internals/hooks/useUtils.js +3 -19
- package/esm/internals/index.d.ts +2 -1
- package/esm/internals/index.js +2 -1
- package/esm/internals/models/manager.d.ts +14 -14
- package/esm/internals/models/props/time.d.ts +1 -1
- package/esm/internals/utils/date-time-utils.d.ts +1 -1
- package/esm/internals/utils/date-time-utils.js +5 -5
- package/esm/internals/utils/date-utils.d.ts +11 -11
- package/esm/internals/utils/date-utils.js +34 -34
- package/esm/internals/utils/getDefaultReferenceDate.d.ts +2 -2
- package/esm/internals/utils/getDefaultReferenceDate.js +16 -16
- package/esm/internals/utils/time-utils.d.ts +5 -5
- package/esm/internals/utils/time-utils.js +12 -12
- package/esm/internals/utils/valueManagers.js +4 -4
- package/esm/managers/useDateManager.js +12 -12
- package/esm/managers/useDateTimeManager.js +13 -13
- package/esm/managers/useTimeManager.js +9 -10
- package/esm/validation/useValidation.d.ts +2 -3
- package/esm/validation/useValidation.js +2 -2
- package/esm/validation/validateDate.js +6 -6
- package/esm/validation/validateTime.js +6 -6
- package/hooks/index.d.ts +2 -1
- package/hooks/index.js +8 -1
- package/hooks/useParsedFormat.js +6 -6
- package/hooks/usePickerAdapter.d.ts +7 -0
- package/hooks/usePickerAdapter.js +29 -0
- package/hooks/usePickerTranslations.js +2 -2
- package/index.js +1 -1
- package/internals/components/pickersToolbarClasses.d.ts +1 -1
- package/internals/demo/DemoContainer.d.ts +2 -3
- package/internals/demo/DemoContainer.js +3 -2
- package/internals/hooks/date-helpers-hooks.js +16 -16
- package/internals/hooks/useClockReferenceDate.d.ts +2 -2
- package/internals/hooks/useClockReferenceDate.js +3 -3
- package/internals/hooks/useControlledValue.js +7 -7
- package/internals/hooks/useField/buildSectionsFromFormat.d.ts +1 -1
- package/internals/hooks/useField/buildSectionsFromFormat.js +17 -17
- package/internals/hooks/useField/useField.types.d.ts +2 -2
- package/internals/hooks/useField/useField.utils.d.ts +10 -10
- package/internals/hooks/useField/useField.utils.js +69 -69
- package/internals/hooks/useField/useFieldCharacterEditing.js +11 -11
- package/internals/hooks/useField/useFieldRootHandleKeyDown.js +7 -7
- package/internals/hooks/useField/useFieldSectionContentProps.js +14 -15
- package/internals/hooks/useField/useFieldState.js +23 -25
- package/internals/hooks/usePicker/hooks/useValueAndOpenStates.js +6 -6
- package/internals/hooks/usePicker/usePicker.js +5 -6
- package/internals/hooks/useUtils.d.ts +1 -8
- package/internals/hooks/useUtils.js +5 -24
- package/internals/index.d.ts +2 -1
- package/internals/index.js +2 -7
- package/internals/models/manager.d.ts +14 -14
- package/internals/models/props/time.d.ts +1 -1
- package/internals/utils/date-time-utils.d.ts +1 -1
- package/internals/utils/date-time-utils.js +5 -5
- package/internals/utils/date-utils.d.ts +11 -11
- package/internals/utils/date-utils.js +34 -34
- package/internals/utils/getDefaultReferenceDate.d.ts +2 -2
- package/internals/utils/getDefaultReferenceDate.js +16 -16
- package/internals/utils/time-utils.d.ts +5 -5
- package/internals/utils/time-utils.js +12 -12
- package/internals/utils/valueManagers.js +4 -4
- package/managers/useDateManager.js +12 -12
- package/managers/useDateTimeManager.js +13 -13
- package/managers/useTimeManager.js +10 -11
- package/package.json +2 -2
- package/validation/useValidation.d.ts +2 -3
- package/validation/useValidation.js +2 -2
- package/validation/validateDate.js +6 -6
- package/validation/validateTime.js +6 -6
|
@@ -9,8 +9,8 @@ import PropTypes from 'prop-types';
|
|
|
9
9
|
import { styled, useThemeProps } from '@mui/material/styles';
|
|
10
10
|
import composeClasses from '@mui/utils/composeClasses';
|
|
11
11
|
import useId from '@mui/utils/useId';
|
|
12
|
-
import { usePickerTranslations } from "../hooks/
|
|
13
|
-
import {
|
|
12
|
+
import { usePickerAdapter, usePickerTranslations } from "../hooks/index.js";
|
|
13
|
+
import { useNow } from "../internals/hooks/useUtils.js";
|
|
14
14
|
import { PickersArrowSwitcher } from "../internals/components/PickersArrowSwitcher/index.js";
|
|
15
15
|
import { convertValueToMeridiem, createIsAfterIgnoreDatePart } from "../internals/utils/time-utils.js";
|
|
16
16
|
import { useViews } from "../internals/hooks/useViews.js";
|
|
@@ -60,13 +60,13 @@ const TIME_CLOCK_DEFAULT_VIEWS = ['hours', 'minutes'];
|
|
|
60
60
|
* - [TimeClock API](https://mui.com/x/api/date-pickers/time-clock/)
|
|
61
61
|
*/
|
|
62
62
|
export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProps, ref) {
|
|
63
|
-
const
|
|
63
|
+
const adapter = usePickerAdapter();
|
|
64
64
|
const props = useThemeProps({
|
|
65
65
|
props: inProps,
|
|
66
66
|
name: 'MuiTimeClock'
|
|
67
67
|
});
|
|
68
68
|
const {
|
|
69
|
-
ampm =
|
|
69
|
+
ampm = adapter.is12HourCycleInCurrentLocale(),
|
|
70
70
|
ampmInClock = false,
|
|
71
71
|
autoFocus,
|
|
72
72
|
slots,
|
|
@@ -112,7 +112,7 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
112
112
|
const valueOrReferenceDate = useClockReferenceDate({
|
|
113
113
|
value,
|
|
114
114
|
referenceDate: referenceDateProp,
|
|
115
|
-
|
|
115
|
+
adapter,
|
|
116
116
|
props,
|
|
117
117
|
timezone
|
|
118
118
|
});
|
|
@@ -142,7 +142,7 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
142
142
|
handleMeridiemChange
|
|
143
143
|
} = useMeridiemMode(valueOrReferenceDate, ampm, setValueAndGoToNextView);
|
|
144
144
|
const isTimeDisabled = React.useCallback((rawValue, viewType) => {
|
|
145
|
-
const isAfter = createIsAfterIgnoreDatePart(disableIgnoringDatePartForTimeValidation,
|
|
145
|
+
const isAfter = createIsAfterIgnoreDatePart(disableIgnoringDatePartForTimeValidation, adapter);
|
|
146
146
|
const shouldCheckPastEnd = viewType === 'hours' || viewType === 'minutes' && views.includes('seconds');
|
|
147
147
|
const containsValidTime = ({
|
|
148
148
|
start,
|
|
@@ -169,11 +169,11 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
169
169
|
if (shouldDisableTime) {
|
|
170
170
|
switch (viewType) {
|
|
171
171
|
case 'hours':
|
|
172
|
-
return !shouldDisableTime(
|
|
172
|
+
return !shouldDisableTime(adapter.setHours(valueOrReferenceDate, timeValue), 'hours');
|
|
173
173
|
case 'minutes':
|
|
174
|
-
return !shouldDisableTime(
|
|
174
|
+
return !shouldDisableTime(adapter.setMinutes(valueOrReferenceDate, timeValue), 'minutes');
|
|
175
175
|
case 'seconds':
|
|
176
|
-
return !shouldDisableTime(
|
|
176
|
+
return !shouldDisableTime(adapter.setSeconds(valueOrReferenceDate, timeValue), 'seconds');
|
|
177
177
|
default:
|
|
178
178
|
return false;
|
|
179
179
|
}
|
|
@@ -184,12 +184,12 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
184
184
|
case 'hours':
|
|
185
185
|
{
|
|
186
186
|
const valueWithMeridiem = convertValueToMeridiem(rawValue, meridiemMode, ampm);
|
|
187
|
-
const dateWithNewHours =
|
|
188
|
-
if (
|
|
187
|
+
const dateWithNewHours = adapter.setHours(valueOrReferenceDate, valueWithMeridiem);
|
|
188
|
+
if (adapter.getHours(dateWithNewHours) !== valueWithMeridiem) {
|
|
189
189
|
return true;
|
|
190
190
|
}
|
|
191
|
-
const start =
|
|
192
|
-
const end =
|
|
191
|
+
const start = adapter.setSeconds(adapter.setMinutes(dateWithNewHours, 0), 0);
|
|
192
|
+
const end = adapter.setSeconds(adapter.setMinutes(dateWithNewHours, 59), 59);
|
|
193
193
|
return !containsValidTime({
|
|
194
194
|
start,
|
|
195
195
|
end
|
|
@@ -197,9 +197,9 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
197
197
|
}
|
|
198
198
|
case 'minutes':
|
|
199
199
|
{
|
|
200
|
-
const dateWithNewMinutes =
|
|
201
|
-
const start =
|
|
202
|
-
const end =
|
|
200
|
+
const dateWithNewMinutes = adapter.setMinutes(valueOrReferenceDate, rawValue);
|
|
201
|
+
const start = adapter.setSeconds(dateWithNewMinutes, 0);
|
|
202
|
+
const end = adapter.setSeconds(dateWithNewMinutes, 59);
|
|
203
203
|
return !containsValidTime({
|
|
204
204
|
start,
|
|
205
205
|
end
|
|
@@ -207,7 +207,7 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
207
207
|
}
|
|
208
208
|
case 'seconds':
|
|
209
209
|
{
|
|
210
|
-
const dateWithNewSeconds =
|
|
210
|
+
const dateWithNewSeconds = adapter.setSeconds(valueOrReferenceDate, rawValue);
|
|
211
211
|
const start = dateWithNewSeconds;
|
|
212
212
|
const end = dateWithNewSeconds;
|
|
213
213
|
return !containsValidTime({
|
|
@@ -218,16 +218,16 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
218
218
|
default:
|
|
219
219
|
throw new Error('not supported');
|
|
220
220
|
}
|
|
221
|
-
}, [ampm, valueOrReferenceDate, disableIgnoringDatePartForTimeValidation, maxTime, meridiemMode, minTime, minutesStep, shouldDisableTime,
|
|
221
|
+
}, [ampm, valueOrReferenceDate, disableIgnoringDatePartForTimeValidation, maxTime, meridiemMode, minTime, minutesStep, shouldDisableTime, adapter, disableFuture, disablePast, now, views]);
|
|
222
222
|
const viewProps = React.useMemo(() => {
|
|
223
223
|
switch (view) {
|
|
224
224
|
case 'hours':
|
|
225
225
|
{
|
|
226
226
|
const handleHoursChange = (hourValue, isFinish) => {
|
|
227
227
|
const valueWithMeridiem = convertValueToMeridiem(hourValue, meridiemMode, ampm);
|
|
228
|
-
setValueAndGoToNextView(
|
|
228
|
+
setValueAndGoToNextView(adapter.setHours(valueOrReferenceDate, valueWithMeridiem), isFinish, 'hours');
|
|
229
229
|
};
|
|
230
|
-
const viewValue =
|
|
230
|
+
const viewValue = adapter.getHours(valueOrReferenceDate);
|
|
231
231
|
let viewRange;
|
|
232
232
|
if (ampm) {
|
|
233
233
|
if (viewValue > 12) {
|
|
@@ -243,7 +243,7 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
243
243
|
viewValue,
|
|
244
244
|
children: getHourNumbers({
|
|
245
245
|
value,
|
|
246
|
-
|
|
246
|
+
adapter,
|
|
247
247
|
ampm,
|
|
248
248
|
onChange: handleHoursChange,
|
|
249
249
|
getClockNumberText: translations.hoursClockNumberText,
|
|
@@ -255,15 +255,15 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
255
255
|
}
|
|
256
256
|
case 'minutes':
|
|
257
257
|
{
|
|
258
|
-
const minutesValue =
|
|
258
|
+
const minutesValue = adapter.getMinutes(valueOrReferenceDate);
|
|
259
259
|
const handleMinutesChange = (minuteValue, isFinish) => {
|
|
260
|
-
setValueAndGoToNextView(
|
|
260
|
+
setValueAndGoToNextView(adapter.setMinutes(valueOrReferenceDate, minuteValue), isFinish, 'minutes');
|
|
261
261
|
};
|
|
262
262
|
return {
|
|
263
263
|
viewValue: minutesValue,
|
|
264
264
|
onChange: handleMinutesChange,
|
|
265
265
|
children: getMinutesNumbers({
|
|
266
|
-
|
|
266
|
+
adapter,
|
|
267
267
|
value: minutesValue,
|
|
268
268
|
onChange: handleMinutesChange,
|
|
269
269
|
getClockNumberText: translations.minutesClockNumberText,
|
|
@@ -275,15 +275,15 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
275
275
|
}
|
|
276
276
|
case 'seconds':
|
|
277
277
|
{
|
|
278
|
-
const secondsValue =
|
|
278
|
+
const secondsValue = adapter.getSeconds(valueOrReferenceDate);
|
|
279
279
|
const handleSecondsChange = (secondValue, isFinish) => {
|
|
280
|
-
setValueAndGoToNextView(
|
|
280
|
+
setValueAndGoToNextView(adapter.setSeconds(valueOrReferenceDate, secondValue), isFinish, 'seconds');
|
|
281
281
|
};
|
|
282
282
|
return {
|
|
283
283
|
viewValue: secondsValue,
|
|
284
284
|
onChange: handleSecondsChange,
|
|
285
285
|
children: getMinutesNumbers({
|
|
286
|
-
|
|
286
|
+
adapter,
|
|
287
287
|
value: secondsValue,
|
|
288
288
|
onChange: handleSecondsChange,
|
|
289
289
|
getClockNumberText: translations.secondsClockNumberText,
|
|
@@ -296,7 +296,7 @@ export const TimeClock = /*#__PURE__*/React.forwardRef(function TimeClock(inProp
|
|
|
296
296
|
default:
|
|
297
297
|
throw new Error('You must provide the type for ClockView');
|
|
298
298
|
}
|
|
299
|
-
}, [view,
|
|
299
|
+
}, [view, adapter, value, ampm, translations.hoursClockNumberText, translations.minutesClockNumberText, translations.secondsClockNumberText, meridiemMode, setValueAndGoToNextView, valueOrReferenceDate, isTimeDisabled, selectedId, disabled]);
|
|
300
300
|
const classes = useUtilityClasses(classesProp);
|
|
301
301
|
return /*#__PURE__*/_jsxs(TimeClockRoot, _extends({
|
|
302
302
|
ref: ref,
|
|
@@ -338,7 +338,7 @@ process.env.NODE_ENV !== "production" ? TimeClock.propTypes = {
|
|
|
338
338
|
// ----------------------------------------------------------------------
|
|
339
339
|
/**
|
|
340
340
|
* 12h/24h view for hour selection clock.
|
|
341
|
-
* @default
|
|
341
|
+
* @default adapter.is12HourCycleInCurrentLocale()
|
|
342
342
|
*/
|
|
343
343
|
ampm: PropTypes.bool,
|
|
344
344
|
/**
|
|
@@ -51,7 +51,7 @@ process.env.NODE_ENV !== "production" ? TimeField.propTypes = {
|
|
|
51
51
|
// ----------------------------------------------------------------------
|
|
52
52
|
/**
|
|
53
53
|
* 12h/24h view for hour selection clock.
|
|
54
|
-
* @default
|
|
54
|
+
* @default adapter.is12HourCycleInCurrentLocale()
|
|
55
55
|
*/
|
|
56
56
|
ampm: PropTypes.bool,
|
|
57
57
|
/**
|
|
@@ -53,7 +53,7 @@ process.env.NODE_ENV !== "production" ? TimePicker.propTypes = {
|
|
|
53
53
|
// ----------------------------------------------------------------------
|
|
54
54
|
/**
|
|
55
55
|
* 12h/24h view for hour selection clock.
|
|
56
|
-
* @default
|
|
56
|
+
* @default adapter.is12HourCycleInCurrentLocale()
|
|
57
57
|
*/
|
|
58
58
|
ampm: PropTypes.bool,
|
|
59
59
|
/**
|
|
@@ -12,12 +12,10 @@ import { PickersToolbarText } from "../internals/components/PickersToolbarText.j
|
|
|
12
12
|
import { PickersToolbarButton } from "../internals/components/PickersToolbarButton.js";
|
|
13
13
|
import { PickersToolbar } from "../internals/components/PickersToolbar.js";
|
|
14
14
|
import { arrayIncludes } from "../internals/utils/utils.js";
|
|
15
|
-
import { usePickerTranslations } from "../hooks/
|
|
16
|
-
import { useUtils } from "../internals/hooks/useUtils.js";
|
|
15
|
+
import { usePickerAdapter, usePickerContext, usePickerTranslations } from "../hooks/index.js";
|
|
17
16
|
import { useMeridiemMode } from "../internals/hooks/date-helpers-hooks.js";
|
|
18
17
|
import { getTimePickerToolbarUtilityClass, timePickerToolbarClasses } from "./timePickerToolbarClasses.js";
|
|
19
18
|
import { formatMeridiem } from "../internals/utils/date-utils.js";
|
|
20
|
-
import { usePickerContext } from "../hooks/index.js";
|
|
21
19
|
import { useToolbarOwnerState } from "../internals/hooks/useToolbarOwnerState.js";
|
|
22
20
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
23
21
|
const useUtilityClasses = (classes, ownerState) => {
|
|
@@ -124,7 +122,7 @@ function TimePickerToolbar(inProps) {
|
|
|
124
122
|
classes: classesProp
|
|
125
123
|
} = props,
|
|
126
124
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
127
|
-
const
|
|
125
|
+
const adapter = usePickerAdapter();
|
|
128
126
|
const translations = usePickerTranslations();
|
|
129
127
|
const ownerState = useToolbarOwnerState();
|
|
130
128
|
const classes = useUtilityClasses(classesProp, ownerState);
|
|
@@ -145,10 +143,10 @@ function TimePickerToolbar(inProps) {
|
|
|
145
143
|
changeImportance: 'set'
|
|
146
144
|
}));
|
|
147
145
|
const formatSection = format => {
|
|
148
|
-
if (!
|
|
146
|
+
if (!adapter.isValid(value)) {
|
|
149
147
|
return '--';
|
|
150
148
|
}
|
|
151
|
-
return
|
|
149
|
+
return adapter.format(value, format);
|
|
152
150
|
};
|
|
153
151
|
const separator = /*#__PURE__*/_jsx(TimePickerToolbarSeparator, {
|
|
154
152
|
tabIndex: -1,
|
|
@@ -192,7 +190,7 @@ function TimePickerToolbar(inProps) {
|
|
|
192
190
|
variant: "subtitle2",
|
|
193
191
|
selected: meridiemMode === 'am',
|
|
194
192
|
typographyClassName: classes.ampmLabel,
|
|
195
|
-
value: formatMeridiem(
|
|
193
|
+
value: formatMeridiem(adapter, 'am'),
|
|
196
194
|
onClick: readOnly ? undefined : () => handleMeridiemChange('am'),
|
|
197
195
|
disabled: disabled
|
|
198
196
|
}), /*#__PURE__*/_jsx(PickersToolbarButton, {
|
|
@@ -200,7 +198,7 @@ function TimePickerToolbar(inProps) {
|
|
|
200
198
|
variant: "subtitle2",
|
|
201
199
|
selected: meridiemMode === 'pm',
|
|
202
200
|
typographyClassName: classes.ampmLabel,
|
|
203
|
-
value: formatMeridiem(
|
|
201
|
+
value: formatMeridiem(adapter, 'pm'),
|
|
204
202
|
onClick: readOnly ? undefined : () => handleMeridiemChange('pm'),
|
|
205
203
|
disabled: disabled
|
|
206
204
|
})]
|
package/esm/TimePicker/shared.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useThemeProps } from '@mui/material/styles';
|
|
4
|
-
import { useUtils } from "../internals/hooks/useUtils.js";
|
|
5
4
|
import { TimePickerToolbar } from "./TimePickerToolbar.js";
|
|
6
5
|
import { applyDefaultViewProps } from "../internals/utils/views.js";
|
|
7
6
|
import { useApplyDefaultValuesToTimeValidationProps } from "../managers/useTimeManager.js";
|
|
7
|
+
import { usePickerAdapter } from "../hooks/usePickerAdapter.js";
|
|
8
8
|
export function useTimePickerDefaultizedProps(props, name) {
|
|
9
|
-
const
|
|
9
|
+
const adapter = usePickerAdapter();
|
|
10
10
|
const themeProps = useThemeProps({
|
|
11
11
|
props,
|
|
12
12
|
name
|
|
13
13
|
});
|
|
14
14
|
const validationProps = useApplyDefaultValuesToTimeValidationProps(themeProps);
|
|
15
|
-
const ampm = themeProps.ampm ??
|
|
15
|
+
const ampm = themeProps.ampm ?? adapter.is12HourCycleInCurrentLocale();
|
|
16
16
|
const localeText = React.useMemo(() => {
|
|
17
17
|
if (themeProps.localeText?.toolbarTitle == null) {
|
|
18
18
|
return themeProps.localeText;
|
|
@@ -14,7 +14,7 @@ import composeClasses from '@mui/utils/composeClasses';
|
|
|
14
14
|
import useControlled from '@mui/utils/useControlled';
|
|
15
15
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
16
16
|
import { YearCalendarButton } from "./YearCalendarButton.js";
|
|
17
|
-
import {
|
|
17
|
+
import { useNow } from "../internals/hooks/useUtils.js";
|
|
18
18
|
import { getYearCalendarUtilityClass } from "./yearCalendarClasses.js";
|
|
19
19
|
import { singleItemValueManager } from "../internals/utils/valueManagers.js";
|
|
20
20
|
import { SECTION_TYPE_GRANULARITY } from "../internals/utils/getDefaultReferenceDate.js";
|
|
@@ -22,6 +22,7 @@ import { useControlledValue } from "../internals/hooks/useControlledValue.js";
|
|
|
22
22
|
import { DIALOG_WIDTH, MAX_CALENDAR_HEIGHT } from "../internals/constants/dimensions.js";
|
|
23
23
|
import { usePickerPrivateContext } from "../internals/hooks/usePickerPrivateContext.js";
|
|
24
24
|
import { useApplyDefaultValuesToDateValidationProps } from "../managers/useDateManager.js";
|
|
25
|
+
import { usePickerAdapter } from "../hooks/usePickerAdapter.js";
|
|
25
26
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
26
27
|
const useUtilityClasses = classes => {
|
|
27
28
|
const slots = {
|
|
@@ -133,13 +134,13 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
|
|
|
133
134
|
});
|
|
134
135
|
const now = useNow(timezone);
|
|
135
136
|
const isRtl = useRtl();
|
|
136
|
-
const
|
|
137
|
+
const adapter = usePickerAdapter();
|
|
137
138
|
const {
|
|
138
139
|
ownerState
|
|
139
140
|
} = usePickerPrivateContext();
|
|
140
141
|
const referenceDate = React.useMemo(() => singleItemValueManager.getInitialReferenceValue({
|
|
141
142
|
value,
|
|
142
|
-
|
|
143
|
+
adapter,
|
|
143
144
|
props,
|
|
144
145
|
timezone,
|
|
145
146
|
referenceDate: referenceDateProp,
|
|
@@ -147,14 +148,14 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
|
|
|
147
148
|
}), [] // eslint-disable-line react-hooks/exhaustive-deps
|
|
148
149
|
);
|
|
149
150
|
const classes = useUtilityClasses(classesProp);
|
|
150
|
-
const todayYear = React.useMemo(() =>
|
|
151
|
+
const todayYear = React.useMemo(() => adapter.getYear(now), [adapter, now]);
|
|
151
152
|
const selectedYear = React.useMemo(() => {
|
|
152
153
|
if (value != null) {
|
|
153
|
-
return
|
|
154
|
+
return adapter.getYear(value);
|
|
154
155
|
}
|
|
155
156
|
return null;
|
|
156
|
-
}, [value,
|
|
157
|
-
const [focusedYear, setFocusedYear] = React.useState(() => selectedYear ||
|
|
157
|
+
}, [value, adapter]);
|
|
158
|
+
const [focusedYear, setFocusedYear] = React.useState(() => selectedYear || adapter.getYear(referenceDate));
|
|
158
159
|
const [internalHasFocus, setInternalHasFocus] = useControlled({
|
|
159
160
|
name: 'YearCalendar',
|
|
160
161
|
state: 'hasFocus',
|
|
@@ -168,33 +169,33 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
|
|
|
168
169
|
}
|
|
169
170
|
});
|
|
170
171
|
const isYearDisabled = React.useCallback(dateToValidate => {
|
|
171
|
-
if (disablePast &&
|
|
172
|
+
if (disablePast && adapter.isBeforeYear(dateToValidate, now)) {
|
|
172
173
|
return true;
|
|
173
174
|
}
|
|
174
|
-
if (disableFuture &&
|
|
175
|
+
if (disableFuture && adapter.isAfterYear(dateToValidate, now)) {
|
|
175
176
|
return true;
|
|
176
177
|
}
|
|
177
|
-
if (minDate &&
|
|
178
|
+
if (minDate && adapter.isBeforeYear(dateToValidate, minDate)) {
|
|
178
179
|
return true;
|
|
179
180
|
}
|
|
180
|
-
if (maxDate &&
|
|
181
|
+
if (maxDate && adapter.isAfterYear(dateToValidate, maxDate)) {
|
|
181
182
|
return true;
|
|
182
183
|
}
|
|
183
184
|
if (!shouldDisableYear) {
|
|
184
185
|
return false;
|
|
185
186
|
}
|
|
186
|
-
const yearToValidate =
|
|
187
|
+
const yearToValidate = adapter.startOfYear(dateToValidate);
|
|
187
188
|
return shouldDisableYear(yearToValidate);
|
|
188
|
-
}, [disableFuture, disablePast, maxDate, minDate, now, shouldDisableYear,
|
|
189
|
+
}, [disableFuture, disablePast, maxDate, minDate, now, shouldDisableYear, adapter]);
|
|
189
190
|
const handleYearSelection = useEventCallback((event, year) => {
|
|
190
191
|
if (readOnly) {
|
|
191
192
|
return;
|
|
192
193
|
}
|
|
193
|
-
const newDate =
|
|
194
|
+
const newDate = adapter.setYear(value ?? referenceDate, year);
|
|
194
195
|
handleValueChange(newDate);
|
|
195
196
|
});
|
|
196
197
|
const focusYear = useEventCallback(year => {
|
|
197
|
-
if (!isYearDisabled(
|
|
198
|
+
if (!isYearDisabled(adapter.setYear(value ?? referenceDate, year))) {
|
|
198
199
|
setFocusedYear(year);
|
|
199
200
|
changeHasFocus(true);
|
|
200
201
|
onYearFocus?.(year);
|
|
@@ -258,7 +259,7 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
|
|
|
258
259
|
}
|
|
259
260
|
scrollerRef.current.scrollTop = elementBottom - clientHeight / 2 - offsetHeight / 2;
|
|
260
261
|
}, [autoFocus]);
|
|
261
|
-
const yearRange =
|
|
262
|
+
const yearRange = adapter.getYearRange([minDate, maxDate]);
|
|
262
263
|
if (yearsOrder === 'desc') {
|
|
263
264
|
yearRange.reverse();
|
|
264
265
|
}
|
|
@@ -275,7 +276,7 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
|
|
|
275
276
|
yearsPerRow: yearsPerRow
|
|
276
277
|
}, other, {
|
|
277
278
|
children: [yearRange.map(year => {
|
|
278
|
-
const yearNumber =
|
|
279
|
+
const yearNumber = adapter.getYear(year);
|
|
279
280
|
const isSelected = yearNumber === selectedYear;
|
|
280
281
|
const isDisabled = disabled || isYearDisabled(year);
|
|
281
282
|
return /*#__PURE__*/_jsx(YearCalendarButton, {
|
|
@@ -292,8 +293,8 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
|
|
|
292
293
|
slots: slots,
|
|
293
294
|
slotProps: slotProps,
|
|
294
295
|
classes: classesProp,
|
|
295
|
-
children:
|
|
296
|
-
},
|
|
296
|
+
children: adapter.format(year, 'year')
|
|
297
|
+
}, adapter.format(year, 'year'));
|
|
297
298
|
}), Array.from({
|
|
298
299
|
length: fillerAmount
|
|
299
300
|
}, (_, index) => /*#__PURE__*/_jsx(YearCalendarButtonFiller, {}, index))]
|
package/esm/hooks/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export { useSplitFieldProps } from "./useSplitFieldProps.js";
|
|
|
3
3
|
export { useParsedFormat } from "./useParsedFormat.js";
|
|
4
4
|
export { usePickerContext } from "./usePickerContext.js";
|
|
5
5
|
export { usePickerActionsContext } from "./usePickerActionsContext.js";
|
|
6
|
-
export { useIsValidValue } from "./useIsValidValue.js";
|
|
6
|
+
export { useIsValidValue } from "./useIsValidValue.js";
|
|
7
|
+
export { usePickerAdapter } from "./usePickerAdapter.js";
|
package/esm/hooks/index.js
CHANGED
|
@@ -3,4 +3,5 @@ export { useSplitFieldProps } from "./useSplitFieldProps.js";
|
|
|
3
3
|
export { useParsedFormat } from "./useParsedFormat.js";
|
|
4
4
|
export { usePickerContext } from "./usePickerContext.js";
|
|
5
5
|
export { usePickerActionsContext } from "./usePickerActionsContext.js";
|
|
6
|
-
export { useIsValidValue } from "./useIsValidValue.js";
|
|
6
|
+
export { useIsValidValue } from "./useIsValidValue.js";
|
|
7
|
+
export { usePickerAdapter } from "./usePickerAdapter.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { useRtl } from '@mui/system/RtlProvider';
|
|
5
|
-
import {
|
|
5
|
+
import { usePickerAdapter } from "./usePickerAdapter.js";
|
|
6
6
|
import { buildSectionsFromFormat } from "../internals/hooks/useField/buildSectionsFromFormat.js";
|
|
7
7
|
import { getLocalizedDigits } from "../internals/hooks/useField/useField.utils.js";
|
|
8
8
|
import { usePickerTranslations } from "./usePickerTranslations.js";
|
|
@@ -16,16 +16,16 @@ import { useNullablePickerContext } from "../internals/hooks/useNullablePickerCo
|
|
|
16
16
|
*/
|
|
17
17
|
export const useParsedFormat = (parameters = {}) => {
|
|
18
18
|
const pickerContext = useNullablePickerContext();
|
|
19
|
-
const
|
|
19
|
+
const adapter = usePickerAdapter();
|
|
20
20
|
const isRtl = useRtl();
|
|
21
21
|
const translations = usePickerTranslations();
|
|
22
|
-
const localizedDigits = React.useMemo(() => getLocalizedDigits(
|
|
22
|
+
const localizedDigits = React.useMemo(() => getLocalizedDigits(adapter), [adapter]);
|
|
23
23
|
const {
|
|
24
|
-
format = pickerContext?.fieldFormat ??
|
|
24
|
+
format = pickerContext?.fieldFormat ?? adapter.formats.fullDate
|
|
25
25
|
} = parameters;
|
|
26
26
|
return React.useMemo(() => {
|
|
27
27
|
const sections = buildSectionsFromFormat({
|
|
28
|
-
|
|
28
|
+
adapter,
|
|
29
29
|
format,
|
|
30
30
|
formatDensity: 'dense',
|
|
31
31
|
isRtl,
|
|
@@ -37,5 +37,5 @@ export const useParsedFormat = (parameters = {}) => {
|
|
|
37
37
|
enableAccessibleFieldDOMStructure: false
|
|
38
38
|
});
|
|
39
39
|
return sections.map(section => `${section.startSeparator}${section.placeholder}${section.endSeparator}`).join('');
|
|
40
|
-
}, [
|
|
40
|
+
}, [adapter, isRtl, translations, localizedDigits, format]);
|
|
41
41
|
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PickersAdapterContextValue } from "../LocalizationProvider/LocalizationProvider.js";
|
|
2
|
+
import { PickersLocaleText } from "../locales/utils/pickersLocaleTextApi.js";
|
|
3
|
+
export declare const useLocalizationContext: () => UseLocalizationContextReturnValue;
|
|
4
|
+
export interface UseLocalizationContextReturnValue extends Omit<PickersAdapterContextValue, 'localeText'> {
|
|
5
|
+
localeText: PickersLocaleText;
|
|
6
|
+
}
|
|
7
|
+
export declare const usePickerAdapter: () => import("@mui/x-date-pickers/models").MuiPickersAdapter<any>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { DEFAULT_LOCALE } from "../locales/enUS.js";
|
|
6
|
+
import { PickerAdapterContext } from "../LocalizationProvider/LocalizationProvider.js";
|
|
7
|
+
export const useLocalizationContext = () => {
|
|
8
|
+
const localization = React.useContext(PickerAdapterContext);
|
|
9
|
+
if (localization === null) {
|
|
10
|
+
throw new Error(['MUI X: Can not find the date and time pickers localization context.', 'It looks like you forgot to wrap your component in LocalizationProvider.', 'This can also happen if you are bundling multiple versions of the `@mui/x-date-pickers` package'].join('\n'));
|
|
11
|
+
}
|
|
12
|
+
if (localization.adapter === null) {
|
|
13
|
+
throw new Error(['MUI X: Can not find the date and time pickers adapter from its localization context.', 'It looks like you forgot to pass a `dateAdapter` to your LocalizationProvider.'].join('\n'));
|
|
14
|
+
}
|
|
15
|
+
const localeText = React.useMemo(() => _extends({}, DEFAULT_LOCALE, localization.localeText), [localization.localeText]);
|
|
16
|
+
return React.useMemo(() => _extends({}, localization, {
|
|
17
|
+
localeText
|
|
18
|
+
}), [localization, localeText]);
|
|
19
|
+
};
|
|
20
|
+
export const usePickerAdapter = () => useLocalizationContext().adapter;
|
package/esm/index.js
CHANGED
|
@@ -8,4 +8,4 @@ export interface PickersToolbarClasses {
|
|
|
8
8
|
}
|
|
9
9
|
export type PickersToolbarClassKey = keyof PickersToolbarClasses;
|
|
10
10
|
export declare function getPickersToolbarUtilityClass(slot: string): string;
|
|
11
|
-
export declare const pickersToolbarClasses: Record<"root" | "
|
|
11
|
+
export declare const pickersToolbarClasses: Record<"root" | "title" | "content", string>;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { StackProps } from '@mui/material/Stack';
|
|
2
3
|
import { SxProps, Theme } from '@mui/material/styles';
|
|
3
4
|
interface DemoGridProps {
|
|
4
5
|
children: React.ReactNode;
|
|
5
6
|
components: string[];
|
|
6
7
|
sx?: SxProps<Theme>;
|
|
7
8
|
}
|
|
8
|
-
interface DemoItemProps {
|
|
9
|
+
interface DemoItemProps extends Omit<StackProps, 'component'> {
|
|
9
10
|
label?: React.ReactNode;
|
|
10
11
|
component?: string;
|
|
11
|
-
children: React.ReactNode;
|
|
12
|
-
sx?: SxProps<Theme>;
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
14
|
* WARNING: This is an internal component used in documentation to achieve a desired layout.
|
|
@@ -41,7 +41,8 @@ export function DemoItem(props) {
|
|
|
41
41
|
label,
|
|
42
42
|
children,
|
|
43
43
|
component,
|
|
44
|
-
sx: sxProp
|
|
44
|
+
sx: sxProp,
|
|
45
|
+
alignItems = 'stretch'
|
|
45
46
|
} = props;
|
|
46
47
|
let spacing;
|
|
47
48
|
let sx = sxProp;
|
|
@@ -57,7 +58,7 @@ export function DemoItem(props) {
|
|
|
57
58
|
}
|
|
58
59
|
return /*#__PURE__*/_jsxs(Stack, {
|
|
59
60
|
direction: "column",
|
|
60
|
-
alignItems:
|
|
61
|
+
alignItems: alignItems,
|
|
61
62
|
spacing: spacing,
|
|
62
63
|
sx: sx,
|
|
63
64
|
children: [label && /*#__PURE__*/_jsx(Typography, {
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useUtils } from "./useUtils.js";
|
|
3
2
|
import { getMeridiem, convertToMeridiem } from "../utils/time-utils.js";
|
|
3
|
+
import { usePickerAdapter } from "../../hooks/usePickerAdapter.js";
|
|
4
4
|
export function useNextMonthDisabled(month, {
|
|
5
5
|
disableFuture,
|
|
6
6
|
maxDate,
|
|
7
7
|
timezone
|
|
8
8
|
}) {
|
|
9
|
-
const
|
|
9
|
+
const adapter = usePickerAdapter();
|
|
10
10
|
return React.useMemo(() => {
|
|
11
|
-
const now =
|
|
12
|
-
const lastEnabledMonth =
|
|
13
|
-
return !
|
|
14
|
-
}, [disableFuture, maxDate, month,
|
|
11
|
+
const now = adapter.date(undefined, timezone);
|
|
12
|
+
const lastEnabledMonth = adapter.startOfMonth(disableFuture && adapter.isBefore(now, maxDate) ? now : maxDate);
|
|
13
|
+
return !adapter.isAfter(lastEnabledMonth, month);
|
|
14
|
+
}, [disableFuture, maxDate, month, adapter, timezone]);
|
|
15
15
|
}
|
|
16
16
|
export function usePreviousMonthDisabled(month, {
|
|
17
17
|
disablePast,
|
|
18
18
|
minDate,
|
|
19
19
|
timezone
|
|
20
20
|
}) {
|
|
21
|
-
const
|
|
21
|
+
const adapter = usePickerAdapter();
|
|
22
22
|
return React.useMemo(() => {
|
|
23
|
-
const now =
|
|
24
|
-
const firstEnabledMonth =
|
|
25
|
-
return !
|
|
26
|
-
}, [disablePast, minDate, month,
|
|
23
|
+
const now = adapter.date(undefined, timezone);
|
|
24
|
+
const firstEnabledMonth = adapter.startOfMonth(disablePast && adapter.isAfter(now, minDate) ? now : minDate);
|
|
25
|
+
return !adapter.isBefore(firstEnabledMonth, month);
|
|
26
|
+
}, [disablePast, minDate, month, adapter, timezone]);
|
|
27
27
|
}
|
|
28
28
|
export function useMeridiemMode(date, ampm, onChange, selectionState) {
|
|
29
|
-
const
|
|
30
|
-
const cleanDate = React.useMemo(() => !
|
|
31
|
-
const meridiemMode = getMeridiem(cleanDate,
|
|
29
|
+
const adapter = usePickerAdapter();
|
|
30
|
+
const cleanDate = React.useMemo(() => !adapter.isValid(date) ? null : date, [adapter, date]);
|
|
31
|
+
const meridiemMode = getMeridiem(cleanDate, adapter);
|
|
32
32
|
const handleMeridiemChange = React.useCallback(mode => {
|
|
33
|
-
const timeWithMeridiem = cleanDate == null ? null : convertToMeridiem(cleanDate, mode, Boolean(ampm),
|
|
33
|
+
const timeWithMeridiem = cleanDate == null ? null : convertToMeridiem(cleanDate, mode, Boolean(ampm), adapter);
|
|
34
34
|
onChange(timeWithMeridiem, selectionState ?? 'partial');
|
|
35
|
-
}, [ampm, cleanDate, onChange, selectionState,
|
|
35
|
+
}, [ampm, cleanDate, onChange, selectionState, adapter]);
|
|
36
36
|
return {
|
|
37
37
|
meridiemMode,
|
|
38
38
|
handleMeridiemChange
|
|
@@ -3,13 +3,13 @@ import { PickerValue } from "../models/index.js";
|
|
|
3
3
|
export declare const useClockReferenceDate: <TProps extends {}>({
|
|
4
4
|
value,
|
|
5
5
|
referenceDate: referenceDateProp,
|
|
6
|
-
|
|
6
|
+
adapter,
|
|
7
7
|
props,
|
|
8
8
|
timezone
|
|
9
9
|
}: {
|
|
10
10
|
value: PickerValue;
|
|
11
11
|
referenceDate: PickerValidDate | undefined;
|
|
12
|
-
|
|
12
|
+
adapter: MuiPickersAdapter;
|
|
13
13
|
props: TProps;
|
|
14
14
|
timezone: PickersTimezone;
|
|
15
15
|
}) => PickerValidDate;
|
|
@@ -5,18 +5,18 @@ import { SECTION_TYPE_GRANULARITY } from "../utils/getDefaultReferenceDate.js";
|
|
|
5
5
|
export const useClockReferenceDate = ({
|
|
6
6
|
value,
|
|
7
7
|
referenceDate: referenceDateProp,
|
|
8
|
-
|
|
8
|
+
adapter,
|
|
9
9
|
props,
|
|
10
10
|
timezone
|
|
11
11
|
}) => {
|
|
12
12
|
const referenceDate = React.useMemo(() => singleItemValueManager.getInitialReferenceValue({
|
|
13
13
|
value,
|
|
14
|
-
|
|
14
|
+
adapter,
|
|
15
15
|
props,
|
|
16
16
|
referenceDate: referenceDateProp,
|
|
17
17
|
granularity: SECTION_TYPE_GRANULARITY.day,
|
|
18
18
|
timezone,
|
|
19
|
-
getTodayDate: () => getTodayDate(
|
|
19
|
+
getTodayDate: () => getTodayDate(adapter, timezone, 'date')
|
|
20
20
|
}),
|
|
21
21
|
// We only want to compute the reference date on mount.
|
|
22
22
|
[] // eslint-disable-line react-hooks/exhaustive-deps
|