@mui/x-date-pickers 6.10.2 → 6.11.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/AdapterDayjs/AdapterDayjs.d.ts +8 -1
- package/AdapterDayjs/AdapterDayjs.js +66 -38
- package/CHANGELOG.md +92 -0
- package/DateCalendar/DateCalendar.d.ts +1 -1
- package/DateCalendar/DateCalendar.js +48 -38
- package/DateCalendar/DateCalendar.types.d.ts +9 -1
- package/DateCalendar/index.d.ts +1 -2
- package/DateCalendar/index.js +3 -2
- package/DateCalendar/useCalendarState.d.ts +1 -1
- package/DateField/DateField.d.ts +1 -1
- package/DateField/DateField.js +2 -2
- package/DatePicker/DatePicker.d.ts +1 -1
- package/DatePicker/DatePickerToolbar.d.ts +1 -1
- package/DateTimeField/DateTimeField.d.ts +1 -1
- package/DateTimeField/DateTimeField.js +2 -2
- package/DateTimePicker/DateTimePicker.d.ts +1 -1
- package/DayCalendarSkeleton/DayCalendarSkeleton.d.ts +1 -1
- package/DesktopDatePicker/DesktopDatePicker.d.ts +1 -1
- package/DesktopDatePicker/DesktopDatePicker.js +2 -2
- package/DesktopDateTimePicker/DesktopDateTimePicker.d.ts +1 -1
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +2 -2
- package/DesktopTimePicker/DesktopTimePicker.d.ts +1 -1
- package/DesktopTimePicker/DesktopTimePicker.js +2 -2
- package/DigitalClock/DigitalClock.d.ts +1 -1
- package/LocalizationProvider/LocalizationProvider.d.ts +1 -1
- package/MobileDatePicker/MobileDatePicker.d.ts +1 -1
- package/MobileDatePicker/MobileDatePicker.js +2 -2
- package/MobileDateTimePicker/MobileDateTimePicker.d.ts +1 -1
- package/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
- package/MobileTimePicker/MobileTimePicker.d.ts +1 -1
- package/MobileTimePicker/MobileTimePicker.js +2 -2
- package/MonthCalendar/MonthCalendar.d.ts +1 -1
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.d.ts +1 -1
- package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.d.ts +1 -1
- package/{DateCalendar → PickersCalendarHeader}/PickersCalendarHeader.d.ts +21 -9
- package/{DateCalendar → PickersCalendarHeader}/PickersCalendarHeader.js +72 -28
- package/PickersCalendarHeader/index.d.ts +4 -0
- package/PickersCalendarHeader/index.js +2 -0
- package/PickersCalendarHeader/package.json +6 -0
- package/PickersDay/PickersDay.d.ts +1 -1
- package/StaticDatePicker/StaticDatePicker.d.ts +1 -1
- package/StaticDateTimePicker/StaticDateTimePicker.d.ts +1 -1
- package/StaticTimePicker/StaticTimePicker.d.ts +1 -1
- package/TimeClock/ClockNumbers.d.ts +1 -1
- package/TimeClock/TimeClock.d.ts +1 -1
- package/TimeField/TimeField.d.ts +1 -1
- package/TimeField/TimeField.js +2 -2
- package/TimePicker/TimePicker.d.ts +1 -1
- package/YearCalendar/YearCalendar.d.ts +2 -2
- package/index.js +1 -1
- package/internals/components/PickersModalDialog.d.ts +2 -2
- package/internals/components/PickersPopper.d.ts +3 -3
- package/internals/components/PickersToolbar.d.ts +1 -1
- package/internals/hooks/date-helpers-hooks.d.ts +1 -2
- package/internals/hooks/useDefaultReduceAnimations.d.ts +2 -0
- package/internals/hooks/useDefaultReduceAnimations.js +9 -0
- package/internals/hooks/useField/useField.js +9 -4
- package/internals/hooks/useField/useField.utils.d.ts +1 -1
- package/internals/hooks/useField/useField.utils.js +6 -5
- package/internals/index.d.ts +1 -3
- package/internals/index.js +1 -2
- package/internals/utils/valueManagers.js +1 -1
- package/legacy/AdapterDayjs/AdapterDayjs.js +64 -38
- package/legacy/DateCalendar/DateCalendar.js +50 -40
- package/legacy/DateCalendar/index.js +3 -2
- package/legacy/DateField/DateField.js +2 -2
- package/legacy/DateTimeField/DateTimeField.js +2 -2
- package/legacy/DesktopDatePicker/DesktopDatePicker.js +2 -2
- package/legacy/DesktopDateTimePicker/DesktopDateTimePicker.js +2 -2
- package/legacy/DesktopTimePicker/DesktopTimePicker.js +2 -2
- package/legacy/MobileDatePicker/MobileDatePicker.js +2 -2
- package/legacy/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
- package/legacy/MobileTimePicker/MobileTimePicker.js +2 -2
- package/legacy/{DateCalendar → PickersCalendarHeader}/PickersCalendarHeader.js +57 -13
- package/legacy/PickersCalendarHeader/index.js +2 -0
- package/legacy/TimeField/TimeField.js +2 -2
- package/legacy/index.js +1 -1
- package/legacy/internals/hooks/useDefaultReduceAnimations.js +9 -0
- package/legacy/internals/hooks/useField/useField.js +9 -4
- package/legacy/internals/hooks/useField/useField.utils.js +6 -5
- package/legacy/internals/index.js +1 -2
- package/legacy/internals/utils/valueManagers.js +1 -1
- package/legacy/tests/describeGregorianAdapter/testCalculations.js +63 -16
- package/modern/AdapterDayjs/AdapterDayjs.js +65 -38
- package/modern/DateCalendar/DateCalendar.js +46 -38
- package/modern/DateCalendar/index.js +3 -2
- package/modern/DateField/DateField.js +2 -2
- package/modern/DateTimeField/DateTimeField.js +2 -2
- package/modern/DesktopDatePicker/DesktopDatePicker.js +1 -1
- package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -1
- package/modern/DesktopTimePicker/DesktopTimePicker.js +1 -1
- package/modern/MobileDatePicker/MobileDatePicker.js +1 -1
- package/modern/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
- package/modern/MobileTimePicker/MobileTimePicker.js +1 -1
- package/modern/{DateCalendar → PickersCalendarHeader}/PickersCalendarHeader.js +72 -28
- package/modern/PickersCalendarHeader/index.js +2 -0
- package/modern/TimeField/TimeField.js +2 -2
- package/modern/index.js +1 -1
- package/modern/internals/hooks/useDefaultReduceAnimations.js +9 -0
- package/modern/internals/hooks/useField/useField.js +9 -4
- package/modern/internals/hooks/useField/useField.utils.js +6 -5
- package/modern/internals/index.js +1 -2
- package/modern/internals/utils/valueManagers.js +1 -1
- package/modern/tests/describeGregorianAdapter/testCalculations.js +63 -16
- package/node/AdapterDayjs/AdapterDayjs.js +65 -38
- package/node/DateCalendar/DateCalendar.js +52 -44
- package/node/DateCalendar/index.js +21 -8
- package/node/DateField/DateField.js +2 -2
- package/node/DateTimeField/DateTimeField.js +2 -2
- package/node/DesktopDatePicker/DesktopDatePicker.js +1 -1
- package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -1
- package/node/DesktopTimePicker/DesktopTimePicker.js +1 -1
- package/node/MobileDatePicker/MobileDatePicker.js +1 -1
- package/node/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
- package/node/MobileTimePicker/MobileTimePicker.js +1 -1
- package/node/{DateCalendar → PickersCalendarHeader}/PickersCalendarHeader.js +73 -29
- package/node/PickersCalendarHeader/index.js +19 -0
- package/node/TimeField/TimeField.js +2 -2
- package/node/index.js +1 -1
- package/node/internals/hooks/useDefaultReduceAnimations.js +18 -0
- package/node/internals/hooks/useField/useField.js +9 -4
- package/node/internals/hooks/useField/useField.utils.js +6 -5
- package/node/internals/index.js +7 -14
- package/node/internals/utils/valueManagers.js +1 -1
- package/node/tests/describeGregorianAdapter/testCalculations.js +61 -16
- package/package.json +2 -2
- package/tests/describeGregorianAdapter/testCalculations.js +63 -16
- package/themeAugmentation/props.d.ts +2 -2
- package/internals/utils/defaultReduceAnimations.d.ts +0 -1
- package/internals/utils/defaultReduceAnimations.js +0 -1
- package/legacy/internals/utils/defaultReduceAnimations.js +0 -1
- package/modern/internals/utils/defaultReduceAnimations.js +0 -1
- package/node/internals/utils/defaultReduceAnimations.js +0 -8
- /package/{DateCalendar → PickersCalendarHeader}/pickersCalendarHeaderClasses.d.ts +0 -0
- /package/{DateCalendar → PickersCalendarHeader}/pickersCalendarHeaderClasses.js +0 -0
- /package/legacy/{DateCalendar → PickersCalendarHeader}/pickersCalendarHeaderClasses.js +0 -0
- /package/modern/{DateCalendar → PickersCalendarHeader}/pickersCalendarHeaderClasses.js +0 -0
- /package/node/{DateCalendar → PickersCalendarHeader}/pickersCalendarHeaderClasses.js +0 -0
|
@@ -4,6 +4,7 @@ const _excluded = ["autoFocus", "onViewChange", "value", "defaultValue", "refere
|
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import clsx from 'clsx';
|
|
7
|
+
import { useSlotProps } from '@mui/base/utils';
|
|
7
8
|
import { styled, useThemeProps } from '@mui/material/styles';
|
|
8
9
|
import { unstable_composeClasses as composeClasses, unstable_useId as useId, unstable_useEventCallback as useEventCallback } from '@mui/utils';
|
|
9
10
|
import { useCalendarState } from './useCalendarState';
|
|
@@ -13,10 +14,10 @@ import { DayCalendar } from './DayCalendar';
|
|
|
13
14
|
import { MonthCalendar } from '../MonthCalendar';
|
|
14
15
|
import { YearCalendar } from '../YearCalendar';
|
|
15
16
|
import { useViews } from '../internals/hooks/useViews';
|
|
16
|
-
import { PickersCalendarHeader } from '
|
|
17
|
+
import { PickersCalendarHeader } from '../PickersCalendarHeader';
|
|
17
18
|
import { findClosestEnabledDate, applyDefaultDate, mergeDateAndTime } from '../internals/utils/date-utils';
|
|
18
19
|
import { PickerViewRoot } from '../internals/components/PickerViewRoot';
|
|
19
|
-
import {
|
|
20
|
+
import { useDefaultReduceAnimations } from '../internals/hooks/useDefaultReduceAnimations';
|
|
20
21
|
import { getDateCalendarUtilityClass } from './dateCalendarClasses';
|
|
21
22
|
import { useControlledValueWithTimezone } from '../internals/hooks/useValueWithTimezone';
|
|
22
23
|
import { singleItemValueManager } from '../internals/utils/valueManagers';
|
|
@@ -35,21 +36,21 @@ const useUtilityClasses = ownerState => {
|
|
|
35
36
|
function useDateCalendarDefaultizedProps(props, name) {
|
|
36
37
|
const utils = useUtils();
|
|
37
38
|
const defaultDates = useDefaultDates();
|
|
39
|
+
const defaultReduceAnimations = useDefaultReduceAnimations();
|
|
38
40
|
const themeProps = useThemeProps({
|
|
39
41
|
props,
|
|
40
42
|
name
|
|
41
43
|
});
|
|
42
|
-
return _extends({
|
|
43
|
-
loading: false,
|
|
44
|
-
disablePast: false,
|
|
45
|
-
disableFuture: false,
|
|
46
|
-
openTo: 'day',
|
|
47
|
-
views: ['year', 'day'],
|
|
48
|
-
reduceAnimations: defaultReduceAnimations,
|
|
49
|
-
renderLoading: () => /*#__PURE__*/_jsx("span", {
|
|
44
|
+
return _extends({}, themeProps, {
|
|
45
|
+
loading: themeProps.loading ?? false,
|
|
46
|
+
disablePast: themeProps.disablePast ?? false,
|
|
47
|
+
disableFuture: themeProps.disableFuture ?? false,
|
|
48
|
+
openTo: themeProps.openTo ?? 'day',
|
|
49
|
+
views: themeProps.views ?? ['year', 'day'],
|
|
50
|
+
reduceAnimations: themeProps.reduceAnimations ?? defaultReduceAnimations,
|
|
51
|
+
renderLoading: themeProps.renderLoading ?? (() => /*#__PURE__*/_jsx("span", {
|
|
50
52
|
children: "..."
|
|
51
|
-
})
|
|
52
|
-
}, themeProps, {
|
|
53
|
+
})),
|
|
53
54
|
minDate: applyDefaultDate(utils, themeProps.minDate, defaultDates.minDate),
|
|
54
55
|
maxDate: applyDefaultDate(utils, themeProps.maxDate, defaultDates.maxDate)
|
|
55
56
|
});
|
|
@@ -173,6 +174,38 @@ export const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(
|
|
|
173
174
|
disableFuture,
|
|
174
175
|
timezone
|
|
175
176
|
});
|
|
177
|
+
|
|
178
|
+
// When disabled, limit the view to the selected date
|
|
179
|
+
const minDateWithDisabled = disabled && value || minDate;
|
|
180
|
+
const maxDateWithDisabled = disabled && value || maxDate;
|
|
181
|
+
const gridLabelId = `${id}-grid-label`;
|
|
182
|
+
const hasFocus = focusedView !== null;
|
|
183
|
+
const CalendarHeader = slots?.calendarHeader ?? components?.CalendarHeader ?? PickersCalendarHeader;
|
|
184
|
+
const calendarHeaderProps = useSlotProps({
|
|
185
|
+
elementType: CalendarHeader,
|
|
186
|
+
externalSlotProps: slotProps?.calendarHeader ?? componentsProps?.calendarHeader,
|
|
187
|
+
additionalProps: {
|
|
188
|
+
views,
|
|
189
|
+
view,
|
|
190
|
+
currentMonth: calendarState.currentMonth,
|
|
191
|
+
onViewChange: setView,
|
|
192
|
+
onMonthChange: (newMonth, direction) => handleChangeMonth({
|
|
193
|
+
newMonth,
|
|
194
|
+
direction
|
|
195
|
+
}),
|
|
196
|
+
minDate: minDateWithDisabled,
|
|
197
|
+
maxDate: maxDateWithDisabled,
|
|
198
|
+
disabled,
|
|
199
|
+
disablePast,
|
|
200
|
+
disableFuture,
|
|
201
|
+
reduceAnimations,
|
|
202
|
+
timezone,
|
|
203
|
+
labelId: gridLabelId,
|
|
204
|
+
slots,
|
|
205
|
+
slotProps
|
|
206
|
+
},
|
|
207
|
+
ownerState: props
|
|
208
|
+
});
|
|
176
209
|
const handleDateMonthChange = useEventCallback(newDate => {
|
|
177
210
|
const startOfMonth = utils.startOfMonth(newDate);
|
|
178
211
|
const endOfMonth = utils.endOfMonth(newDate);
|
|
@@ -238,18 +271,12 @@ export const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(
|
|
|
238
271
|
maxDate,
|
|
239
272
|
minDate
|
|
240
273
|
};
|
|
241
|
-
|
|
242
|
-
// When disabled, limit the view to the selected date
|
|
243
|
-
const minDateWithDisabled = disabled && value || minDate;
|
|
244
|
-
const maxDateWithDisabled = disabled && value || maxDate;
|
|
245
274
|
const commonViewProps = {
|
|
246
275
|
disableHighlightToday,
|
|
247
276
|
readOnly,
|
|
248
277
|
disabled,
|
|
249
278
|
timezone
|
|
250
279
|
};
|
|
251
|
-
const gridLabelId = `${id}-grid-label`;
|
|
252
|
-
const hasFocus = focusedView !== null;
|
|
253
280
|
const prevOpenViewRef = React.useRef(view);
|
|
254
281
|
React.useEffect(() => {
|
|
255
282
|
// If the view change and the focus was on the previous view
|
|
@@ -268,26 +295,7 @@ export const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(
|
|
|
268
295
|
className: clsx(classes.root, className),
|
|
269
296
|
ownerState: ownerState
|
|
270
297
|
}, other, {
|
|
271
|
-
children: [/*#__PURE__*/_jsx(
|
|
272
|
-
views: views,
|
|
273
|
-
view: view,
|
|
274
|
-
currentMonth: calendarState.currentMonth,
|
|
275
|
-
onViewChange: setView,
|
|
276
|
-
onMonthChange: (newMonth, direction) => handleChangeMonth({
|
|
277
|
-
newMonth,
|
|
278
|
-
direction
|
|
279
|
-
}),
|
|
280
|
-
minDate: minDateWithDisabled,
|
|
281
|
-
maxDate: maxDateWithDisabled,
|
|
282
|
-
disabled: disabled,
|
|
283
|
-
disablePast: disablePast,
|
|
284
|
-
disableFuture: disableFuture,
|
|
285
|
-
reduceAnimations: reduceAnimations,
|
|
286
|
-
labelId: gridLabelId,
|
|
287
|
-
slots: slots,
|
|
288
|
-
slotProps: slotProps,
|
|
289
|
-
timezone: timezone
|
|
290
|
-
}), /*#__PURE__*/_jsx(DateCalendarViewTransitionContainer, {
|
|
298
|
+
children: [/*#__PURE__*/_jsx(CalendarHeader, _extends({}, calendarHeaderProps)), /*#__PURE__*/_jsx(DateCalendarViewTransitionContainer, {
|
|
291
299
|
reduceAnimations: reduceAnimations,
|
|
292
300
|
className: classes.viewTransitionContainer,
|
|
293
301
|
transKey: view,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { DateCalendar } from './DateCalendar';
|
|
2
2
|
export { getDateCalendarUtilityClass, dateCalendarClasses } from './dateCalendarClasses';
|
|
3
3
|
export { dayPickerClasses } from './dayCalendarClasses';
|
|
4
|
-
export { pickersCalendarHeaderClasses } from './pickersCalendarHeaderClasses';
|
|
5
4
|
export { pickersFadeTransitionGroupClasses } from './pickersFadeTransitionGroupClasses';
|
|
6
|
-
export { pickersSlideTransitionClasses } from './pickersSlideTransitionClasses';
|
|
5
|
+
export { pickersSlideTransitionClasses } from './pickersSlideTransitionClasses';
|
|
6
|
+
// TODO v7: Remove and export the `PickersCalendarHeader` folder from the root instead.
|
|
7
|
+
export * from '../PickersCalendarHeader';
|
|
@@ -38,8 +38,8 @@ const DateField = /*#__PURE__*/React.forwardRef(function DateField(inProps, ref)
|
|
|
38
38
|
textFieldProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
39
39
|
|
|
40
40
|
// TODO: Remove when mui/material-ui#35088 will be merged
|
|
41
|
-
textFieldProps.inputProps = _extends({},
|
|
42
|
-
textFieldProps.InputProps = _extends({},
|
|
41
|
+
textFieldProps.inputProps = _extends({}, inputProps, textFieldProps.inputProps);
|
|
42
|
+
textFieldProps.InputProps = _extends({}, InputProps, textFieldProps.InputProps);
|
|
43
43
|
const _useDateField = useDateField({
|
|
44
44
|
props: textFieldProps,
|
|
45
45
|
inputRef: externalInputRef
|
|
@@ -38,8 +38,8 @@ const DateTimeField = /*#__PURE__*/React.forwardRef(function DateTimeField(inPro
|
|
|
38
38
|
textFieldProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
39
39
|
|
|
40
40
|
// TODO: Remove when mui/material-ui#35088 will be merged
|
|
41
|
-
textFieldProps.inputProps = _extends({},
|
|
42
|
-
textFieldProps.InputProps = _extends({},
|
|
41
|
+
textFieldProps.inputProps = _extends({}, inputProps, textFieldProps.inputProps);
|
|
42
|
+
textFieldProps.InputProps = _extends({}, InputProps, textFieldProps.InputProps);
|
|
43
43
|
const _useDateTimeField = useDateTimeField({
|
|
44
44
|
props: textFieldProps,
|
|
45
45
|
inputRef: externalInputRef
|
|
@@ -47,7 +47,7 @@ const DesktopDatePicker = /*#__PURE__*/React.forwardRef(function DesktopDatePick
|
|
|
47
47
|
props,
|
|
48
48
|
valueManager: singleItemValueManager,
|
|
49
49
|
valueType: 'date',
|
|
50
|
-
getOpenDialogAriaText: localeText.openDatePickerDialogue,
|
|
50
|
+
getOpenDialogAriaText: props.localeText?.openDatePickerDialogue ?? localeText.openDatePickerDialogue,
|
|
51
51
|
validator: validateDate
|
|
52
52
|
});
|
|
53
53
|
return renderPicker();
|
|
@@ -83,7 +83,7 @@ const DesktopDateTimePicker = /*#__PURE__*/React.forwardRef(function DesktopDate
|
|
|
83
83
|
props,
|
|
84
84
|
valueManager: singleItemValueManager,
|
|
85
85
|
valueType: 'date-time',
|
|
86
|
-
getOpenDialogAriaText: localeText.openDatePickerDialogue,
|
|
86
|
+
getOpenDialogAriaText: props.localeText?.openDatePickerDialogue ?? localeText.openDatePickerDialogue,
|
|
87
87
|
validator: validateDateTime
|
|
88
88
|
});
|
|
89
89
|
return renderPicker();
|
|
@@ -70,7 +70,7 @@ const DesktopTimePicker = /*#__PURE__*/React.forwardRef(function DesktopTimePick
|
|
|
70
70
|
props,
|
|
71
71
|
valueManager: singleItemValueManager,
|
|
72
72
|
valueType: 'time',
|
|
73
|
-
getOpenDialogAriaText: localeText.openTimePickerDialogue,
|
|
73
|
+
getOpenDialogAriaText: props.localeText?.openTimePickerDialogue ?? localeText.openTimePickerDialogue,
|
|
74
74
|
validator: validateTime
|
|
75
75
|
});
|
|
76
76
|
return renderPicker();
|
|
@@ -44,7 +44,7 @@ const MobileDatePicker = /*#__PURE__*/React.forwardRef(function MobileDatePicker
|
|
|
44
44
|
props,
|
|
45
45
|
valueManager: singleItemValueManager,
|
|
46
46
|
valueType: 'date',
|
|
47
|
-
getOpenDialogAriaText: localeText.openDatePickerDialogue,
|
|
47
|
+
getOpenDialogAriaText: props.localeText?.openDatePickerDialogue ?? localeText.openDatePickerDialogue,
|
|
48
48
|
validator: validateDate
|
|
49
49
|
});
|
|
50
50
|
return renderPicker();
|
|
@@ -55,7 +55,7 @@ const MobileDateTimePicker = /*#__PURE__*/React.forwardRef(function MobileDateTi
|
|
|
55
55
|
props,
|
|
56
56
|
valueManager: singleItemValueManager,
|
|
57
57
|
valueType: 'date-time',
|
|
58
|
-
getOpenDialogAriaText: localeText.openDatePickerDialogue,
|
|
58
|
+
getOpenDialogAriaText: props.localeText?.openDatePickerDialogue ?? localeText.openDatePickerDialogue,
|
|
59
59
|
validator: validateDateTime
|
|
60
60
|
});
|
|
61
61
|
return renderPicker();
|
|
@@ -48,7 +48,7 @@ const MobileTimePicker = /*#__PURE__*/React.forwardRef(function MobileTimePicker
|
|
|
48
48
|
props,
|
|
49
49
|
valueManager: singleItemValueManager,
|
|
50
50
|
valueType: 'time',
|
|
51
|
-
getOpenDialogAriaText: localeText.openTimePickerDialogue,
|
|
51
|
+
getOpenDialogAriaText: props.localeText?.openTimePickerDialogue ?? localeText.openTimePickerDialogue,
|
|
52
52
|
validator: validateTime
|
|
53
53
|
});
|
|
54
54
|
return renderPicker();
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
-
const _excluded = ["
|
|
3
|
+
const _excluded = ["slots", "slotProps", "currentMonth", "disabled", "disableFuture", "disablePast", "maxDate", "minDate", "onMonthChange", "onViewChange", "view", "reduceAnimations", "views", "labelId", "className", "timezone"],
|
|
4
|
+
_excluded2 = ["ownerState"];
|
|
4
5
|
import * as React from 'react';
|
|
6
|
+
import PropTypes from 'prop-types';
|
|
7
|
+
import clsx from 'clsx';
|
|
5
8
|
import Fade from '@mui/material/Fade';
|
|
6
9
|
import { styled, useThemeProps } from '@mui/material/styles';
|
|
7
10
|
import { useSlotProps } from '@mui/base/utils';
|
|
8
11
|
import { unstable_composeClasses as composeClasses } from '@mui/utils';
|
|
9
12
|
import IconButton from '@mui/material/IconButton';
|
|
10
13
|
import { useLocaleText, useUtils } from '../internals/hooks/useUtils';
|
|
11
|
-
import { PickersFadeTransitionGroup } from '
|
|
14
|
+
import { PickersFadeTransitionGroup } from '../DateCalendar/PickersFadeTransitionGroup';
|
|
12
15
|
import { ArrowDropDownIcon } from '../icons';
|
|
13
16
|
import { PickersArrowSwitcher } from '../internals/components/PickersArrowSwitcher';
|
|
14
17
|
import { usePreviousMonthDisabled, useNextMonthDisabled } from '../internals/hooks/date-helpers-hooks';
|
|
@@ -91,11 +94,7 @@ const PickersCalendarHeaderSwitchViewIcon = styled(ArrowDropDownIcon, {
|
|
|
91
94
|
transition: theme.transitions.create('transform'),
|
|
92
95
|
transform: 'rotate(0deg)'
|
|
93
96
|
}));
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* @ignore - do not document.
|
|
97
|
-
*/
|
|
98
|
-
export function PickersCalendarHeader(inProps) {
|
|
97
|
+
const PickersCalendarHeader = /*#__PURE__*/React.forwardRef(function PickersCalendarHeader(inProps, ref) {
|
|
99
98
|
const localeText = useLocaleText();
|
|
100
99
|
const utils = useUtils();
|
|
101
100
|
const props = useThemeProps({
|
|
@@ -103,22 +102,24 @@ export function PickersCalendarHeader(inProps) {
|
|
|
103
102
|
name: 'MuiPickersCalendarHeader'
|
|
104
103
|
});
|
|
105
104
|
const {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
105
|
+
slots,
|
|
106
|
+
slotProps,
|
|
107
|
+
currentMonth: month,
|
|
108
|
+
disabled,
|
|
109
|
+
disableFuture,
|
|
110
|
+
disablePast,
|
|
111
|
+
maxDate,
|
|
112
|
+
minDate,
|
|
113
|
+
onMonthChange,
|
|
114
|
+
onViewChange,
|
|
115
|
+
view,
|
|
116
|
+
reduceAnimations,
|
|
117
|
+
views,
|
|
118
|
+
labelId,
|
|
119
|
+
className,
|
|
120
|
+
timezone
|
|
121
|
+
} = props,
|
|
122
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
122
123
|
const ownerState = props;
|
|
123
124
|
const classes = useUtilityClasses(props);
|
|
124
125
|
const SwitchViewButton = slots?.switchViewButton ?? PickersCalendarHeaderSwitchViewButton;
|
|
@@ -140,7 +141,7 @@ export function PickersCalendarHeader(inProps) {
|
|
|
140
141
|
ownerState: undefined,
|
|
141
142
|
className: classes.switchViewIcon
|
|
142
143
|
}),
|
|
143
|
-
switchViewIconProps = _objectWithoutPropertiesLoose(_useSlotProps,
|
|
144
|
+
switchViewIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
144
145
|
const selectNextMonth = () => onMonthChange(utils.addMonths(month, 1), 'left');
|
|
145
146
|
const selectPreviousMonth = () => onMonthChange(utils.addMonths(month, -1), 'right');
|
|
146
147
|
const isNextMonthDisabled = useNextMonthDisabled(month, {
|
|
@@ -170,9 +171,10 @@ export function PickersCalendarHeader(inProps) {
|
|
|
170
171
|
if (views.length === 1 && views[0] === 'year') {
|
|
171
172
|
return null;
|
|
172
173
|
}
|
|
173
|
-
return /*#__PURE__*/_jsxs(PickersCalendarHeaderRoot, {
|
|
174
|
+
return /*#__PURE__*/_jsxs(PickersCalendarHeaderRoot, _extends({}, other, {
|
|
174
175
|
ownerState: ownerState,
|
|
175
|
-
className: classes.root,
|
|
176
|
+
className: clsx(className, classes.root),
|
|
177
|
+
ref: ref,
|
|
176
178
|
children: [/*#__PURE__*/_jsxs(PickersCalendarHeaderLabelContainer, {
|
|
177
179
|
role: "presentation",
|
|
178
180
|
onClick: handleToggleView,
|
|
@@ -206,5 +208,47 @@ export function PickersCalendarHeader(inProps) {
|
|
|
206
208
|
nextLabel: localeText.nextMonth
|
|
207
209
|
})
|
|
208
210
|
})]
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
+
}));
|
|
212
|
+
});
|
|
213
|
+
process.env.NODE_ENV !== "production" ? PickersCalendarHeader.propTypes = {
|
|
214
|
+
// ----------------------------- Warning --------------------------------
|
|
215
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
216
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
217
|
+
// ----------------------------------------------------------------------
|
|
218
|
+
/**
|
|
219
|
+
* Override or extend the styles applied to the component.
|
|
220
|
+
*/
|
|
221
|
+
classes: PropTypes.object,
|
|
222
|
+
/**
|
|
223
|
+
* className applied to the root element.
|
|
224
|
+
*/
|
|
225
|
+
className: PropTypes.string,
|
|
226
|
+
currentMonth: PropTypes.any.isRequired,
|
|
227
|
+
disabled: PropTypes.bool,
|
|
228
|
+
disableFuture: PropTypes.bool,
|
|
229
|
+
disablePast: PropTypes.bool,
|
|
230
|
+
labelId: PropTypes.string,
|
|
231
|
+
maxDate: PropTypes.any.isRequired,
|
|
232
|
+
minDate: PropTypes.any.isRequired,
|
|
233
|
+
onMonthChange: PropTypes.func.isRequired,
|
|
234
|
+
onViewChange: PropTypes.func,
|
|
235
|
+
reduceAnimations: PropTypes.bool.isRequired,
|
|
236
|
+
/**
|
|
237
|
+
* The props used for each component slot.
|
|
238
|
+
* @default {}
|
|
239
|
+
*/
|
|
240
|
+
slotProps: PropTypes.object,
|
|
241
|
+
/**
|
|
242
|
+
* Overridable component slots.
|
|
243
|
+
* @default {}
|
|
244
|
+
*/
|
|
245
|
+
slots: PropTypes.object,
|
|
246
|
+
/**
|
|
247
|
+
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
248
|
+
*/
|
|
249
|
+
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
250
|
+
timezone: PropTypes.string.isRequired,
|
|
251
|
+
view: PropTypes.oneOf(['day', 'month', 'year']).isRequired,
|
|
252
|
+
views: PropTypes.arrayOf(PropTypes.oneOf(['day', 'month', 'year']).isRequired).isRequired
|
|
253
|
+
} : void 0;
|
|
254
|
+
export { PickersCalendarHeader };
|
|
@@ -38,8 +38,8 @@ const TimeField = /*#__PURE__*/React.forwardRef(function TimeField(inProps, ref)
|
|
|
38
38
|
textFieldProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
|
|
39
39
|
|
|
40
40
|
// TODO: Remove when mui/material-ui#35088 will be merged
|
|
41
|
-
textFieldProps.inputProps = _extends({},
|
|
42
|
-
textFieldProps.InputProps = _extends({},
|
|
41
|
+
textFieldProps.inputProps = _extends({}, inputProps, textFieldProps.inputProps);
|
|
42
|
+
textFieldProps.InputProps = _extends({}, InputProps, textFieldProps.InputProps);
|
|
43
43
|
const _useTimeField = useTimeField({
|
|
44
44
|
props: textFieldProps,
|
|
45
45
|
inputRef: externalInputRef
|
package/modern/index.js
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import useMediaQuery from '@mui/material/useMediaQuery';
|
|
2
|
+
const PREFERS_REDUCED_MOTION = '@media (prefers-reduced-motion: reduce)';
|
|
3
|
+
export const defaultReduceAnimations = typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent);
|
|
4
|
+
export const useDefaultReduceAnimations = () => {
|
|
5
|
+
const prefersReduced = useMediaQuery(PREFERS_REDUCED_MOTION, {
|
|
6
|
+
defaultMatches: false
|
|
7
|
+
});
|
|
8
|
+
return prefersReduced || defaultReduceAnimations;
|
|
9
|
+
};
|
|
@@ -152,13 +152,18 @@ export const useField = params => {
|
|
|
152
152
|
if (readOnly) {
|
|
153
153
|
return;
|
|
154
154
|
}
|
|
155
|
-
const
|
|
155
|
+
const targetValue = event.target.value;
|
|
156
|
+
const eventData = event.nativeEvent.data;
|
|
157
|
+
// Calling `.fill(04/11/2022)` in playwright will trigger a change event with the requested content to insert in `event.nativeEvent.data`
|
|
158
|
+
// usual changes have only the currently typed character in the `event.nativeEvent.data`
|
|
159
|
+
const shouldUseEventData = eventData && eventData.length > 1;
|
|
160
|
+
const valueStr = shouldUseEventData ? eventData : targetValue;
|
|
156
161
|
const cleanValueStr = cleanString(valueStr);
|
|
157
162
|
|
|
158
|
-
// If no section is selected, we just try to parse the new value
|
|
163
|
+
// If no section is selected or eventData should be used, we just try to parse the new value
|
|
159
164
|
// This line is mostly triggered by imperative code / application tests.
|
|
160
|
-
if (selectedSectionIndexes == null) {
|
|
161
|
-
updateValueFromValueStr(cleanValueStr);
|
|
165
|
+
if (selectedSectionIndexes == null || shouldUseEventData) {
|
|
166
|
+
updateValueFromValueStr(shouldUseEventData ? eventData : cleanValueStr);
|
|
162
167
|
return;
|
|
163
168
|
}
|
|
164
169
|
let keyPressed;
|
|
@@ -96,7 +96,7 @@ export const cleanDigitSectionValue = (utils, timezone, value, sectionBoundaries
|
|
|
96
96
|
}
|
|
97
97
|
return valueStr;
|
|
98
98
|
};
|
|
99
|
-
export const adjustSectionValue = (utils, timezone, section, keyCode, sectionsValueBoundaries, activeDate,
|
|
99
|
+
export const adjustSectionValue = (utils, timezone, section, keyCode, sectionsValueBoundaries, activeDate, stepsAttributes) => {
|
|
100
100
|
const delta = getDeltaFromKeyCode(keyCode);
|
|
101
101
|
const isStart = keyCode === 'Home';
|
|
102
102
|
const isEnd = keyCode === 'End';
|
|
@@ -108,7 +108,7 @@ export const adjustSectionValue = (utils, timezone, section, keyCode, sectionsVa
|
|
|
108
108
|
contentType: section.contentType
|
|
109
109
|
});
|
|
110
110
|
const getCleanValue = value => cleanDigitSectionValue(utils, timezone, value, sectionBoundaries, section);
|
|
111
|
-
const step = section.type === 'minutes' &&
|
|
111
|
+
const step = section.type === 'minutes' && stepsAttributes?.minutesStep ? stepsAttributes.minutesStep : 1;
|
|
112
112
|
const currentSectionValue = parseInt(section.value, 10);
|
|
113
113
|
let newSectionValueNumber = currentSectionValue + delta * step;
|
|
114
114
|
if (shouldSetAbsolute) {
|
|
@@ -470,6 +470,7 @@ export const createDateStrForInputFromSections = (sections, isRTL) => {
|
|
|
470
470
|
export const getSectionsBoundaries = (utils, timezone) => {
|
|
471
471
|
const today = utils.dateWithTimezone(undefined, timezone);
|
|
472
472
|
const endOfYear = utils.endOfYear(today);
|
|
473
|
+
const endOfDay = utils.endOfDay(today);
|
|
473
474
|
const {
|
|
474
475
|
maxDaysInMonth,
|
|
475
476
|
longestMonth
|
|
@@ -524,7 +525,7 @@ export const getSectionsBoundaries = (utils, timezone) => {
|
|
|
524
525
|
hours: ({
|
|
525
526
|
format
|
|
526
527
|
}) => {
|
|
527
|
-
const lastHourInDay = utils.getHours(
|
|
528
|
+
const lastHourInDay = utils.getHours(endOfDay);
|
|
528
529
|
const hasMeridiem = utils.formatByString(utils.endOfDay(today), format) !== lastHourInDay.toString();
|
|
529
530
|
if (hasMeridiem) {
|
|
530
531
|
return {
|
|
@@ -540,12 +541,12 @@ export const getSectionsBoundaries = (utils, timezone) => {
|
|
|
540
541
|
minutes: () => ({
|
|
541
542
|
minimum: 0,
|
|
542
543
|
// Assumption: All years have the same amount of minutes
|
|
543
|
-
maximum: utils.getMinutes(
|
|
544
|
+
maximum: utils.getMinutes(endOfDay)
|
|
544
545
|
}),
|
|
545
546
|
seconds: () => ({
|
|
546
547
|
minimum: 0,
|
|
547
548
|
// Assumption: All years have the same amount of seconds
|
|
548
|
-
maximum: utils.getSeconds(
|
|
549
|
+
maximum: utils.getSeconds(endOfDay)
|
|
549
550
|
}),
|
|
550
551
|
meridiem: () => ({
|
|
551
552
|
minimum: 0,
|
|
@@ -20,13 +20,12 @@ export { applyDefaultDate, replaceInvalidDateByNull, areDatesEqual, getTodayDate
|
|
|
20
20
|
export { splitFieldInternalAndForwardedProps } from './utils/fields';
|
|
21
21
|
export { getDefaultReferenceDate } from './utils/getDefaultReferenceDate';
|
|
22
22
|
export { executeInTheNextEventLoopTick, getActiveElement, onSpaceOrEnter, DEFAULT_DESKTOP_MODE_MEDIA_QUERY } from './utils/utils';
|
|
23
|
-
export {
|
|
23
|
+
export { useDefaultReduceAnimations } from './hooks/useDefaultReduceAnimations';
|
|
24
24
|
export { extractValidationProps } from './utils/validation/extractValidationProps';
|
|
25
25
|
export { validateDate } from './utils/validation/validateDate';
|
|
26
26
|
export { validateDateTime } from './utils/validation/validateDateTime';
|
|
27
27
|
export { validateTime } from './utils/validation/validateTime';
|
|
28
28
|
export { buildDeprecatedPropsWarning, buildWarning } from './utils/warning';
|
|
29
29
|
export { uncapitalizeObjectKeys } from './utils/slots-migration';
|
|
30
|
-
export { PickersCalendarHeader } from '../DateCalendar/PickersCalendarHeader';
|
|
31
30
|
export { DayCalendar } from '../DateCalendar/DayCalendar';
|
|
32
31
|
export { useCalendarState } from '../DateCalendar/useCalendarState';
|
|
@@ -25,7 +25,7 @@ export const singleItemValueManager = {
|
|
|
25
25
|
isSameError: (a, b) => a === b,
|
|
26
26
|
hasError: error => error != null,
|
|
27
27
|
defaultErrorState: null,
|
|
28
|
-
getTimezone: (utils, value) => value == null ? null : utils.getTimezone(value),
|
|
28
|
+
getTimezone: (utils, value) => value == null || !utils.isValid(value) ? null : utils.getTimezone(value),
|
|
29
29
|
setTimezone: (utils, timezone, value) => value == null ? null : utils.setTimezone(value, timezone)
|
|
30
30
|
};
|
|
31
31
|
export const singleItemFieldValueManager = {
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { expect } from 'chai';
|
|
2
2
|
import { getDateOffset } from 'test/utils/pickers-utils';
|
|
3
3
|
import { TEST_DATE_ISO_STRING, TEST_DATE_LOCALE_STRING } from './describeGregorianAdapter.utils';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* To check if the date has the right offset even after changing it's date parts,
|
|
7
|
+
* we convert it to a different timezone that always has the same offset,
|
|
8
|
+
* then we check that both dates have the same hour value.
|
|
9
|
+
*/
|
|
10
|
+
// We change to
|
|
11
|
+
const expectSameTimeInMonacoTZ = (adapter, value) => {
|
|
12
|
+
const valueInMonacoTz = adapter.setTimezone(value, 'Europe/Monaco');
|
|
13
|
+
expect(adapter.getHours(value)).to.equal(adapter.getHours(valueInMonacoTz));
|
|
14
|
+
};
|
|
4
15
|
export const testCalculations = ({
|
|
5
16
|
adapter,
|
|
6
17
|
adapterTZ,
|
|
@@ -9,6 +20,7 @@ export const testCalculations = ({
|
|
|
9
20
|
getLocaleFromDate
|
|
10
21
|
}) => {
|
|
11
22
|
const testDateIso = adapter.date(TEST_DATE_ISO_STRING);
|
|
23
|
+
const testDateLastNonDSTDay = adapterTZ.isTimezoneCompatible ? adapterTZ.dateWithTimezone('2022-03-27', 'Europe/Paris') : adapterTZ.date('2022-03-27');
|
|
12
24
|
const testDateLocale = adapter.date(TEST_DATE_LOCALE_STRING);
|
|
13
25
|
describe('Method: date', () => {
|
|
14
26
|
it('should parse strings', () => {
|
|
@@ -484,10 +496,19 @@ export const testCalculations = ({
|
|
|
484
496
|
expect(adapter.endOfYear(testDateIso)).toEqualDateTime(expected);
|
|
485
497
|
expect(adapter.endOfYear(testDateLocale)).toEqualDateTime(expected);
|
|
486
498
|
});
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
499
|
+
describe('Method: endOfMonth', () => {
|
|
500
|
+
it('should handle basic usecases', () => {
|
|
501
|
+
const expected = '2018-10-31T23:59:59.999Z';
|
|
502
|
+
expect(adapter.endOfMonth(testDateIso)).toEqualDateTime(expected);
|
|
503
|
+
expect(adapter.endOfMonth(testDateLocale)).toEqualDateTime(expected);
|
|
504
|
+
});
|
|
505
|
+
it('should update the offset when entering DST', function test() {
|
|
506
|
+
if (!adapterTZ.isTimezoneCompatible) {
|
|
507
|
+
this.skip();
|
|
508
|
+
}
|
|
509
|
+
expectSameTimeInMonacoTZ(adapterTZ, testDateLastNonDSTDay);
|
|
510
|
+
expectSameTimeInMonacoTZ(adapterTZ, adapterTZ.endOfMonth(testDateLastNonDSTDay));
|
|
511
|
+
});
|
|
491
512
|
});
|
|
492
513
|
it('Method: endOfWeek', () => {
|
|
493
514
|
const expected = adapter.lib === 'luxon' ? '2018-11-04T23:59:59.999Z' : '2018-11-03T23:59:59.999Z';
|
|
@@ -503,18 +524,45 @@ export const testCalculations = ({
|
|
|
503
524
|
expect(adapter.addYears(testDateIso, 2)).toEqualDateTime('2020-10-30T11:44:00.000Z');
|
|
504
525
|
expect(adapter.addYears(testDateIso, -2)).toEqualDateTime('2016-10-30T11:44:00.000Z');
|
|
505
526
|
});
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
527
|
+
describe('Method: addMonths', () => {
|
|
528
|
+
it('should handle basic usecases', () => {
|
|
529
|
+
expect(adapter.addMonths(testDateIso, 2)).toEqualDateTime('2018-12-30T11:44:00.000Z');
|
|
530
|
+
expect(adapter.addMonths(testDateIso, -2)).toEqualDateTime('2018-08-30T11:44:00.000Z');
|
|
531
|
+
expect(adapter.addMonths(testDateIso, 3)).toEqualDateTime('2019-01-30T11:44:00.000Z');
|
|
532
|
+
});
|
|
533
|
+
it('should update the offset when entering DST', function test() {
|
|
534
|
+
if (!adapterTZ.isTimezoneCompatible) {
|
|
535
|
+
this.skip();
|
|
536
|
+
}
|
|
537
|
+
expectSameTimeInMonacoTZ(adapterTZ, testDateLastNonDSTDay);
|
|
538
|
+
expectSameTimeInMonacoTZ(adapterTZ, adapterTZ.addMonths(testDateLastNonDSTDay, 1));
|
|
539
|
+
});
|
|
510
540
|
});
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
541
|
+
describe('Method: addWeeks', () => {
|
|
542
|
+
it('should handle basic usecases', () => {
|
|
543
|
+
expect(adapter.addWeeks(testDateIso, 2)).toEqualDateTime('2018-11-13T11:44:00.000Z');
|
|
544
|
+
expect(adapter.addWeeks(testDateIso, -2)).toEqualDateTime('2018-10-16T11:44:00.000Z');
|
|
545
|
+
});
|
|
546
|
+
it('should update the offset when entering DST', function test() {
|
|
547
|
+
if (!adapterTZ.isTimezoneCompatible) {
|
|
548
|
+
this.skip();
|
|
549
|
+
}
|
|
550
|
+
expectSameTimeInMonacoTZ(adapterTZ, testDateLastNonDSTDay);
|
|
551
|
+
expectSameTimeInMonacoTZ(adapterTZ, adapterTZ.addWeeks(testDateLastNonDSTDay, 1));
|
|
552
|
+
});
|
|
514
553
|
});
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
554
|
+
describe('Method: addWeeks', () => {
|
|
555
|
+
it('should handle basic usecases', () => {
|
|
556
|
+
expect(adapter.addDays(testDateIso, 2)).toEqualDateTime('2018-11-01T11:44:00.000Z');
|
|
557
|
+
expect(adapter.addDays(testDateIso, -2)).toEqualDateTime('2018-10-28T11:44:00.000Z');
|
|
558
|
+
});
|
|
559
|
+
it('should update the offset when entering DST', function test() {
|
|
560
|
+
if (!adapterTZ.isTimezoneCompatible) {
|
|
561
|
+
this.skip();
|
|
562
|
+
}
|
|
563
|
+
expectSameTimeInMonacoTZ(adapterTZ, testDateLastNonDSTDay);
|
|
564
|
+
expectSameTimeInMonacoTZ(adapterTZ, adapterTZ.addDays(testDateLastNonDSTDay, 1));
|
|
565
|
+
});
|
|
518
566
|
});
|
|
519
567
|
it('Method: addHours', () => {
|
|
520
568
|
expect(adapter.addHours(testDateIso, 2)).toEqualDateTime('2018-10-30T13:44:00.000Z');
|
|
@@ -624,14 +672,13 @@ export const testCalculations = ({
|
|
|
624
672
|
const referenceDate = adapterTZ.dateWithTimezone('2022-03-17', 'Europe/Paris');
|
|
625
673
|
const weekArray = adapterTZ.getWeekArray(referenceDate);
|
|
626
674
|
let expectedDate = adapter.startOfWeek(adapter.startOfMonth(referenceDate));
|
|
627
|
-
const lastNonDSTDay = adapterTZ.dateWithTimezone('2022-03-27', 'Europe/Paris');
|
|
628
675
|
expect(weekArray).to.have.length(5);
|
|
629
676
|
weekArray.forEach(week => {
|
|
630
677
|
expect(week).to.have.length(7);
|
|
631
678
|
week.forEach(day => {
|
|
632
679
|
expect(adapterTZ.startOfDay(day)).toEqualDateTime(adapterTZ.startOfDay(expectedDate));
|
|
633
680
|
expectedDate = adapterTZ.addDays(expectedDate, 1);
|
|
634
|
-
expect(getDateOffset(adapterTZ, day)).to.equal(adapterTZ.isAfter(day,
|
|
681
|
+
expect(getDateOffset(adapterTZ, day)).to.equal(adapterTZ.isAfter(day, testDateLastNonDSTDay) ? 120 : 60);
|
|
635
682
|
});
|
|
636
683
|
});
|
|
637
684
|
});
|