@mui/x-date-pickers-pro 6.0.0-alpha.10 → 6.0.0-alpha.12
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 +241 -0
- package/DateRangeCalendar/DateRangeCalendar.d.ts +1 -1
- package/DateRangeCalendar/DateRangeCalendar.js +220 -108
- package/DateRangeCalendar/DateRangeCalendar.types.d.ts +21 -10
- package/DateRangeCalendar/dateRangeCalendarClasses.d.ts +3 -1
- package/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
- package/DateRangeCalendar/useDragRange.d.ts +32 -0
- package/DateRangeCalendar/useDragRange.js +238 -0
- package/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/DateRangePicker/DateRangePicker.js +0 -1
- package/DateRangePicker/DateRangePickerInput.d.ts +3 -3
- package/DateRangePicker/DateRangePickerInput.js +16 -16
- package/DateRangePicker/DateRangePickerToolbar.d.ts +2 -2
- package/DateRangePicker/DateRangePickerToolbar.js +6 -6
- package/DateRangePicker/DateRangePickerView.d.ts +3 -3
- package/DateRangePicker/DateRangePickerView.js +16 -16
- package/DateRangePicker/DateRangePickerViewDesktop.d.ts +2 -2
- package/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
- package/DateRangePicker/date-range-manager.d.ts +12 -5
- package/DateRangePicker/date-range-manager.js +16 -7
- package/DateRangePicker/dateRangePickerInputClasses.d.ts +1 -1
- package/DateRangePicker/dateRangePickerToolbarClasses.d.ts +1 -1
- package/DateRangePicker/dateRangePickerViewDesktopClasses.d.ts +1 -1
- package/DateRangePickerDay/DateRangePickerDay.d.ts +7 -3
- package/DateRangePickerDay/DateRangePickerDay.js +24 -24
- package/DateRangePickerDay/dateRangePickerDayClasses.d.ts +3 -3
- package/DesktopDateRangePicker/DesktopDateRangePicker.d.ts +1 -1
- package/DesktopDateRangePicker/DesktopDateRangePicker.js +5 -6
- package/DesktopNextDateRangePicker/DesktopNextDateRangePicker.d.ts +1 -1
- package/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +6 -2
- package/DesktopNextDateRangePicker/DesktopNextDateRangePicker.types.d.ts +1 -1
- package/MobileDateRangePicker/MobileDateRangePicker.d.ts +1 -1
- package/MobileDateRangePicker/MobileDateRangePicker.js +5 -6
- package/MobileNextDateRangePicker/MobileNextDateRangePicker.d.ts +1 -1
- package/MobileNextDateRangePicker/MobileNextDateRangePicker.js +6 -2
- package/MobileNextDateRangePicker/MobileNextDateRangePicker.types.d.ts +1 -1
- package/MultiInputDateRangeField/MultiInputDateRangeField.d.ts +1 -1
- package/MultiInputDateRangeField/MultiInputDateRangeField.js +10 -3
- package/MultiInputDateRangeField/MultiInputDateRangeField.types.d.ts +7 -4
- package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.d.ts +1 -1
- package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +5 -4
- package/MultiInputTimeRangeField/MultiInputTimeRangeField.d.ts +1 -1
- package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +5 -4
- package/NextDateRangePicker/NextDateRangePicker.d.ts +1 -1
- package/NextDateRangePicker/NextDateRangePicker.js +5 -0
- package/NextDateRangePicker/shared.d.ts +1 -1
- package/SingleInputDateRangeField/SingleInputDateRangeField.d.ts +1 -1
- package/SingleInputDateRangeField/SingleInputDateRangeField.interfaces.d.ts +2 -2
- package/SingleInputDateRangeField/SingleInputDateRangeField.types.d.ts +3 -3
- package/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
- package/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
- package/StaticDateRangePicker/StaticDateRangePicker.d.ts +1 -1
- package/StaticDateRangePicker/StaticDateRangePicker.js +5 -5
- package/StaticNextDateRangePicker/StaticNextDateRangePicker.d.ts +1 -1
- package/StaticNextDateRangePicker/StaticNextDateRangePicker.js +8 -3
- package/StaticNextDateRangePicker/StaticNextDateRangePicker.types.d.ts +5 -4
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +19 -7
- package/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +7 -8
- package/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -7
- package/internal/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +7 -8
- package/internal/hooks/useMultiInputRangeField/useMultiInputRangeField.types.d.ts +1 -1
- package/internal/hooks/useRangePickerInputProps.d.ts +6 -4
- package/internal/hooks/useRangePickerInputProps.js +17 -15
- package/internal/hooks/useStaticRangePicker/index.d.ts +2 -0
- package/internal/hooks/useStaticRangePicker/index.js +1 -0
- package/internal/hooks/useStaticRangePicker/useStaticRangePicker.d.ts +10 -0
- package/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +67 -0
- package/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.d.ts +29 -0
- package/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +1 -0
- package/internal/hooks/validation/useDateRangeValidation.d.ts +2 -3
- package/internal/hooks/validation/useDateRangeValidation.js +0 -1
- package/internal/hooks/validation/useDateTimeRangeValidation.d.ts +2 -3
- package/internal/hooks/validation/useDateTimeRangeValidation.js +0 -1
- package/internal/hooks/validation/useTimeRangeValidation.d.ts +2 -3
- package/internal/hooks/validation/useTimeRangeValidation.js +0 -1
- package/internal/models/dateRange.d.ts +2 -3
- package/internal/models/dateTimeRange.d.ts +2 -3
- package/internal/models/fields.d.ts +6 -1
- package/internal/models/range.d.ts +6 -9
- package/internal/models/timeRange.d.ts +2 -3
- package/internal/utils/date-fields-utils.d.ts +5 -5
- package/internal/utils/releaseInfo.js +1 -1
- package/internal/utils/valueManagers.d.ts +5 -5
- package/internal/utils/valueManagers.js +11 -7
- package/internal/utils/{views.d.ts → viewRenderers.d.ts} +1 -1
- package/{modern/internal/utils/views.js → internal/utils/viewRenderers.js} +10 -6
- package/legacy/DateRangeCalendar/DateRangeCalendar.js +188 -69
- package/legacy/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
- package/legacy/DateRangeCalendar/useDragRange.js +247 -0
- package/legacy/DateRangePicker/DateRangePicker.js +0 -1
- package/legacy/DateRangePicker/DateRangePickerInput.js +16 -16
- package/legacy/DateRangePicker/DateRangePickerToolbar.js +7 -7
- package/legacy/DateRangePicker/DateRangePickerView.js +16 -16
- package/legacy/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
- package/legacy/DateRangePicker/date-range-manager.js +17 -7
- package/legacy/DateRangePickerDay/DateRangePickerDay.js +23 -23
- package/legacy/DesktopDateRangePicker/DesktopDateRangePicker.js +6 -7
- package/legacy/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +6 -2
- package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +6 -7
- package/legacy/MobileNextDateRangePicker/MobileNextDateRangePicker.js +6 -2
- package/legacy/MultiInputDateRangeField/MultiInputDateRangeField.js +9 -2
- package/legacy/NextDateRangePicker/NextDateRangePicker.js +5 -0
- package/legacy/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
- package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +6 -6
- package/legacy/StaticNextDateRangePicker/StaticNextDateRangePicker.js +9 -4
- package/legacy/index.js +1 -1
- package/legacy/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +20 -8
- package/legacy/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +18 -8
- package/legacy/internal/hooks/useRangePickerInputProps.js +17 -15
- package/legacy/internal/hooks/useStaticRangePicker/index.js +1 -0
- package/legacy/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +70 -0
- package/legacy/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +1 -0
- package/legacy/internal/hooks/validation/useDateRangeValidation.js +0 -3
- package/legacy/internal/hooks/validation/useDateTimeRangeValidation.js +0 -3
- package/legacy/internal/hooks/validation/useTimeRangeValidation.js +0 -3
- package/legacy/internal/utils/releaseInfo.js +1 -1
- package/legacy/internal/utils/valueManagers.js +10 -6
- package/legacy/internal/utils/{views.js → viewRenderers.js} +10 -6
- package/modern/DateRangeCalendar/DateRangeCalendar.js +218 -107
- package/modern/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
- package/modern/DateRangeCalendar/useDragRange.js +237 -0
- package/modern/DateRangePicker/DateRangePicker.js +0 -1
- package/modern/DateRangePicker/DateRangePickerInput.js +16 -16
- package/modern/DateRangePicker/DateRangePickerToolbar.js +6 -6
- package/modern/DateRangePicker/DateRangePickerView.js +16 -16
- package/modern/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
- package/modern/DateRangePicker/date-range-manager.js +16 -7
- package/modern/DateRangePickerDay/DateRangePickerDay.js +24 -24
- package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +5 -6
- package/modern/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +6 -2
- package/modern/MobileDateRangePicker/MobileDateRangePicker.js +5 -6
- package/modern/MobileNextDateRangePicker/MobileNextDateRangePicker.js +6 -2
- package/modern/MultiInputDateRangeField/MultiInputDateRangeField.js +10 -3
- package/modern/NextDateRangePicker/NextDateRangePicker.js +5 -0
- package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
- package/modern/StaticDateRangePicker/StaticDateRangePicker.js +5 -5
- package/modern/StaticNextDateRangePicker/StaticNextDateRangePicker.js +8 -3
- package/modern/index.js +1 -1
- package/modern/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +19 -7
- package/modern/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -7
- package/modern/internal/hooks/useRangePickerInputProps.js +16 -15
- package/modern/internal/hooks/useStaticRangePicker/index.js +1 -0
- package/modern/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +67 -0
- package/modern/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +1 -0
- package/modern/internal/hooks/validation/useDateRangeValidation.js +0 -1
- package/modern/internal/hooks/validation/useDateTimeRangeValidation.js +0 -1
- package/modern/internal/hooks/validation/useTimeRangeValidation.js +0 -1
- package/modern/internal/utils/releaseInfo.js +1 -1
- package/modern/internal/utils/valueManagers.js +11 -7
- package/{internal/utils/views.js → modern/internal/utils/viewRenderers.js} +10 -6
- package/node/DateRangeCalendar/DateRangeCalendar.js +215 -104
- package/node/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
- package/node/DateRangeCalendar/useDragRange.js +247 -0
- package/node/DateRangePicker/DateRangePicker.js +0 -1
- package/node/DateRangePicker/DateRangePickerInput.js +16 -16
- package/node/DateRangePicker/DateRangePickerToolbar.js +6 -6
- package/node/DateRangePicker/DateRangePickerView.js +16 -16
- package/node/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
- package/node/DateRangePicker/date-range-manager.js +16 -7
- package/node/DateRangePickerDay/DateRangePickerDay.js +23 -23
- package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +5 -6
- package/node/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +7 -3
- package/node/MobileDateRangePicker/MobileDateRangePicker.js +5 -6
- package/node/MobileNextDateRangePicker/MobileNextDateRangePicker.js +7 -3
- package/node/MultiInputDateRangeField/MultiInputDateRangeField.js +10 -3
- package/node/NextDateRangePicker/NextDateRangePicker.js +5 -0
- package/node/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
- package/node/StaticDateRangePicker/StaticDateRangePicker.js +5 -5
- package/node/StaticNextDateRangePicker/StaticNextDateRangePicker.js +9 -4
- package/node/index.js +1 -1
- package/node/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +19 -7
- package/node/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -7
- package/node/internal/hooks/useRangePickerInputProps.js +16 -15
- package/node/internal/hooks/useStaticRangePicker/index.js +12 -0
- package/node/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +77 -0
- package/node/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +5 -0
- package/node/internal/hooks/validation/useDateRangeValidation.js +1 -3
- package/node/internal/hooks/validation/useDateTimeRangeValidation.js +1 -3
- package/node/internal/hooks/validation/useTimeRangeValidation.js +1 -3
- package/node/internal/utils/releaseInfo.js +1 -1
- package/node/internal/utils/valueManagers.js +12 -8
- package/node/internal/utils/{views.js → viewRenderers.js} +10 -6
- package/package.json +4 -4
- package/SingleInputDateRangeField/SingleInputDateRangeField.utils.d.ts +0 -6
- package/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -24
- package/legacy/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -26
- package/modern/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -24
- package/node/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -33
|
@@ -1,6 +1,7 @@
|
|
|
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", "
|
|
3
|
+
const _excluded = ["value", "defaultValue", "onChange", "className", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "defaultCalendarMonth", "rangePosition", "onRangePositionChange", "calendars", "components", "componentsProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber"],
|
|
4
|
+
_excluded2 = ["isDragging", "rangeDragDay", "draggingDatePosition"];
|
|
4
5
|
import * as React from 'react';
|
|
5
6
|
import PropTypes from 'prop-types';
|
|
6
7
|
import clsx from 'clsx';
|
|
@@ -10,13 +11,14 @@ import { resolveComponentProps } from '@mui/base/utils';
|
|
|
10
11
|
import { styled, useThemeProps } from '@mui/material/styles';
|
|
11
12
|
import { unstable_composeClasses as composeClasses } from '@mui/utils';
|
|
12
13
|
import { Watermark } from '@mui/x-license-pro';
|
|
13
|
-
import { applyDefaultDate, DAY_MARGIN, DayCalendar, defaultReduceAnimations, PickersArrowSwitcher, PickersCalendarHeader, useCalendarState, useDefaultDates, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils, WrapperVariantContext } from '@mui/x-date-pickers/internals';
|
|
14
|
+
import { applyDefaultDate, DAY_MARGIN, DayCalendar, defaultReduceAnimations, PickersArrowSwitcher, PickersCalendarHeader, useCalendarState, useDefaultDates, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils, WrapperVariantContext, useNow } from '@mui/x-date-pickers/internals';
|
|
14
15
|
import { getReleaseInfo } from '../internal/utils/releaseInfo';
|
|
15
|
-
import { getDateRangeCalendarUtilityClass } from './dateRangeCalendarClasses';
|
|
16
|
+
import { dateRangeCalendarClasses, getDateRangeCalendarUtilityClass } from './dateRangeCalendarClasses';
|
|
16
17
|
import { isEndOfRange, isRangeValid, isStartOfRange, isWithinRange } from '../internal/utils/date-utils';
|
|
17
18
|
import { calculateRangeChange, calculateRangePreview } from '../DateRangePicker/date-range-manager';
|
|
18
|
-
import { DateRangePickerDay } from '../DateRangePickerDay';
|
|
19
|
+
import { DateRangePickerDay, dateRangePickerDayClasses as dayClasses } from '../DateRangePickerDay';
|
|
19
20
|
import { rangeValueManager } from '../internal/utils/valueManagers';
|
|
21
|
+
import { useDragRange } from './useDragRange';
|
|
20
22
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
21
23
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
24
|
const releaseInfo = getReleaseInfo();
|
|
@@ -47,12 +49,30 @@ const DateRangeCalendarArrowSwitcher = styled(PickersArrowSwitcher)({
|
|
|
47
49
|
});
|
|
48
50
|
const DAY_RANGE_SIZE = 40;
|
|
49
51
|
const weeksContainerHeight = (DAY_RANGE_SIZE + DAY_MARGIN * 2) * 6;
|
|
50
|
-
const DayCalendarForRange = styled(DayCalendar)({
|
|
52
|
+
const DayCalendarForRange = styled(DayCalendar)(({
|
|
53
|
+
theme
|
|
54
|
+
}) => ({
|
|
51
55
|
minWidth: 312,
|
|
52
|
-
minHeight: weeksContainerHeight
|
|
53
|
-
}
|
|
56
|
+
minHeight: weeksContainerHeight,
|
|
57
|
+
[`&.${dateRangeCalendarClasses.dayDragging}`]: {
|
|
58
|
+
[`& .${dayClasses.day}`]: {
|
|
59
|
+
cursor: 'grabbing'
|
|
60
|
+
},
|
|
61
|
+
[`& .${dayClasses.root}:not(.${dayClasses.rangeIntervalDayHighlightStart}):not(.${dayClasses.rangeIntervalDayHighlightEnd}) .${dayClasses.day}:not(.${dayClasses.notSelectedDate})`]: {
|
|
62
|
+
// we can't override `PickersDay` background color here, because it's styles take precedence
|
|
63
|
+
opacity: 0.6
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
[`&:not(.${dateRangeCalendarClasses.dayDragging}) .${dayClasses.dayOutsideRangeInterval}`]: {
|
|
67
|
+
'@media (pointer: fine)': {
|
|
68
|
+
'&:hover': {
|
|
69
|
+
border: `1px solid ${(theme.vars || theme).palette.grey[500]}`
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}));
|
|
54
74
|
function useDateRangeCalendarDefaultizedProps(props, name) {
|
|
55
|
-
var _themeProps$renderLoa, _themeProps$reduceAni, _props$loading, _props$disablePast, _props$disableFuture, _themeProps$calendars;
|
|
75
|
+
var _themeProps$renderLoa, _themeProps$reduceAni, _props$loading, _props$disablePast, _props$disableFuture, _themeProps$calendars, _themeProps$disableDr;
|
|
56
76
|
const utils = useUtils();
|
|
57
77
|
const defaultDates = useDefaultDates();
|
|
58
78
|
const themeProps = useThemeProps({
|
|
@@ -69,25 +89,27 @@ function useDateRangeCalendarDefaultizedProps(props, name) {
|
|
|
69
89
|
disableFuture: (_props$disableFuture = props.disableFuture) != null ? _props$disableFuture : false,
|
|
70
90
|
minDate: applyDefaultDate(utils, themeProps.minDate, defaultDates.minDate),
|
|
71
91
|
maxDate: applyDefaultDate(utils, themeProps.maxDate, defaultDates.maxDate),
|
|
72
|
-
calendars: (_themeProps$calendars = themeProps.calendars) != null ? _themeProps$calendars : 2
|
|
92
|
+
calendars: (_themeProps$calendars = themeProps.calendars) != null ? _themeProps$calendars : 2,
|
|
93
|
+
disableDragEditing: (_themeProps$disableDr = themeProps.disableDragEditing) != null ? _themeProps$disableDr : false
|
|
73
94
|
});
|
|
74
95
|
}
|
|
75
96
|
const useUtilityClasses = ownerState => {
|
|
76
97
|
const {
|
|
77
|
-
classes
|
|
98
|
+
classes,
|
|
99
|
+
isDragging
|
|
78
100
|
} = ownerState;
|
|
79
101
|
const slots = {
|
|
80
102
|
root: ['root'],
|
|
81
|
-
monthContainer: ['monthContainer']
|
|
103
|
+
monthContainer: ['monthContainer'],
|
|
104
|
+
dayCalendar: [isDragging && 'dayDragging']
|
|
82
105
|
};
|
|
83
106
|
return composeClasses(slots, getDateRangeCalendarUtilityClass, classes);
|
|
84
107
|
};
|
|
85
108
|
const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalendar(inProps, ref) {
|
|
86
109
|
const utils = useUtils();
|
|
87
110
|
const localeText = useLocaleText();
|
|
111
|
+
const now = useNow();
|
|
88
112
|
const props = useDateRangeCalendarDefaultizedProps(inProps, 'MuiDateRangeCalendar');
|
|
89
|
-
const ownerState = props;
|
|
90
|
-
const classes = useUtilityClasses(ownerState);
|
|
91
113
|
const isMobile = React.useContext(WrapperVariantContext) === 'mobile';
|
|
92
114
|
const {
|
|
93
115
|
value: valueProp,
|
|
@@ -102,8 +124,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
102
124
|
reduceAnimations,
|
|
103
125
|
onMonthChange,
|
|
104
126
|
defaultCalendarMonth,
|
|
105
|
-
|
|
106
|
-
|
|
127
|
+
rangePosition: rangePositionProps,
|
|
128
|
+
onRangePositionChange,
|
|
107
129
|
calendars,
|
|
108
130
|
components,
|
|
109
131
|
componentsProps,
|
|
@@ -116,7 +138,9 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
116
138
|
dayOfWeekFormatter,
|
|
117
139
|
disableAutoMonthSwitching,
|
|
118
140
|
autoFocus,
|
|
119
|
-
fixedWeekNumber
|
|
141
|
+
fixedWeekNumber,
|
|
142
|
+
disableDragEditing,
|
|
143
|
+
displayWeekNumber
|
|
120
144
|
} = props,
|
|
121
145
|
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
122
146
|
const [value, setValue] = useControlled({
|
|
@@ -125,13 +149,78 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
125
149
|
name: 'DateRangeCalendar',
|
|
126
150
|
state: 'value'
|
|
127
151
|
});
|
|
128
|
-
const [
|
|
129
|
-
controlled:
|
|
152
|
+
const [rangePosition, setRangePosition] = useControlled({
|
|
153
|
+
controlled: rangePositionProps,
|
|
130
154
|
default: 'start',
|
|
131
155
|
name: 'DateRangeCalendar',
|
|
132
|
-
state: '
|
|
156
|
+
state: 'rangePosition'
|
|
157
|
+
});
|
|
158
|
+
const handleDatePositionChange = useEventCallback(position => {
|
|
159
|
+
if (rangePosition !== position) {
|
|
160
|
+
setRangePosition(position);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
const handleSelectedDayChange = useEventCallback((newDate, selectionState, allowRangeFlip = false) => {
|
|
164
|
+
const {
|
|
165
|
+
nextSelection,
|
|
166
|
+
newRange
|
|
167
|
+
} = calculateRangeChange({
|
|
168
|
+
newDate,
|
|
169
|
+
utils,
|
|
170
|
+
range: value,
|
|
171
|
+
rangePosition,
|
|
172
|
+
allowRangeFlip
|
|
173
|
+
});
|
|
174
|
+
setRangePosition(nextSelection);
|
|
175
|
+
onRangePositionChange == null ? void 0 : onRangePositionChange(nextSelection);
|
|
176
|
+
const isFullRangeSelected = rangePosition === 'end' && isRangeValid(utils, newRange);
|
|
177
|
+
setValue(newRange);
|
|
178
|
+
onChange == null ? void 0 : onChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
|
|
179
|
+
});
|
|
180
|
+
const handleDrop = useEventCallback(newDate => {
|
|
181
|
+
handleSelectedDayChange(newDate, undefined, true);
|
|
182
|
+
});
|
|
183
|
+
const shouldDisableDragEditing = disableDragEditing || disabled || readOnly;
|
|
184
|
+
|
|
185
|
+
// Range going for the start of the start day to the end of the end day.
|
|
186
|
+
// This makes sure that `isWithinRange` works with any time in the start and end day.
|
|
187
|
+
const valueDayRange = React.useMemo(() => [value[0] == null || !utils.isValid(value[0]) ? value[0] : utils.startOfDay(value[0]), value[1] == null || !utils.isValid(value[1]) ? value[1] : utils.endOfDay(value[1])], [value, utils]);
|
|
188
|
+
const _useDragRange = useDragRange({
|
|
189
|
+
disableDragEditing: shouldDisableDragEditing,
|
|
190
|
+
onDrop: handleDrop,
|
|
191
|
+
onDatePositionChange: handleDatePositionChange,
|
|
192
|
+
utils,
|
|
193
|
+
dateRange: valueDayRange
|
|
194
|
+
}),
|
|
195
|
+
{
|
|
196
|
+
isDragging,
|
|
197
|
+
rangeDragDay,
|
|
198
|
+
draggingDatePosition
|
|
199
|
+
} = _useDragRange,
|
|
200
|
+
dragEventHandlers = _objectWithoutPropertiesLoose(_useDragRange, _excluded2);
|
|
201
|
+
const ownerState = _extends({}, props, {
|
|
202
|
+
isDragging
|
|
133
203
|
});
|
|
134
|
-
const
|
|
204
|
+
const classes = useUtilityClasses(ownerState);
|
|
205
|
+
const draggingRange = React.useMemo(() => {
|
|
206
|
+
if (!valueDayRange[0] || !valueDayRange[1] || !rangeDragDay) {
|
|
207
|
+
return [null, null];
|
|
208
|
+
}
|
|
209
|
+
const newRange = calculateRangeChange({
|
|
210
|
+
utils,
|
|
211
|
+
range: valueDayRange,
|
|
212
|
+
newDate: rangeDragDay,
|
|
213
|
+
rangePosition,
|
|
214
|
+
allowRangeFlip: true
|
|
215
|
+
}).newRange;
|
|
216
|
+
return newRange[0] !== null && newRange[1] !== null ? [utils.startOfDay(newRange[0]), utils.endOfDay(newRange[1])] : newRange;
|
|
217
|
+
}, [rangePosition, rangeDragDay, utils, valueDayRange]);
|
|
218
|
+
const wrappedShouldDisableDate = React.useMemo(() => {
|
|
219
|
+
if (!shouldDisableDate) {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
return dayToTest => shouldDisableDate(dayToTest, draggingDatePosition || rangePosition);
|
|
223
|
+
}, [shouldDisableDate, rangePosition, draggingDatePosition]);
|
|
135
224
|
const {
|
|
136
225
|
calendarState,
|
|
137
226
|
changeFocusedDay,
|
|
@@ -153,14 +242,14 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
153
242
|
const prevValue = React.useRef(null);
|
|
154
243
|
React.useEffect(() => {
|
|
155
244
|
var _prevValue$current, _prevValue$current2;
|
|
156
|
-
const date =
|
|
245
|
+
const date = rangePosition === 'start' ? value[0] : value[1];
|
|
157
246
|
if (!date || !utils.isValid(date)) {
|
|
158
247
|
return;
|
|
159
248
|
}
|
|
160
|
-
const prevDate =
|
|
249
|
+
const prevDate = rangePosition === 'start' ? (_prevValue$current = prevValue.current) == null ? void 0 : _prevValue$current[0] : (_prevValue$current2 = prevValue.current) == null ? void 0 : _prevValue$current2[1];
|
|
161
250
|
prevValue.current = value;
|
|
162
251
|
|
|
163
|
-
// The current date did not change, this call comes either from a `
|
|
252
|
+
// The current date did not change, this call comes either from a `rangePosition` change or a change in the other date.
|
|
164
253
|
// In both cases, we don't want to change the visible month(s).
|
|
165
254
|
if (disableAutoMonthSwitching && prevDate && utils.isEqual(prevDate, date)) {
|
|
166
255
|
return;
|
|
@@ -169,29 +258,13 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
169
258
|
const currentMonthNumber = utils.getMonth(calendarState.currentMonth);
|
|
170
259
|
const requestedMonthNumber = utils.getMonth(date);
|
|
171
260
|
if (!utils.isSameYear(calendarState.currentMonth, date) || requestedMonthNumber < currentMonthNumber || requestedMonthNumber > currentMonthNumber + displayingMonthRange) {
|
|
172
|
-
const newMonth =
|
|
261
|
+
const newMonth = rangePosition === 'start' ? date :
|
|
173
262
|
// If need to focus end, scroll to the state when "end" is displaying in the last calendar
|
|
174
263
|
utils.addMonths(date, -displayingMonthRange);
|
|
175
264
|
changeMonth(newMonth);
|
|
176
265
|
}
|
|
177
|
-
}, [
|
|
266
|
+
}, [rangePosition, value]); // eslint-disable-line
|
|
178
267
|
|
|
179
|
-
const handleSelectedDayChange = useEventCallback(newDate => {
|
|
180
|
-
const {
|
|
181
|
-
nextSelection,
|
|
182
|
-
newRange
|
|
183
|
-
} = calculateRangeChange({
|
|
184
|
-
newDate,
|
|
185
|
-
utils,
|
|
186
|
-
range: value,
|
|
187
|
-
currentlySelectingRangeEnd: currentDatePosition
|
|
188
|
-
});
|
|
189
|
-
setCurrentDatePosition(nextSelection);
|
|
190
|
-
onCurrentDatePositionChange == null ? void 0 : onCurrentDatePositionChange(nextSelection);
|
|
191
|
-
const isFullRangeSelected = currentDatePosition === 'end' && isRangeValid(utils, newRange);
|
|
192
|
-
setValue(newRange);
|
|
193
|
-
onChange == null ? void 0 : onChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
|
|
194
|
-
});
|
|
195
268
|
const selectNextMonth = React.useCallback(() => {
|
|
196
269
|
changeMonth(utils.getNextMonth(calendarState.currentMonth));
|
|
197
270
|
}, [changeMonth, calendarState.currentMonth, utils]);
|
|
@@ -225,23 +298,19 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
225
298
|
const CalendarTransitionProps = React.useMemo(() => ({
|
|
226
299
|
onMouseLeave: () => setRangePreviewDay(null)
|
|
227
300
|
}), []);
|
|
228
|
-
|
|
229
|
-
// Range going for the start of the start day to the end of the end day.
|
|
230
|
-
// This makes sure that `isWithinRange` works with any time in the start and end day.
|
|
231
|
-
const valueDayRange = React.useMemo(() => [value[0] == null || !utils.isValid(value[0]) ? value[0] : utils.startOfDay(value[0]), value[1] == null || !utils.isValid(value[1]) ? value[1] : utils.endOfDay(value[1])], [value, utils]);
|
|
232
301
|
const previewingRange = calculateRangePreview({
|
|
233
302
|
utils,
|
|
234
303
|
range: valueDayRange,
|
|
235
304
|
newDate: rangePreviewDay,
|
|
236
|
-
|
|
305
|
+
rangePosition
|
|
237
306
|
});
|
|
238
|
-
const
|
|
307
|
+
const handleDayMouseEnter = useEventCallback((event, newPreviewRequest) => {
|
|
239
308
|
if (!isWithinRange(utils, newPreviewRequest, valueDayRange)) {
|
|
240
309
|
setRangePreviewDay(newPreviewRequest);
|
|
241
310
|
} else {
|
|
242
311
|
setRangePreviewDay(null);
|
|
243
312
|
}
|
|
244
|
-
};
|
|
313
|
+
});
|
|
245
314
|
const componentsForDayCalendar = _extends({
|
|
246
315
|
Day: DateRangePickerDay
|
|
247
316
|
}, components);
|
|
@@ -251,17 +320,57 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
251
320
|
const {
|
|
252
321
|
day
|
|
253
322
|
} = dayOwnerState;
|
|
323
|
+
const isSelectedStartDate = isStartOfRange(utils, day, valueDayRange);
|
|
324
|
+
const isSelectedEndDate = isEndOfRange(utils, day, valueDayRange);
|
|
325
|
+
const shouldInitDragging = !shouldDisableDragEditing && valueDayRange[0] && valueDayRange[1];
|
|
326
|
+
const isElementDraggable = shouldInitDragging && (isSelectedStartDate || isSelectedEndDate);
|
|
327
|
+
let datePosition;
|
|
328
|
+
if (isSelectedStartDate) {
|
|
329
|
+
datePosition = 'start';
|
|
330
|
+
} else if (isSelectedEndDate) {
|
|
331
|
+
datePosition = 'end';
|
|
332
|
+
}
|
|
333
|
+
const isStartOfHighlighting = isDragging ? isStartOfRange(utils, day, draggingRange) : isSelectedStartDate;
|
|
334
|
+
const isEndOfHighlighting = isDragging ? isEndOfRange(utils, day, draggingRange) : isSelectedEndDate;
|
|
254
335
|
return _extends({
|
|
255
336
|
isPreviewing: isMobile ? false : isWithinRange(utils, day, previewingRange),
|
|
256
337
|
isStartOfPreviewing: isMobile ? false : isStartOfRange(utils, day, previewingRange),
|
|
257
338
|
isEndOfPreviewing: isMobile ? false : isEndOfRange(utils, day, previewingRange),
|
|
258
|
-
isHighlighting: isWithinRange(utils, day, valueDayRange),
|
|
259
|
-
isStartOfHighlighting
|
|
260
|
-
isEndOfHighlighting: isEndOfRange(utils, day,
|
|
261
|
-
onMouseEnter:
|
|
339
|
+
isHighlighting: isWithinRange(utils, day, isDragging ? draggingRange : valueDayRange),
|
|
340
|
+
isStartOfHighlighting,
|
|
341
|
+
isEndOfHighlighting: isDragging ? isEndOfRange(utils, day, draggingRange) : isSelectedEndDate,
|
|
342
|
+
onMouseEnter: handleDayMouseEnter,
|
|
343
|
+
// apply selected styling to the dragging start or end day
|
|
344
|
+
isVisuallySelected: dayOwnerState.selected || isDragging && (isStartOfHighlighting || isEndOfHighlighting),
|
|
345
|
+
'data-position': datePosition
|
|
346
|
+
}, dragEventHandlers, {
|
|
347
|
+
draggable: isElementDraggable ? true : undefined
|
|
262
348
|
}, (_resolveComponentProp = resolveComponentProps(componentsProps == null ? void 0 : componentsProps.day, dayOwnerState)) != null ? _resolveComponentProp : {});
|
|
263
349
|
}
|
|
264
350
|
});
|
|
351
|
+
const visibleMonths = React.useMemo(() => Array.from({
|
|
352
|
+
length: calendars
|
|
353
|
+
}).map((_, index) => utils.setMonth(calendarState.currentMonth, utils.getMonth(calendarState.currentMonth) + index)), [utils, calendarState.currentMonth, calendars]);
|
|
354
|
+
const focusedMonth = React.useMemo(() => {
|
|
355
|
+
var _visibleMonths$find;
|
|
356
|
+
if (!autoFocus) {
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// The focus priority of the "day" view is as follows:
|
|
361
|
+
// 1. Month of the `start` date
|
|
362
|
+
// 2. Month of the `end` date
|
|
363
|
+
// 3. Month of the current date
|
|
364
|
+
// 4. First visible month
|
|
365
|
+
|
|
366
|
+
if (value[0] != null) {
|
|
367
|
+
return visibleMonths.find(month => utils.isSameMonth(month, value[0]));
|
|
368
|
+
}
|
|
369
|
+
if (value[1] != null) {
|
|
370
|
+
return visibleMonths.find(month => utils.isSameMonth(month, value[1]));
|
|
371
|
+
}
|
|
372
|
+
return (_visibleMonths$find = visibleMonths.find(month => utils.isSameMonth(month, now))) != null ? _visibleMonths$find : visibleMonths[0];
|
|
373
|
+
}, [utils, value, visibleMonths, autoFocus, now]);
|
|
265
374
|
return /*#__PURE__*/_jsxs(DateRangeCalendarRoot, _extends({
|
|
266
375
|
ref: ref,
|
|
267
376
|
className: clsx(className, classes.root),
|
|
@@ -270,60 +379,58 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
|
|
|
270
379
|
children: [/*#__PURE__*/_jsx(Watermark, {
|
|
271
380
|
packageName: "x-date-pickers-pro",
|
|
272
381
|
releaseInfo: releaseInfo
|
|
273
|
-
}),
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}, index);
|
|
326
|
-
})]
|
|
382
|
+
}), visibleMonths.map((month, index) => /*#__PURE__*/_jsxs(DateRangeCalendarMonthContainer, {
|
|
383
|
+
className: classes.monthContainer,
|
|
384
|
+
children: [calendars === 1 ? /*#__PURE__*/_jsx(PickersCalendarHeader, {
|
|
385
|
+
views: ['day'],
|
|
386
|
+
openView: 'day',
|
|
387
|
+
currentMonth: calendarState.currentMonth,
|
|
388
|
+
onMonthChange: (newMonth, direction) => handleChangeMonth({
|
|
389
|
+
newMonth,
|
|
390
|
+
direction
|
|
391
|
+
}),
|
|
392
|
+
minDate: minDateWithDisabled,
|
|
393
|
+
maxDate: maxDateWithDisabled,
|
|
394
|
+
disabled: disabled,
|
|
395
|
+
disablePast: disablePast,
|
|
396
|
+
disableFuture: disableFuture,
|
|
397
|
+
reduceAnimations: reduceAnimations,
|
|
398
|
+
components: components,
|
|
399
|
+
componentsProps: componentsProps
|
|
400
|
+
}) : /*#__PURE__*/_jsx(DateRangeCalendarArrowSwitcher, {
|
|
401
|
+
onGoToPrevious: selectPreviousMonth,
|
|
402
|
+
onGoToNext: selectNextMonth,
|
|
403
|
+
isPreviousHidden: index !== 0,
|
|
404
|
+
isPreviousDisabled: isPreviousMonthDisabled,
|
|
405
|
+
previousLabel: localeText.previousMonth,
|
|
406
|
+
isNextHidden: index !== calendars - 1,
|
|
407
|
+
isNextDisabled: isNextMonthDisabled,
|
|
408
|
+
nextLabel: localeText.nextMonth,
|
|
409
|
+
components: components,
|
|
410
|
+
componentsProps: componentsProps,
|
|
411
|
+
children: utils.format(month, 'monthAndYear')
|
|
412
|
+
}), /*#__PURE__*/_jsx(DayCalendarForRange, _extends({
|
|
413
|
+
className: classes.dayCalendar
|
|
414
|
+
}, calendarState, baseDateValidationProps, commonViewProps, {
|
|
415
|
+
onMonthSwitchingAnimationEnd: onMonthSwitchingAnimationEnd,
|
|
416
|
+
onFocusedDayChange: changeFocusedDay,
|
|
417
|
+
reduceAnimations: reduceAnimations,
|
|
418
|
+
selectedDays: value,
|
|
419
|
+
onSelectedDaysChange: handleSelectedDayChange,
|
|
420
|
+
currentMonth: month,
|
|
421
|
+
TransitionProps: CalendarTransitionProps,
|
|
422
|
+
shouldDisableDate: wrappedShouldDisableDate,
|
|
423
|
+
showDaysOutsideCurrentMonth: showDaysOutsideCurrentMonth,
|
|
424
|
+
dayOfWeekFormatter: dayOfWeekFormatter,
|
|
425
|
+
loading: loading,
|
|
426
|
+
renderLoading: renderLoading,
|
|
427
|
+
components: componentsForDayCalendar,
|
|
428
|
+
componentsProps: componentsPropsForDayCalendar,
|
|
429
|
+
autoFocus: month === focusedMonth,
|
|
430
|
+
fixedWeekNumber: fixedWeekNumber,
|
|
431
|
+
displayWeekNumber: displayWeekNumber
|
|
432
|
+
}), index)]
|
|
433
|
+
}, month.toString()))]
|
|
327
434
|
}));
|
|
328
435
|
});
|
|
329
436
|
process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
|
|
@@ -349,7 +456,6 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
|
|
|
349
456
|
* @default {}
|
|
350
457
|
*/
|
|
351
458
|
componentsProps: PropTypes.object,
|
|
352
|
-
currentDatePosition: PropTypes.oneOf(['end', 'start']),
|
|
353
459
|
/**
|
|
354
460
|
* Formats the day of week displayed in the calendar header.
|
|
355
461
|
* @param {string} day The day of week provided by the adapter's method `getWeekdays`.
|
|
@@ -376,6 +482,11 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
|
|
|
376
482
|
* @default false
|
|
377
483
|
*/
|
|
378
484
|
disabled: PropTypes.bool,
|
|
485
|
+
/**
|
|
486
|
+
* If `true`, editing dates by dragging is disabled.
|
|
487
|
+
* @default false
|
|
488
|
+
*/
|
|
489
|
+
disableDragEditing: PropTypes.bool,
|
|
379
490
|
/**
|
|
380
491
|
* If `true` disable values before the current date for date components, time for time components and both for date time components.
|
|
381
492
|
* @default false
|
|
@@ -422,7 +533,6 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
|
|
|
422
533
|
* @param {PickerSelectionState | undefined} selectionState Indicates if the date range selection is complete.
|
|
423
534
|
*/
|
|
424
535
|
onChange: PropTypes.func,
|
|
425
|
-
onCurrentDatePositionChange: PropTypes.func,
|
|
426
536
|
/**
|
|
427
537
|
* Callback firing on month change @DateIOType.
|
|
428
538
|
* @template TDate
|
|
@@ -430,6 +540,8 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
|
|
|
430
540
|
* @returns {void|Promise} -
|
|
431
541
|
*/
|
|
432
542
|
onMonthChange: PropTypes.func,
|
|
543
|
+
onRangePositionChange: PropTypes.func,
|
|
544
|
+
rangePosition: PropTypes.oneOf(['end', 'start']),
|
|
433
545
|
/**
|
|
434
546
|
* Make picker read only.
|
|
435
547
|
* @default false
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { SxProps } from '@mui/system';
|
|
3
|
+
import { SlotComponentProps } from '@mui/base';
|
|
3
4
|
import { Theme } from '@mui/material/styles';
|
|
4
|
-
import { BaseDateValidationProps, DefaultizedProps, ExportedDayCalendarProps, DayCalendarSlotsComponent, DayCalendarSlotsComponentsProps, PickersArrowSwitcherSlotsComponent, PickersArrowSwitcherSlotsComponentsProps, PickerSelectionState, PickersCalendarHeaderSlotsComponent, PickersCalendarHeaderSlotsComponentsProps } from '@mui/x-date-pickers/internals';
|
|
5
|
-
import { DateRange, DayRangeValidationProps } from '../internal/models';
|
|
5
|
+
import { BaseDateValidationProps, DefaultizedProps, ExportedDayCalendarProps, DayCalendarSlotsComponent, DayCalendarSlotsComponentsProps, PickersArrowSwitcherSlotsComponent, PickersArrowSwitcherSlotsComponentsProps, PickerSelectionState, PickersCalendarHeaderSlotsComponent, PickersCalendarHeaderSlotsComponentsProps, DayCalendarProps } from '@mui/x-date-pickers/internals';
|
|
6
|
+
import { DateRange, RangePositionProps, DayRangeValidationProps } from '../internal/models';
|
|
6
7
|
import { DateRangeCalendarClasses } from './dateRangeCalendarClasses';
|
|
7
|
-
import { DateRangePickerDayProps } from '../DateRangePickerDay';
|
|
8
|
-
export
|
|
8
|
+
import { DateRangePickerDay, DateRangePickerDayProps } from '../DateRangePickerDay';
|
|
9
|
+
export type DateRangePosition = 'start' | 'end';
|
|
9
10
|
export interface DateRangeCalendarSlotsComponent<TDate> extends PickersArrowSwitcherSlotsComponent, Omit<DayCalendarSlotsComponent<TDate>, 'Day'>, PickersCalendarHeaderSlotsComponent {
|
|
10
11
|
/**
|
|
11
12
|
* Custom component for day in range pickers.
|
|
@@ -14,9 +15,13 @@ export interface DateRangeCalendarSlotsComponent<TDate> extends PickersArrowSwit
|
|
|
14
15
|
*/
|
|
15
16
|
Day?: React.ElementType<DateRangePickerDayProps<TDate>>;
|
|
16
17
|
}
|
|
17
|
-
export interface DateRangeCalendarSlotsComponentsProps<TDate> extends PickersArrowSwitcherSlotsComponentsProps, Omit<DayCalendarSlotsComponentsProps<TDate>, '
|
|
18
|
+
export interface DateRangeCalendarSlotsComponentsProps<TDate> extends PickersArrowSwitcherSlotsComponentsProps, Omit<DayCalendarSlotsComponentsProps<TDate>, 'day'>, PickersCalendarHeaderSlotsComponentsProps<TDate> {
|
|
19
|
+
day?: SlotComponentProps<typeof DateRangePickerDay, {}, DayCalendarProps<TDate> & {
|
|
20
|
+
day: TDate;
|
|
21
|
+
selected: boolean;
|
|
22
|
+
}>;
|
|
18
23
|
}
|
|
19
|
-
export interface DateRangeCalendarProps<TDate> extends ExportedDayCalendarProps<TDate>, BaseDateValidationProps<TDate>, DayRangeValidationProps<TDate> {
|
|
24
|
+
export interface DateRangeCalendarProps<TDate> extends ExportedDayCalendarProps<TDate>, BaseDateValidationProps<TDate>, DayRangeValidationProps<TDate>, Partial<RangePositionProps> {
|
|
20
25
|
/**
|
|
21
26
|
* The selected value.
|
|
22
27
|
* Used when the component is controlled.
|
|
@@ -82,13 +87,19 @@ export interface DateRangeCalendarProps<TDate> extends ExportedDayCalendarProps<
|
|
|
82
87
|
* @returns {void|Promise} -
|
|
83
88
|
*/
|
|
84
89
|
onMonthChange?: (month: TDate) => void | Promise<void>;
|
|
85
|
-
currentDatePosition?: DateRangePosition;
|
|
86
|
-
onCurrentDatePositionChange?: (newPosition: DateRangePosition) => void;
|
|
87
90
|
/**
|
|
88
91
|
* The number of calendars to render.
|
|
89
92
|
* @default 2
|
|
90
93
|
*/
|
|
91
94
|
calendars?: 1 | 2 | 3;
|
|
95
|
+
/**
|
|
96
|
+
* If `true`, editing dates by dragging is disabled.
|
|
97
|
+
* @default false
|
|
98
|
+
*/
|
|
99
|
+
disableDragEditing?: boolean;
|
|
100
|
+
}
|
|
101
|
+
export interface DateRangeCalendarOwnerState<TDate> extends DateRangeCalendarProps<TDate> {
|
|
102
|
+
isDragging: boolean;
|
|
92
103
|
}
|
|
93
|
-
export
|
|
94
|
-
export
|
|
104
|
+
export type DateRangeCalendarDefaultizedProps<TDate> = DefaultizedProps<DateRangeCalendarProps<TDate>, 'reduceAnimations' | 'calendars' | 'disableDragEditing' | keyof BaseDateValidationProps<TDate>>;
|
|
105
|
+
export type ExportedDateRangeCalendarProps<TDate> = Omit<DateRangeCalendarProps<TDate>, 'defaultValue' | 'value' | 'onChange' | 'changeView' | 'slideDirection' | 'currentMonth' | 'className' | 'classes' | 'components' | 'componentsProps' | 'rangePosition' | 'onRangePositionChange'>;
|
|
@@ -3,7 +3,9 @@ export interface DateRangeCalendarClasses {
|
|
|
3
3
|
root: string;
|
|
4
4
|
/** Styles applied to the container of a month. */
|
|
5
5
|
monthContainer: string;
|
|
6
|
+
/** Styles applied to the day calendar container when dragging */
|
|
7
|
+
dayDragging: string;
|
|
6
8
|
}
|
|
7
|
-
export
|
|
9
|
+
export type DateRangeCalendarClassKey = keyof DateRangeCalendarClasses;
|
|
8
10
|
export declare const getDateRangeCalendarUtilityClass: (slot: string) => string;
|
|
9
11
|
export declare const dateRangeCalendarClasses: DateRangeCalendarClasses;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { unstable_generateUtilityClass as generateUtilityClass, unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';
|
|
2
2
|
export const getDateRangeCalendarUtilityClass = slot => generateUtilityClass('MuiDateRangeCalendar', slot);
|
|
3
|
-
export const dateRangeCalendarClasses = generateUtilityClasses('MuiDateRangeCalendar', ['root', 'monthContainer']);
|
|
3
|
+
export const dateRangeCalendarClasses = generateUtilityClasses('MuiDateRangeCalendar', ['root', 'monthContainer', 'dayDragging']);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { MuiPickersAdapter } from '@mui/x-date-pickers/internals';
|
|
3
|
+
import { DateRangePosition } from './DateRangeCalendar.types';
|
|
4
|
+
import { DateRange } from '../internal/models';
|
|
5
|
+
interface UseDragRangeParams<TDate> {
|
|
6
|
+
disableDragEditing?: boolean;
|
|
7
|
+
utils: MuiPickersAdapter<TDate>;
|
|
8
|
+
setRangeDragDay: (value: TDate | null) => void;
|
|
9
|
+
setIsDragging: (value: boolean) => void;
|
|
10
|
+
isDragging: boolean;
|
|
11
|
+
onDatePositionChange: (position: DateRangePosition) => void;
|
|
12
|
+
onDrop: (newDate: TDate) => void;
|
|
13
|
+
dateRange: DateRange<TDate>;
|
|
14
|
+
}
|
|
15
|
+
interface UseDragRangeEvents {
|
|
16
|
+
onDragStart?: React.DragEventHandler<HTMLButtonElement>;
|
|
17
|
+
onDragEnter?: React.DragEventHandler<HTMLButtonElement>;
|
|
18
|
+
onDragLeave?: React.DragEventHandler<HTMLButtonElement>;
|
|
19
|
+
onDragOver?: React.DragEventHandler<HTMLButtonElement>;
|
|
20
|
+
onDragEnd?: React.DragEventHandler<HTMLButtonElement>;
|
|
21
|
+
onDrop?: React.DragEventHandler<HTMLButtonElement>;
|
|
22
|
+
onTouchStart?: React.TouchEventHandler<HTMLButtonElement>;
|
|
23
|
+
onTouchMove?: React.TouchEventHandler<HTMLButtonElement>;
|
|
24
|
+
onTouchEnd?: React.TouchEventHandler<HTMLButtonElement>;
|
|
25
|
+
}
|
|
26
|
+
interface UseDragRangeResponse<TDate> extends UseDragRangeEvents {
|
|
27
|
+
isDragging: boolean;
|
|
28
|
+
rangeDragDay: TDate | null;
|
|
29
|
+
draggingDatePosition: DateRangePosition | null;
|
|
30
|
+
}
|
|
31
|
+
export declare const useDragRange: <TDate>({ disableDragEditing, utils, onDatePositionChange, onDrop, dateRange, }: Omit<UseDragRangeParams<TDate>, "isDragging" | "setRangeDragDay" | "setIsDragging">) => UseDragRangeResponse<TDate>;
|
|
32
|
+
export {};
|