@mui/x-date-pickers-pro 6.8.0 → 6.9.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 +76 -5534
- package/DateRangeCalendar/DateRangeCalendar.js +41 -22
- package/DateRangeCalendar/DateRangeCalendar.types.d.ts +2 -1
- package/DateRangeCalendar/useDragRange.d.ts +3 -2
- package/DateRangeCalendar/useDragRange.js +14 -11
- package/DateRangePicker/DateRangePicker.js +8 -0
- package/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
- package/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
- package/MultiInputDateRangeField/MultiInputDateRangeField.js +8 -0
- package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
- package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +1 -1
- package/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
- package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +1 -1
- package/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
- package/SingleInputDateRangeField/SingleInputDateRangeField.types.d.ts +1 -1
- package/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
- package/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
- package/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
- package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +1 -1
- package/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
- package/index.js +1 -1
- package/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
- package/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
- package/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +21 -14
- package/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +21 -14
- package/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +21 -14
- package/internal/utils/releaseInfo.js +1 -1
- package/internal/utils/validation/validateDateRange.d.ts +3 -2
- package/internal/utils/validation/validateDateTimeRange.d.ts +3 -2
- package/internal/utils/validation/validateTimeRange.d.ts +3 -2
- package/internal/utils/valueManagers.js +3 -2
- package/legacy/DateRangeCalendar/DateRangeCalendar.js +39 -24
- package/legacy/DateRangeCalendar/useDragRange.js +14 -11
- package/legacy/DateRangePicker/DateRangePicker.js +8 -0
- package/legacy/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
- package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
- package/legacy/MultiInputDateRangeField/MultiInputDateRangeField.js +8 -0
- package/legacy/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
- package/legacy/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
- package/legacy/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
- package/legacy/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
- package/legacy/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
- package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
- package/legacy/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
- package/legacy/index.js +1 -1
- package/legacy/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
- package/legacy/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
- package/legacy/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +20 -18
- package/legacy/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +20 -18
- package/legacy/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +20 -18
- package/legacy/internal/utils/releaseInfo.js +1 -1
- package/legacy/internal/utils/valueManagers.js +5 -2
- package/modern/DateRangeCalendar/DateRangeCalendar.js +41 -22
- package/modern/DateRangeCalendar/useDragRange.js +14 -11
- package/modern/DateRangePicker/DateRangePicker.js +8 -0
- package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
- package/modern/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
- package/modern/MultiInputDateRangeField/MultiInputDateRangeField.js +8 -0
- package/modern/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
- package/modern/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
- package/modern/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
- package/modern/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
- package/modern/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
- package/modern/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
- package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
- package/modern/index.js +1 -1
- package/modern/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
- package/modern/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
- package/modern/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +21 -13
- package/modern/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +21 -13
- package/modern/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +21 -13
- package/modern/internal/utils/releaseInfo.js +1 -1
- package/modern/internal/utils/valueManagers.js +3 -2
- package/node/DateRangeCalendar/DateRangeCalendar.js +40 -21
- package/node/DateRangeCalendar/useDragRange.js +14 -11
- package/node/DateRangePicker/DateRangePicker.js +8 -0
- package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +8 -0
- package/node/MobileDateRangePicker/MobileDateRangePicker.js +8 -0
- package/node/MultiInputDateRangeField/MultiInputDateRangeField.js +8 -0
- package/node/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.js +8 -0
- package/node/MultiInputTimeRangeField/MultiInputTimeRangeField.js +8 -0
- package/node/SingleInputDateRangeField/SingleInputDateRangeField.js +8 -0
- package/node/SingleInputDateTimeRangeField/SingleInputDateTimeRangeField.js +8 -0
- package/node/SingleInputTimeRangeField/SingleInputTimeRangeField.js +8 -0
- package/node/StaticDateRangePicker/StaticDateRangePicker.js +8 -0
- package/node/dateRangeViewRenderers/dateRangeViewRenderers.js +4 -2
- package/node/index.js +1 -1
- package/node/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +2 -0
- package/node/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +3 -1
- package/node/internal/hooks/useMultiInputRangeField/useMultiInputDateRangeField.js +20 -14
- package/node/internal/hooks/useMultiInputRangeField/useMultiInputDateTimeRangeField.js +20 -14
- package/node/internal/hooks/useMultiInputRangeField/useMultiInputTimeRangeField.js +20 -14
- package/node/internal/utils/releaseInfo.js +1 -1
- package/node/internal/utils/valueManagers.js +3 -2
- package/package.json +4 -4
|
@@ -1,18 +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 = ["value", "defaultValue", "onChange", "className", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "defaultCalendarMonth", "rangePosition", "defaultRangePosition", "onRangePositionChange", "calendars", "currentMonthCalendarPosition", "components", "componentsProps", "slots", "slotProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber"],
|
|
3
|
+
const _excluded = ["value", "defaultValue", "onChange", "className", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "defaultCalendarMonth", "rangePosition", "defaultRangePosition", "onRangePositionChange", "calendars", "currentMonthCalendarPosition", "components", "componentsProps", "slots", "slotProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber", "timezone"],
|
|
4
4
|
_excluded2 = ["isDragging", "rangeDragDay", "draggingDatePosition"];
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import PropTypes from 'prop-types';
|
|
7
7
|
import clsx from 'clsx';
|
|
8
8
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
9
|
-
import useControlled from '@mui/utils/useControlled';
|
|
10
9
|
import useMediaQuery from '@mui/material/useMediaQuery';
|
|
11
10
|
import { resolveComponentProps } from '@mui/base/utils';
|
|
12
11
|
import { styled, useThemeProps } from '@mui/material/styles';
|
|
13
12
|
import { unstable_composeClasses as composeClasses } from '@mui/utils';
|
|
14
13
|
import { Watermark } from '@mui/x-license-pro';
|
|
15
|
-
import { applyDefaultDate, DAY_MARGIN, DayCalendar, defaultReduceAnimations, PickersArrowSwitcher, PickersCalendarHeader, useCalendarState, useDefaultDates, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils, useNow, uncapitalizeObjectKeys, DEFAULT_DESKTOP_MODE_MEDIA_QUERY, buildWarning } from '@mui/x-date-pickers/internals';
|
|
14
|
+
import { applyDefaultDate, DAY_MARGIN, DayCalendar, defaultReduceAnimations, PickersArrowSwitcher, PickersCalendarHeader, useCalendarState, useDefaultDates, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils, useNow, uncapitalizeObjectKeys, DEFAULT_DESKTOP_MODE_MEDIA_QUERY, buildWarning, useControlledValueWithTimezone } from '@mui/x-date-pickers/internals';
|
|
16
15
|
import { getReleaseInfo } from '../internal/utils/releaseInfo';
|
|
17
16
|
import { dateRangeCalendarClasses, getDateRangeCalendarUtilityClass } from './dateRangeCalendarClasses';
|
|
18
17
|
import { isEndOfRange, isRangeValid, isStartOfRange, isWithinRange } from '../internal/utils/date-utils';
|
|
@@ -40,7 +39,7 @@ const DateRangeCalendarMonthContainer = styled('div', {
|
|
|
40
39
|
theme
|
|
41
40
|
}) => ({
|
|
42
41
|
'&:not(:last-of-type)': {
|
|
43
|
-
borderRight: `
|
|
42
|
+
borderRight: `1px solid ${(theme.vars || theme).palette.divider}`
|
|
44
43
|
}
|
|
45
44
|
}));
|
|
46
45
|
const DateRangeCalendarArrowSwitcher = styled(PickersArrowSwitcher)({
|
|
@@ -109,9 +108,6 @@ const useUtilityClasses = ownerState => {
|
|
|
109
108
|
return composeClasses(slots, getDateRangeCalendarUtilityClass, classes);
|
|
110
109
|
};
|
|
111
110
|
const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar(inProps, ref) {
|
|
112
|
-
const utils = useUtils();
|
|
113
|
-
const localeText = useLocaleText();
|
|
114
|
-
const now = useNow();
|
|
115
111
|
const props = useDateRangeCalendarDefaultizedProps(inProps, 'MuiDateRangeCalendar');
|
|
116
112
|
const shouldHavePreview = useMediaQuery(DEFAULT_DESKTOP_MODE_MEDIA_QUERY, {
|
|
117
113
|
defaultMatches: false
|
|
@@ -149,17 +145,27 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
149
145
|
autoFocus,
|
|
150
146
|
fixedWeekNumber,
|
|
151
147
|
disableDragEditing,
|
|
152
|
-
displayWeekNumber
|
|
148
|
+
displayWeekNumber,
|
|
149
|
+
timezone: timezoneProp
|
|
153
150
|
} = props,
|
|
154
151
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
152
|
+
const {
|
|
153
|
+
value,
|
|
154
|
+
handleValueChange,
|
|
155
|
+
timezone
|
|
156
|
+
} = useControlledValueWithTimezone({
|
|
160
157
|
name: 'DateRangeCalendar',
|
|
161
|
-
|
|
158
|
+
timezone: timezoneProp,
|
|
159
|
+
value: valueProp,
|
|
160
|
+
defaultValue,
|
|
161
|
+
onChange,
|
|
162
|
+
valueManager: rangeValueManager
|
|
162
163
|
});
|
|
164
|
+
const utils = useUtils();
|
|
165
|
+
const localeText = useLocaleText();
|
|
166
|
+
const now = useNow(timezone);
|
|
167
|
+
const slots = innerSlots != null ? innerSlots : uncapitalizeObjectKeys(components);
|
|
168
|
+
const slotProps = innerSlotProps != null ? innerSlotProps : componentsProps;
|
|
163
169
|
const {
|
|
164
170
|
rangePosition,
|
|
165
171
|
onRangePositionChange
|
|
@@ -186,8 +192,7 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
186
192
|
});
|
|
187
193
|
onRangePositionChange(nextSelection);
|
|
188
194
|
const isFullRangeSelected = rangePosition === 'end' && isRangeValid(utils, newRange);
|
|
189
|
-
|
|
190
|
-
onChange == null ? void 0 : onChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
|
|
195
|
+
handleValueChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
|
|
191
196
|
});
|
|
192
197
|
const handleDrop = useEventCallback(newDate => {
|
|
193
198
|
handleSelectedDayChange(newDate, undefined, true);
|
|
@@ -202,7 +207,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
202
207
|
onDrop: handleDrop,
|
|
203
208
|
onDatePositionChange: handleDatePositionChange,
|
|
204
209
|
utils,
|
|
205
|
-
dateRange: valueDayRange
|
|
210
|
+
dateRange: valueDayRange,
|
|
211
|
+
timezone
|
|
206
212
|
}),
|
|
207
213
|
{
|
|
208
214
|
isDragging,
|
|
@@ -249,7 +255,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
249
255
|
minDate,
|
|
250
256
|
onMonthChange,
|
|
251
257
|
reduceAnimations,
|
|
252
|
-
shouldDisableDate: wrappedShouldDisableDate
|
|
258
|
+
shouldDisableDate: wrappedShouldDisableDate,
|
|
259
|
+
timezone
|
|
253
260
|
});
|
|
254
261
|
const prevValue = React.useRef(null);
|
|
255
262
|
React.useEffect(() => {
|
|
@@ -285,11 +292,13 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
285
292
|
}, [changeMonth, calendarState.currentMonth, utils]);
|
|
286
293
|
const isNextMonthDisabled = useNextMonthDisabled(calendarState.currentMonth, {
|
|
287
294
|
disableFuture,
|
|
288
|
-
maxDate
|
|
295
|
+
maxDate,
|
|
296
|
+
timezone
|
|
289
297
|
});
|
|
290
298
|
const isPreviousMonthDisabled = usePreviousMonthDisabled(calendarState.currentMonth, {
|
|
291
299
|
disablePast,
|
|
292
|
-
minDate
|
|
300
|
+
minDate,
|
|
301
|
+
timezone
|
|
293
302
|
});
|
|
294
303
|
const baseDateValidationProps = {
|
|
295
304
|
disablePast,
|
|
@@ -419,7 +428,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
419
428
|
disableFuture: disableFuture,
|
|
420
429
|
reduceAnimations: reduceAnimations,
|
|
421
430
|
slots: slots,
|
|
422
|
-
slotProps: slotProps
|
|
431
|
+
slotProps: slotProps,
|
|
432
|
+
timezone: timezone
|
|
423
433
|
}) : /*#__PURE__*/_jsx(DateRangeCalendarArrowSwitcher, {
|
|
424
434
|
onGoToPrevious: selectPreviousMonth,
|
|
425
435
|
onGoToNext: selectNextMonth,
|
|
@@ -451,7 +461,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
451
461
|
slotProps: slotPropsForDayCalendar,
|
|
452
462
|
autoFocus: month === focusedMonth,
|
|
453
463
|
fixedWeekNumber: fixedWeekNumber,
|
|
454
|
-
displayWeekNumber: displayWeekNumber
|
|
464
|
+
displayWeekNumber: displayWeekNumber,
|
|
465
|
+
timezone: timezone
|
|
455
466
|
}), index)]
|
|
456
467
|
}, month))]
|
|
457
468
|
}));
|
|
@@ -640,6 +651,14 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
|
|
|
640
651
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
641
652
|
*/
|
|
642
653
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
654
|
+
/**
|
|
655
|
+
* Choose which timezone to use for the value.
|
|
656
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
657
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
658
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
659
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
660
|
+
*/
|
|
661
|
+
timezone: PropTypes.string,
|
|
643
662
|
/**
|
|
644
663
|
* The selected value.
|
|
645
664
|
* Used when the component is controlled.
|
|
@@ -2,6 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { SxProps } from '@mui/system';
|
|
3
3
|
import { SlotComponentProps } from '@mui/base';
|
|
4
4
|
import { Theme } from '@mui/material/styles';
|
|
5
|
+
import { TimezoneProps } from '@mui/x-date-pickers/models';
|
|
5
6
|
import { BaseDateValidationProps, DefaultizedProps, ExportedDayCalendarProps, DayCalendarSlotsComponent, DayCalendarSlotsComponentsProps, PickersArrowSwitcherSlotsComponent, PickersArrowSwitcherSlotsComponentsProps, PickerSelectionState, PickersCalendarHeaderSlotsComponent, PickersCalendarHeaderSlotsComponentsProps, DayCalendarProps, ExportedUseViewsOptions, UncapitalizeObjectKeys } from '@mui/x-date-pickers/internals';
|
|
6
7
|
import { DateRange, DayRangeValidationProps } from '../internal/models';
|
|
7
8
|
import { DateRangeCalendarClasses } from './dateRangeCalendarClasses';
|
|
@@ -22,7 +23,7 @@ export interface DateRangeCalendarSlotsComponentsProps<TDate> extends PickersArr
|
|
|
22
23
|
selected: boolean;
|
|
23
24
|
}>;
|
|
24
25
|
}
|
|
25
|
-
export interface ExportedDateRangeCalendarProps<TDate> extends ExportedDayCalendarProps, BaseDateValidationProps<TDate>, DayRangeValidationProps<TDate>, Pick<ExportedUseViewsOptions<'day'>, 'autoFocus'> {
|
|
26
|
+
export interface ExportedDateRangeCalendarProps<TDate> extends ExportedDayCalendarProps, BaseDateValidationProps<TDate>, DayRangeValidationProps<TDate>, TimezoneProps, Pick<ExportedUseViewsOptions<'day'>, 'autoFocus'> {
|
|
26
27
|
/**
|
|
27
28
|
* If `true`, after selecting `start` date calendar will not automatically switch to the month of `end` date.
|
|
28
29
|
* @default false
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { MuiPickersAdapter } from '@mui/x-date-pickers/models';
|
|
2
|
+
import { MuiPickersAdapter, PickersTimezone } from '@mui/x-date-pickers/models';
|
|
3
3
|
import { DateRangePosition } from './DateRangeCalendar.types';
|
|
4
4
|
import { DateRange } from '../internal/models';
|
|
5
5
|
interface UseDragRangeParams<TDate> {
|
|
@@ -11,6 +11,7 @@ interface UseDragRangeParams<TDate> {
|
|
|
11
11
|
onDatePositionChange: (position: DateRangePosition) => void;
|
|
12
12
|
onDrop: (newDate: TDate) => void;
|
|
13
13
|
dateRange: DateRange<TDate>;
|
|
14
|
+
timezone: PickersTimezone;
|
|
14
15
|
}
|
|
15
16
|
interface UseDragRangeEvents {
|
|
16
17
|
onDragStart?: React.DragEventHandler<HTMLButtonElement>;
|
|
@@ -28,5 +29,5 @@ interface UseDragRangeResponse<TDate> extends UseDragRangeEvents {
|
|
|
28
29
|
rangeDragDay: TDate | null;
|
|
29
30
|
draggingDatePosition: DateRangePosition | null;
|
|
30
31
|
}
|
|
31
|
-
export declare const useDragRange: <TDate>({ disableDragEditing, utils, onDatePositionChange, onDrop, dateRange, }: Omit<UseDragRangeParams<TDate>, "isDragging" | "setRangeDragDay" | "setIsDragging">) => UseDragRangeResponse<TDate>;
|
|
32
|
+
export declare const useDragRange: <TDate>({ disableDragEditing, utils, onDatePositionChange, onDrop, dateRange, timezone, }: Omit<UseDragRangeParams<TDate>, "isDragging" | "setRangeDragDay" | "setIsDragging">) => UseDragRangeResponse<TDate>;
|
|
32
33
|
export {};
|
|
@@ -2,13 +2,13 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
4
4
|
import { isEndOfRange, isStartOfRange } from '../internal/utils/date-utils';
|
|
5
|
-
const resolveDateFromTarget = (target, utils) => {
|
|
5
|
+
const resolveDateFromTarget = (target, utils, timezone) => {
|
|
6
6
|
const timestampString = target.dataset.timestamp;
|
|
7
7
|
if (!timestampString) {
|
|
8
8
|
return null;
|
|
9
9
|
}
|
|
10
10
|
const timestamp = +timestampString;
|
|
11
|
-
return utils.
|
|
11
|
+
return utils.dateWithTimezone(new Date(timestamp).toISOString(), timezone);
|
|
12
12
|
};
|
|
13
13
|
const isSameAsDraggingDate = event => {
|
|
14
14
|
const timestampString = event.target.dataset.timestamp;
|
|
@@ -49,7 +49,8 @@ const useDragRangeEvents = ({
|
|
|
49
49
|
onDatePositionChange,
|
|
50
50
|
onDrop,
|
|
51
51
|
disableDragEditing,
|
|
52
|
-
dateRange
|
|
52
|
+
dateRange,
|
|
53
|
+
timezone
|
|
53
54
|
}) => {
|
|
54
55
|
const emptyDragImgRef = React.useRef(null);
|
|
55
56
|
React.useEffect(() => {
|
|
@@ -67,7 +68,7 @@ const useDragRangeEvents = ({
|
|
|
67
68
|
return shouldInitDragging && (isSelectedStartDate || isSelectedEndDate);
|
|
68
69
|
};
|
|
69
70
|
const handleDragStart = useEventCallback(event => {
|
|
70
|
-
const newDate = resolveDateFromTarget(event.target, utils);
|
|
71
|
+
const newDate = resolveDateFromTarget(event.target, utils, timezone);
|
|
71
72
|
if (!isElementDraggable(newDate)) {
|
|
72
73
|
return;
|
|
73
74
|
}
|
|
@@ -91,7 +92,7 @@ const useDragRangeEvents = ({
|
|
|
91
92
|
if (!target) {
|
|
92
93
|
return;
|
|
93
94
|
}
|
|
94
|
-
const newDate = resolveDateFromTarget(target, utils);
|
|
95
|
+
const newDate = resolveDateFromTarget(target, utils, timezone);
|
|
95
96
|
if (!isElementDraggable(newDate)) {
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
@@ -110,14 +111,14 @@ const useDragRangeEvents = ({
|
|
|
110
111
|
event.preventDefault();
|
|
111
112
|
event.stopPropagation();
|
|
112
113
|
event.dataTransfer.dropEffect = 'move';
|
|
113
|
-
setRangeDragDay(resolveDateFromTarget(event.target, utils));
|
|
114
|
+
setRangeDragDay(resolveDateFromTarget(event.target, utils, timezone));
|
|
114
115
|
});
|
|
115
116
|
const handleTouchMove = useEventCallback(event => {
|
|
116
117
|
const target = resolveElementFromTouch(event);
|
|
117
118
|
if (!isDragging || !target) {
|
|
118
119
|
return;
|
|
119
120
|
}
|
|
120
|
-
const newDate = resolveDateFromTarget(target, utils);
|
|
121
|
+
const newDate = resolveDateFromTarget(target, utils, timezone);
|
|
121
122
|
if (newDate) {
|
|
122
123
|
setRangeDragDay(newDate);
|
|
123
124
|
}
|
|
@@ -150,7 +151,7 @@ const useDragRangeEvents = ({
|
|
|
150
151
|
|
|
151
152
|
// make sure the focused element is the element where touch ended
|
|
152
153
|
target.focus();
|
|
153
|
-
const newDate = resolveDateFromTarget(target, utils);
|
|
154
|
+
const newDate = resolveDateFromTarget(target, utils, timezone);
|
|
154
155
|
if (newDate) {
|
|
155
156
|
onDrop(newDate);
|
|
156
157
|
}
|
|
@@ -177,7 +178,7 @@ const useDragRangeEvents = ({
|
|
|
177
178
|
if (isSameAsDraggingDate(event)) {
|
|
178
179
|
return;
|
|
179
180
|
}
|
|
180
|
-
const newDate = resolveDateFromTarget(event.target, utils);
|
|
181
|
+
const newDate = resolveDateFromTarget(event.target, utils, timezone);
|
|
181
182
|
if (newDate) {
|
|
182
183
|
onDrop(newDate);
|
|
183
184
|
}
|
|
@@ -199,7 +200,8 @@ export const useDragRange = ({
|
|
|
199
200
|
utils,
|
|
200
201
|
onDatePositionChange,
|
|
201
202
|
onDrop,
|
|
202
|
-
dateRange
|
|
203
|
+
dateRange,
|
|
204
|
+
timezone
|
|
203
205
|
}) => {
|
|
204
206
|
const [isDragging, setIsDragging] = React.useState(false);
|
|
205
207
|
const [rangeDragDay, setRangeDragDay] = React.useState(null);
|
|
@@ -228,7 +230,8 @@ export const useDragRange = ({
|
|
|
228
230
|
isDragging,
|
|
229
231
|
setRangeDragDay: handleRangeDragDayChange,
|
|
230
232
|
disableDragEditing,
|
|
231
|
-
dateRange
|
|
233
|
+
dateRange,
|
|
234
|
+
timezone
|
|
232
235
|
});
|
|
233
236
|
return React.useMemo(() => _extends({
|
|
234
237
|
isDragging,
|
|
@@ -307,6 +307,14 @@ process.env.NODE_ENV !== "production" ? DateRangePicker.propTypes = {
|
|
|
307
307
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
308
308
|
*/
|
|
309
309
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
310
|
+
/**
|
|
311
|
+
* Choose which timezone to use for the value.
|
|
312
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
313
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
314
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
315
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
316
|
+
*/
|
|
317
|
+
timezone: PropTypes.string,
|
|
310
318
|
/**
|
|
311
319
|
* The selected value.
|
|
312
320
|
* Used when the component is controlled.
|
|
@@ -316,6 +316,14 @@ DesktopDateRangePicker.propTypes = {
|
|
|
316
316
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
317
317
|
*/
|
|
318
318
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
319
|
+
/**
|
|
320
|
+
* Choose which timezone to use for the value.
|
|
321
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
322
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
323
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
324
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
325
|
+
*/
|
|
326
|
+
timezone: PropTypes.string,
|
|
319
327
|
/**
|
|
320
328
|
* The selected value.
|
|
321
329
|
* Used when the component is controlled.
|
|
@@ -319,6 +319,14 @@ MobileDateRangePicker.propTypes = {
|
|
|
319
319
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
320
320
|
*/
|
|
321
321
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
322
|
+
/**
|
|
323
|
+
* Choose which timezone to use for the value.
|
|
324
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
325
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
326
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
327
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
328
|
+
*/
|
|
329
|
+
timezone: PropTypes.string,
|
|
322
330
|
/**
|
|
323
331
|
* The selected value.
|
|
324
332
|
* Used when the component is controlled.
|
|
@@ -301,6 +301,14 @@ process.env.NODE_ENV !== "production" ? MultiInputDateRangeField.propTypes = {
|
|
|
301
301
|
* The system prop, which allows defining system overrides as well as additional CSS styles.
|
|
302
302
|
*/
|
|
303
303
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
304
|
+
/**
|
|
305
|
+
* Choose which timezone to use for the value.
|
|
306
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
307
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
308
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
309
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
310
|
+
*/
|
|
311
|
+
timezone: PropTypes.string,
|
|
304
312
|
unstableEndFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
305
313
|
unstableStartFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
306
314
|
/**
|
|
@@ -350,6 +350,14 @@ process.env.NODE_ENV !== "production" ? MultiInputDateTimeRangeField.propTypes =
|
|
|
350
350
|
* The system prop, which allows defining system overrides as well as additional CSS styles.
|
|
351
351
|
*/
|
|
352
352
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
353
|
+
/**
|
|
354
|
+
* Choose which timezone to use for the value.
|
|
355
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
356
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
357
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
358
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
359
|
+
*/
|
|
360
|
+
timezone: PropTypes.string,
|
|
353
361
|
unstableEndFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
354
362
|
unstableStartFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
355
363
|
/**
|
|
@@ -67,4 +67,4 @@ export interface MultiInputDateTimeRangeFieldSlotsComponentsProps<TDate> {
|
|
|
67
67
|
}>;
|
|
68
68
|
separator?: SlotComponentProps<typeof Typography, {}, MultiInputDateTimeRangeFieldOwnerState<TDate>>;
|
|
69
69
|
}
|
|
70
|
-
export type UseMultiInputDateTimeRangeFieldDefaultizedProps<TDate, AdditionalProps extends {}> = UseDateTimeRangeFieldDefaultizedProps<TDate> & AdditionalProps
|
|
70
|
+
export type UseMultiInputDateTimeRangeFieldDefaultizedProps<TDate, AdditionalProps extends {}> = UseDateTimeRangeFieldDefaultizedProps<TDate> & Omit<AdditionalProps, 'value' | 'defaultValue' | 'onChange'>;
|
|
@@ -326,6 +326,14 @@ process.env.NODE_ENV !== "production" ? MultiInputTimeRangeField.propTypes = {
|
|
|
326
326
|
* The system prop, which allows defining system overrides as well as additional CSS styles.
|
|
327
327
|
*/
|
|
328
328
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
329
|
+
/**
|
|
330
|
+
* Choose which timezone to use for the value.
|
|
331
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
332
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
333
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
334
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
335
|
+
*/
|
|
336
|
+
timezone: PropTypes.string,
|
|
329
337
|
unstableEndFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
330
338
|
unstableStartFieldRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
331
339
|
/**
|
|
@@ -67,4 +67,4 @@ export interface MultiInputTimeRangeFieldSlotsComponentsProps<TDate> {
|
|
|
67
67
|
}>;
|
|
68
68
|
separator?: SlotComponentProps<typeof Typography, {}, MultiInputTimeRangeFieldOwnerState<TDate>>;
|
|
69
69
|
}
|
|
70
|
-
export type UseMultiInputTimeRangeFieldDefaultizedProps<TDate, AdditionalProps extends {}> = UseTimeRangeFieldDefaultizedProps<TDate> & AdditionalProps
|
|
70
|
+
export type UseMultiInputTimeRangeFieldDefaultizedProps<TDate, AdditionalProps extends {}> = UseTimeRangeFieldDefaultizedProps<TDate> & Omit<AdditionalProps, 'value' | 'defaultValue' | 'onChange'>;
|
|
@@ -296,6 +296,14 @@ process.env.NODE_ENV !== "production" ? SingleInputDateRangeField.propTypes = {
|
|
|
296
296
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
297
297
|
*/
|
|
298
298
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
299
|
+
/**
|
|
300
|
+
* Choose which timezone to use for the value.
|
|
301
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
302
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
303
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
304
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
305
|
+
*/
|
|
306
|
+
timezone: PropTypes.string,
|
|
299
307
|
/**
|
|
300
308
|
* The ref object used to imperatively interact with the field.
|
|
301
309
|
*/
|
|
@@ -9,7 +9,7 @@ export interface UseSingleInputDateRangeFieldParams<TDate, TChildProps extends {
|
|
|
9
9
|
}
|
|
10
10
|
export interface UseSingleInputDateRangeFieldProps<TDate> extends UseDateRangeFieldProps<TDate> {
|
|
11
11
|
}
|
|
12
|
-
export type UseSingleInputDateRangeFieldDefaultizedProps<TDate, AdditionalProps extends {}> = UseDateRangeFieldDefaultizedProps<TDate> & AdditionalProps
|
|
12
|
+
export type UseSingleInputDateRangeFieldDefaultizedProps<TDate, AdditionalProps extends {}> = UseDateRangeFieldDefaultizedProps<TDate> & Omit<AdditionalProps, 'value' | 'defaultValue' | 'onChange'>;
|
|
13
13
|
export type UseSingleInputDateRangeFieldComponentProps<TDate, TChildProps extends {}> = Omit<TChildProps, keyof UseSingleInputDateRangeFieldProps<TDate>> & UseSingleInputDateRangeFieldProps<TDate>;
|
|
14
14
|
export type SingleInputDateRangeFieldProps<TDate, TChildProps extends {} = FieldsTextFieldProps> = UseSingleInputDateRangeFieldComponentProps<TDate, TChildProps> & {
|
|
15
15
|
/**
|
|
@@ -345,6 +345,14 @@ process.env.NODE_ENV !== "production" ? SingleInputDateTimeRangeField.propTypes
|
|
|
345
345
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
346
346
|
*/
|
|
347
347
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
348
|
+
/**
|
|
349
|
+
* Choose which timezone to use for the value.
|
|
350
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
351
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
352
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
353
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
354
|
+
*/
|
|
355
|
+
timezone: PropTypes.string,
|
|
348
356
|
/**
|
|
349
357
|
* The ref object used to imperatively interact with the field.
|
|
350
358
|
*/
|
|
@@ -321,6 +321,14 @@ process.env.NODE_ENV !== "production" ? SingleInputTimeRangeField.propTypes = {
|
|
|
321
321
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
322
322
|
*/
|
|
323
323
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
324
|
+
/**
|
|
325
|
+
* Choose which timezone to use for the value.
|
|
326
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
327
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
328
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
329
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
330
|
+
*/
|
|
331
|
+
timezone: PropTypes.string,
|
|
324
332
|
/**
|
|
325
333
|
* The ref object used to imperatively interact with the field.
|
|
326
334
|
*/
|
|
@@ -253,6 +253,14 @@ StaticDateRangePicker.propTypes = {
|
|
|
253
253
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
254
254
|
*/
|
|
255
255
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
256
|
+
/**
|
|
257
|
+
* Choose which timezone to use for the value.
|
|
258
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
259
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
260
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
261
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
262
|
+
*/
|
|
263
|
+
timezone: PropTypes.string,
|
|
256
264
|
/**
|
|
257
265
|
* The selected value.
|
|
258
266
|
* Used when the component is controlled.
|
|
@@ -10,4 +10,4 @@ export interface DateRangeViewRendererProps<TDate, TView extends DateOrTimeViewW
|
|
|
10
10
|
* We don't pass all the props down to `DateRangeCalendar`,
|
|
11
11
|
* because otherwise some unwanted props would be passed to the HTML element.
|
|
12
12
|
*/
|
|
13
|
-
export declare const renderDateRangeViewCalendar: <TDate extends unknown>({ value, defaultValue, onChange, className, classes, disableFuture, disablePast, minDate, maxDate, shouldDisableDate, reduceAnimations, onMonthChange, defaultCalendarMonth, rangePosition, defaultRangePosition, onRangePositionChange, calendars, currentMonthCalendarPosition, components, componentsProps, slots, slotProps, loading, renderLoading, disableHighlightToday, readOnly, disabled, showDaysOutsideCurrentMonth, dayOfWeekFormatter, disableAutoMonthSwitching, sx, autoFocus, fixedWeekNumber, disableDragEditing, displayWeekNumber, }: DateRangeViewRendererProps<TDate, any>) => React.JSX.Element;
|
|
13
|
+
export declare const renderDateRangeViewCalendar: <TDate extends unknown>({ value, defaultValue, onChange, className, classes, disableFuture, disablePast, minDate, maxDate, shouldDisableDate, reduceAnimations, onMonthChange, defaultCalendarMonth, rangePosition, defaultRangePosition, onRangePositionChange, calendars, currentMonthCalendarPosition, components, componentsProps, slots, slotProps, loading, renderLoading, disableHighlightToday, readOnly, disabled, showDaysOutsideCurrentMonth, dayOfWeekFormatter, disableAutoMonthSwitching, sx, autoFocus, fixedWeekNumber, disableDragEditing, displayWeekNumber, timezone, }: DateRangeViewRendererProps<TDate, any>) => React.JSX.Element;
|
|
@@ -40,7 +40,8 @@ export const renderDateRangeViewCalendar = ({
|
|
|
40
40
|
autoFocus,
|
|
41
41
|
fixedWeekNumber,
|
|
42
42
|
disableDragEditing,
|
|
43
|
-
displayWeekNumber
|
|
43
|
+
displayWeekNumber,
|
|
44
|
+
timezone
|
|
44
45
|
}) => /*#__PURE__*/_jsx(DateRangeCalendar, {
|
|
45
46
|
value: value,
|
|
46
47
|
defaultValue: defaultValue,
|
|
@@ -76,5 +77,6 @@ export const renderDateRangeViewCalendar = ({
|
|
|
76
77
|
autoFocus: autoFocus,
|
|
77
78
|
fixedWeekNumber: fixedWeekNumber,
|
|
78
79
|
disableDragEditing: disableDragEditing,
|
|
79
|
-
displayWeekNumber: displayWeekNumber
|
|
80
|
+
displayWeekNumber: displayWeekNumber,
|
|
81
|
+
timezone: timezone
|
|
80
82
|
});
|
package/index.js
CHANGED
|
@@ -27,6 +27,7 @@ export const useDesktopRangePicker = _ref => {
|
|
|
27
27
|
sx,
|
|
28
28
|
format,
|
|
29
29
|
formatDensity,
|
|
30
|
+
timezone,
|
|
30
31
|
label,
|
|
31
32
|
inputRef,
|
|
32
33
|
readOnly,
|
|
@@ -79,6 +80,7 @@ export const useDesktopRangePicker = _ref => {
|
|
|
79
80
|
sx,
|
|
80
81
|
format,
|
|
81
82
|
formatDensity,
|
|
83
|
+
timezone,
|
|
82
84
|
autoFocus: autoFocus && !props.open,
|
|
83
85
|
ref: fieldContainerRef
|
|
84
86
|
}, fieldType === 'single-input' && {
|
|
@@ -28,6 +28,7 @@ export const useMobileRangePicker = _ref => {
|
|
|
28
28
|
sx,
|
|
29
29
|
format,
|
|
30
30
|
formatDensity,
|
|
31
|
+
timezone,
|
|
31
32
|
label,
|
|
32
33
|
inputRef,
|
|
33
34
|
readOnly,
|
|
@@ -68,7 +69,8 @@ export const useMobileRangePicker = _ref => {
|
|
|
68
69
|
className,
|
|
69
70
|
sx,
|
|
70
71
|
format,
|
|
71
|
-
formatDensity
|
|
72
|
+
formatDensity,
|
|
73
|
+
timezone
|
|
72
74
|
}, fieldType === 'single-input' && {
|
|
73
75
|
inputRef
|
|
74
76
|
}),
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
-
import * as React from 'react';
|
|
3
2
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
4
3
|
import { unstable_useDateField as useDateField } from '@mui/x-date-pickers/DateField';
|
|
5
|
-
import { useLocalizationContext, useValidation } from '@mui/x-date-pickers/internals';
|
|
6
|
-
import useControlled from '@mui/utils/useControlled';
|
|
4
|
+
import { useLocalizationContext, useValidation, useControlledValueWithTimezone } from '@mui/x-date-pickers/internals';
|
|
7
5
|
import { useDefaultizedDateRangeFieldProps } from '../../../SingleInputDateRangeField/useSingleInputDateRangeField';
|
|
8
6
|
import { validateDateRange } from '../../utils/validation/validateDateRange';
|
|
9
7
|
import { rangeValueManager } from '../../utils/valueManagers';
|
|
@@ -16,7 +14,6 @@ export const useMultiInputDateRangeField = ({
|
|
|
16
14
|
endInputRef,
|
|
17
15
|
unstableEndFieldRef
|
|
18
16
|
}) => {
|
|
19
|
-
var _firstDefaultValue$cu;
|
|
20
17
|
const sharedProps = useDefaultizedDateRangeFieldProps(inSharedProps);
|
|
21
18
|
const adapter = useLocalizationContext();
|
|
22
19
|
const {
|
|
@@ -29,35 +26,43 @@ export const useMultiInputDateRangeField = ({
|
|
|
29
26
|
disabled,
|
|
30
27
|
readOnly,
|
|
31
28
|
selectedSections,
|
|
32
|
-
onSelectedSectionsChange
|
|
29
|
+
onSelectedSectionsChange,
|
|
30
|
+
timezone: timezoneProp
|
|
33
31
|
} = sharedProps;
|
|
34
|
-
const
|
|
35
|
-
|
|
32
|
+
const {
|
|
33
|
+
value,
|
|
34
|
+
handleValueChange,
|
|
35
|
+
timezone
|
|
36
|
+
} = useControlledValueWithTimezone({
|
|
36
37
|
name: 'useMultiInputDateRangeField',
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
timezone: timezoneProp,
|
|
39
|
+
value: valueProp,
|
|
40
|
+
defaultValue,
|
|
41
|
+
onChange,
|
|
42
|
+
valueManager: rangeValueManager
|
|
40
43
|
});
|
|
41
44
|
|
|
42
45
|
// TODO: Maybe export utility from `useField` instead of copy/pasting the logic
|
|
43
46
|
const buildChangeHandler = index => {
|
|
44
47
|
return (newDate, rawContext) => {
|
|
45
48
|
const newDateRange = index === 0 ? [newDate, value[1]] : [value[0], newDate];
|
|
46
|
-
setValue(newDateRange);
|
|
47
49
|
const context = _extends({}, rawContext, {
|
|
48
50
|
validationError: validateDateRange({
|
|
49
51
|
adapter,
|
|
50
52
|
value: newDateRange,
|
|
51
|
-
props: sharedProps
|
|
53
|
+
props: _extends({}, sharedProps, {
|
|
54
|
+
timezone
|
|
55
|
+
})
|
|
52
56
|
})
|
|
53
57
|
});
|
|
54
|
-
|
|
58
|
+
handleValueChange(newDateRange, context);
|
|
55
59
|
};
|
|
56
60
|
};
|
|
57
61
|
const handleStartDateChange = useEventCallback(buildChangeHandler(0));
|
|
58
62
|
const handleEndDateChange = useEventCallback(buildChangeHandler(1));
|
|
59
63
|
const validationError = useValidation(_extends({}, sharedProps, {
|
|
60
|
-
value
|
|
64
|
+
value,
|
|
65
|
+
timezone
|
|
61
66
|
}), validateDateRange, rangeValueManager.isSameError, rangeValueManager.defaultErrorState);
|
|
62
67
|
const startFieldProps = _extends({
|
|
63
68
|
error: !!validationError[0]
|
|
@@ -67,6 +72,7 @@ export const useMultiInputDateRangeField = ({
|
|
|
67
72
|
format,
|
|
68
73
|
formatDensity,
|
|
69
74
|
shouldRespectLeadingZeros,
|
|
75
|
+
timezone,
|
|
70
76
|
unstableFieldRef: unstableStartFieldRef,
|
|
71
77
|
value: valueProp === undefined ? undefined : valueProp[0],
|
|
72
78
|
defaultValue: defaultValue === undefined ? undefined : defaultValue[0],
|
|
@@ -82,6 +88,7 @@ export const useMultiInputDateRangeField = ({
|
|
|
82
88
|
shouldRespectLeadingZeros,
|
|
83
89
|
disabled,
|
|
84
90
|
readOnly,
|
|
91
|
+
timezone,
|
|
85
92
|
unstableFieldRef: unstableEndFieldRef,
|
|
86
93
|
value: valueProp === undefined ? undefined : valueProp[1],
|
|
87
94
|
defaultValue: defaultValue === undefined ? undefined : defaultValue[1],
|