@mui/x-date-pickers-pro 5.0.0-alpha.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 +3785 -0
- package/DateRangePicker/DateRangePicker.d.ts +66 -0
- package/DateRangePicker/DateRangePicker.js +519 -0
- package/DateRangePicker/DateRangePickerInput.d.ts +37 -0
- package/DateRangePicker/DateRangePickerInput.js +128 -0
- package/DateRangePicker/DateRangePickerToolbar.d.ts +15 -0
- package/DateRangePicker/DateRangePickerToolbar.js +59 -0
- package/DateRangePicker/DateRangePickerView.d.ts +41 -0
- package/DateRangePicker/DateRangePickerView.js +179 -0
- package/DateRangePicker/DateRangePickerViewDesktop.d.ts +30 -0
- package/DateRangePicker/DateRangePickerViewDesktop.js +154 -0
- package/DateRangePicker/DateRangePickerViewMobile.d.ts +15 -0
- package/DateRangePicker/DateRangePickerViewMobile.js +60 -0
- package/DateRangePicker/date-range-manager.d.ts +14 -0
- package/DateRangePicker/date-range-manager.js +43 -0
- package/DateRangePicker/index.d.ts +3 -0
- package/DateRangePicker/index.js +1 -0
- package/DateRangePicker/package.json +6 -0
- package/DateRangePickerDay/DateRangePickerDay.d.ts +52 -0
- package/DateRangePickerDay/DateRangePickerDay.js +290 -0
- package/DateRangePickerDay/dateRangePickerDayClasses.d.ts +29 -0
- package/DateRangePickerDay/dateRangePickerDayClasses.js +5 -0
- package/DateRangePickerDay/index.d.ts +4 -0
- package/DateRangePickerDay/index.js +2 -0
- package/DateRangePickerDay/package.json +6 -0
- package/DesktopDateRangePicker/DesktopDateRangePicker.d.ts +66 -0
- package/DesktopDateRangePicker/DesktopDateRangePicker.js +485 -0
- package/DesktopDateRangePicker/index.d.ts +2 -0
- package/DesktopDateRangePicker/index.js +1 -0
- package/DesktopDateRangePicker/package.json +6 -0
- package/MobileDateRangePicker/MobileDateRangePicker.d.ts +66 -0
- package/MobileDateRangePicker/MobileDateRangePicker.js +495 -0
- package/MobileDateRangePicker/index.d.ts +2 -0
- package/MobileDateRangePicker/index.js +1 -0
- package/MobileDateRangePicker/package.json +6 -0
- package/README.md +29 -0
- package/StaticDateRangePicker/StaticDateRangePicker.d.ts +69 -0
- package/StaticDateRangePicker/StaticDateRangePicker.js +455 -0
- package/StaticDateRangePicker/index.d.ts +2 -0
- package/StaticDateRangePicker/index.js +1 -0
- package/StaticDateRangePicker/package.json +6 -0
- package/index.d.ts +7 -0
- package/index.js +12 -0
- package/internal/hooks/validation/useDateRangeValidation.d.ts +12 -0
- package/internal/hooks/validation/useDateRangeValidation.js +27 -0
- package/internal/models/dateRange.d.ts +8 -0
- package/internal/models/dateRange.js +1 -0
- package/internal/models/index.d.ts +1 -0
- package/internal/models/index.js +1 -0
- package/internal/utils/date-utils.d.ts +7 -0
- package/internal/utils/date-utils.js +19 -0
- package/internal/utils/releaseInfo.d.ts +1 -0
- package/internal/utils/releaseInfo.js +15 -0
- package/internal/utils/utils.d.ts +1 -0
- package/internal/utils/utils.js +1 -0
- package/legacy/DateRangePicker/DateRangePicker.js +528 -0
- package/legacy/DateRangePicker/DateRangePickerInput.js +141 -0
- package/legacy/DateRangePicker/DateRangePickerToolbar.js +66 -0
- package/legacy/DateRangePicker/DateRangePickerView.js +184 -0
- package/legacy/DateRangePicker/DateRangePickerViewDesktop.js +172 -0
- package/legacy/DateRangePicker/DateRangePickerViewMobile.js +63 -0
- package/legacy/DateRangePicker/date-range-manager.js +51 -0
- package/legacy/DateRangePicker/index.js +1 -0
- package/legacy/DateRangePickerDay/DateRangePickerDay.js +296 -0
- package/legacy/DateRangePickerDay/dateRangePickerDayClasses.js +5 -0
- package/legacy/DateRangePickerDay/index.js +2 -0
- package/legacy/DesktopDateRangePicker/DesktopDateRangePicker.js +494 -0
- package/legacy/DesktopDateRangePicker/index.js +1 -0
- package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +504 -0
- package/legacy/MobileDateRangePicker/index.js +1 -0
- package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +465 -0
- package/legacy/StaticDateRangePicker/index.js +1 -0
- package/legacy/index.js +12 -0
- package/legacy/internal/hooks/validation/useDateRangeValidation.js +33 -0
- package/legacy/internal/models/dateRange.js +1 -0
- package/legacy/internal/models/index.js +1 -0
- package/legacy/internal/utils/date-utils.js +22 -0
- package/legacy/internal/utils/releaseInfo.js +15 -0
- package/legacy/internal/utils/utils.js +1 -0
- package/legacy/themeAugmentation/index.js +3 -0
- package/modern/DateRangePicker/DateRangePicker.js +519 -0
- package/modern/DateRangePicker/DateRangePickerInput.js +124 -0
- package/modern/DateRangePicker/DateRangePickerToolbar.js +59 -0
- package/modern/DateRangePicker/DateRangePickerView.js +179 -0
- package/modern/DateRangePicker/DateRangePickerViewDesktop.js +154 -0
- package/modern/DateRangePicker/DateRangePickerViewMobile.js +60 -0
- package/modern/DateRangePicker/date-range-manager.js +43 -0
- package/modern/DateRangePicker/index.js +1 -0
- package/modern/DateRangePickerDay/DateRangePickerDay.js +290 -0
- package/modern/DateRangePickerDay/dateRangePickerDayClasses.js +5 -0
- package/modern/DateRangePickerDay/index.js +2 -0
- package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +485 -0
- package/modern/DesktopDateRangePicker/index.js +1 -0
- package/modern/MobileDateRangePicker/MobileDateRangePicker.js +495 -0
- package/modern/MobileDateRangePicker/index.js +1 -0
- package/modern/StaticDateRangePicker/StaticDateRangePicker.js +455 -0
- package/modern/StaticDateRangePicker/index.js +1 -0
- package/modern/index.js +12 -0
- package/modern/internal/hooks/validation/useDateRangeValidation.js +27 -0
- package/modern/internal/models/dateRange.js +1 -0
- package/modern/internal/models/index.js +1 -0
- package/modern/internal/utils/date-utils.js +19 -0
- package/modern/internal/utils/releaseInfo.js +15 -0
- package/modern/internal/utils/utils.js +1 -0
- package/modern/themeAugmentation/index.js +3 -0
- package/node/DateRangePicker/DateRangePicker.js +540 -0
- package/node/DateRangePicker/DateRangePickerInput.js +148 -0
- package/node/DateRangePicker/DateRangePickerToolbar.js +79 -0
- package/node/DateRangePicker/DateRangePickerView.js +206 -0
- package/node/DateRangePicker/DateRangePickerViewDesktop.js +175 -0
- package/node/DateRangePicker/DateRangePickerViewMobile.js +80 -0
- package/node/DateRangePicker/date-range-manager.js +52 -0
- package/node/DateRangePicker/index.js +13 -0
- package/node/DateRangePickerDay/DateRangePickerDay.js +315 -0
- package/node/DateRangePickerDay/dateRangePickerDayClasses.js +16 -0
- package/node/DateRangePickerDay/index.js +27 -0
- package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +506 -0
- package/node/DesktopDateRangePicker/index.js +13 -0
- package/node/MobileDateRangePicker/MobileDateRangePicker.js +516 -0
- package/node/MobileDateRangePicker/index.js +13 -0
- package/node/StaticDateRangePicker/StaticDateRangePicker.js +475 -0
- package/node/StaticDateRangePicker/index.js +13 -0
- package/node/index.js +105 -0
- package/node/internal/hooks/validation/useDateRangeValidation.js +40 -0
- package/node/internal/models/dateRange.js +5 -0
- package/node/internal/models/index.js +18 -0
- package/node/internal/utils/date-utils.js +40 -0
- package/node/internal/utils/releaseInfo.js +25 -0
- package/node/internal/utils/utils.js +10 -0
- package/node/themeAugmentation/index.js +44 -0
- package/package.json +77 -0
- package/themeAugmentation/components.d.ts +13 -0
- package/themeAugmentation/index.d.ts +3 -0
- package/themeAugmentation/index.js +3 -0
- package/themeAugmentation/overrides.d.ts +13 -0
- package/themeAugmentation/package.json +6 -0
- package/themeAugmentation/props.d.ts +12 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
const _excluded = ["calendars", "className", "currentlySelectingRangeEnd", "date", "DateInputProps", "defaultCalendarMonth", "disableAutoMonthSwitching", "disableFuture", "disableHighlightToday", "disablePast", "endText", "isMobileKeyboardViewOpen", "maxDate", "minDate", "onDateChange", "onMonthChange", "open", "reduceAnimations", "setCurrentlySelectingRangeEnd", "shouldDisableDate", "showToolbar", "startText", "toggleMobileKeyboardView", "toolbarFormat", "toolbarTitle"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import { Watermark } from '@mui/x-license-pro';
|
|
7
|
+
import { useUtils, WrapperVariantContext, MobileKeyboardInputView, defaultReduceAnimations, useCalendarState } from '@mui/x-date-pickers/internals';
|
|
8
|
+
import { isRangeValid } from '../internal/utils/date-utils';
|
|
9
|
+
import { calculateRangeChange } from './date-range-manager';
|
|
10
|
+
import { DateRangePickerToolbar } from './DateRangePickerToolbar';
|
|
11
|
+
import { DateRangePickerViewMobile } from './DateRangePickerViewMobile';
|
|
12
|
+
import { DateRangePickerInput } from './DateRangePickerInput';
|
|
13
|
+
import { DateRangePickerViewDesktop } from './DateRangePickerViewDesktop';
|
|
14
|
+
import { getReleaseInfo } from '../internal/utils/releaseInfo';
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
const releaseInfo = getReleaseInfo();
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @ignore - internal component.
|
|
21
|
+
*/
|
|
22
|
+
export function DateRangePickerView(props) {
|
|
23
|
+
const {
|
|
24
|
+
calendars,
|
|
25
|
+
className,
|
|
26
|
+
currentlySelectingRangeEnd,
|
|
27
|
+
date,
|
|
28
|
+
DateInputProps,
|
|
29
|
+
defaultCalendarMonth,
|
|
30
|
+
disableAutoMonthSwitching = false,
|
|
31
|
+
disableFuture,
|
|
32
|
+
disableHighlightToday,
|
|
33
|
+
disablePast,
|
|
34
|
+
endText,
|
|
35
|
+
isMobileKeyboardViewOpen,
|
|
36
|
+
maxDate,
|
|
37
|
+
minDate,
|
|
38
|
+
onDateChange,
|
|
39
|
+
onMonthChange,
|
|
40
|
+
open,
|
|
41
|
+
reduceAnimations = defaultReduceAnimations,
|
|
42
|
+
setCurrentlySelectingRangeEnd,
|
|
43
|
+
shouldDisableDate,
|
|
44
|
+
showToolbar,
|
|
45
|
+
startText,
|
|
46
|
+
toggleMobileKeyboardView,
|
|
47
|
+
toolbarFormat,
|
|
48
|
+
toolbarTitle
|
|
49
|
+
} = props,
|
|
50
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
51
|
+
|
|
52
|
+
const utils = useUtils();
|
|
53
|
+
const wrapperVariant = React.useContext(WrapperVariantContext);
|
|
54
|
+
const [start, end] = date;
|
|
55
|
+
const {
|
|
56
|
+
changeMonth,
|
|
57
|
+
calendarState,
|
|
58
|
+
isDateDisabled,
|
|
59
|
+
onMonthSwitchingAnimationEnd,
|
|
60
|
+
changeFocusedDay
|
|
61
|
+
} = useCalendarState({
|
|
62
|
+
date: start || end,
|
|
63
|
+
defaultCalendarMonth,
|
|
64
|
+
disableFuture,
|
|
65
|
+
disablePast,
|
|
66
|
+
disableSwitchToMonthOnDayFocus: true,
|
|
67
|
+
maxDate,
|
|
68
|
+
minDate,
|
|
69
|
+
onMonthChange,
|
|
70
|
+
reduceAnimations,
|
|
71
|
+
shouldDisableDate
|
|
72
|
+
});
|
|
73
|
+
const toShowToolbar = showToolbar ?? wrapperVariant !== 'desktop';
|
|
74
|
+
|
|
75
|
+
const scrollToDayIfNeeded = day => {
|
|
76
|
+
if (!day || !utils.isValid(day) || isDateDisabled(day)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const currentlySelectedDate = currentlySelectingRangeEnd === 'start' ? start : end;
|
|
81
|
+
|
|
82
|
+
if (currentlySelectedDate === null) {
|
|
83
|
+
// do not scroll if one of ages is not selected
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const displayingMonthRange = wrapperVariant === 'mobile' ? 0 : calendars - 1;
|
|
88
|
+
const currentMonthNumber = utils.getMonth(calendarState.currentMonth);
|
|
89
|
+
const requestedMonthNumber = utils.getMonth(day);
|
|
90
|
+
|
|
91
|
+
if (!utils.isSameYear(calendarState.currentMonth, day) || requestedMonthNumber < currentMonthNumber || requestedMonthNumber > currentMonthNumber + displayingMonthRange) {
|
|
92
|
+
const newMonth = currentlySelectingRangeEnd === 'start' ? currentlySelectedDate : // If need to focus end, scroll to the state when "end" is displaying in the last calendar
|
|
93
|
+
utils.addMonths(currentlySelectedDate, -displayingMonthRange);
|
|
94
|
+
changeMonth(newMonth);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
React.useEffect(() => {
|
|
99
|
+
if (disableAutoMonthSwitching || !open) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
scrollToDayIfNeeded(currentlySelectingRangeEnd === 'start' ? start : end);
|
|
104
|
+
}, [currentlySelectingRangeEnd, date]); // eslint-disable-line
|
|
105
|
+
|
|
106
|
+
const handleChange = React.useCallback(newDate => {
|
|
107
|
+
const {
|
|
108
|
+
nextSelection,
|
|
109
|
+
newRange
|
|
110
|
+
} = calculateRangeChange({
|
|
111
|
+
newDate,
|
|
112
|
+
utils,
|
|
113
|
+
range: date,
|
|
114
|
+
currentlySelectingRangeEnd
|
|
115
|
+
});
|
|
116
|
+
setCurrentlySelectingRangeEnd(nextSelection);
|
|
117
|
+
const isFullRangeSelected = currentlySelectingRangeEnd === 'end' && isRangeValid(utils, newRange);
|
|
118
|
+
onDateChange(newRange, wrapperVariant, isFullRangeSelected ? 'finish' : 'partial');
|
|
119
|
+
}, [currentlySelectingRangeEnd, date, onDateChange, setCurrentlySelectingRangeEnd, utils, wrapperVariant]);
|
|
120
|
+
|
|
121
|
+
const renderView = () => {
|
|
122
|
+
const sharedCalendarProps = _extends({
|
|
123
|
+
date,
|
|
124
|
+
isDateDisabled,
|
|
125
|
+
changeFocusedDay,
|
|
126
|
+
onChange: handleChange,
|
|
127
|
+
reduceAnimations,
|
|
128
|
+
disableHighlightToday,
|
|
129
|
+
onMonthSwitchingAnimationEnd,
|
|
130
|
+
changeMonth,
|
|
131
|
+
currentlySelectingRangeEnd,
|
|
132
|
+
disableFuture,
|
|
133
|
+
disablePast,
|
|
134
|
+
minDate,
|
|
135
|
+
maxDate
|
|
136
|
+
}, calendarState, other);
|
|
137
|
+
|
|
138
|
+
switch (wrapperVariant) {
|
|
139
|
+
case 'desktop':
|
|
140
|
+
{
|
|
141
|
+
return /*#__PURE__*/_jsx(DateRangePickerViewDesktop, _extends({
|
|
142
|
+
calendars: calendars
|
|
143
|
+
}, sharedCalendarProps));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
default:
|
|
147
|
+
{
|
|
148
|
+
return /*#__PURE__*/_jsx(DateRangePickerViewMobile, _extends({}, sharedCalendarProps));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
154
|
+
className: className,
|
|
155
|
+
children: [/*#__PURE__*/_jsx(Watermark, {
|
|
156
|
+
packageName: "x-date-pickers-pro",
|
|
157
|
+
releaseInfo: releaseInfo
|
|
158
|
+
}), toShowToolbar && /*#__PURE__*/_jsx(DateRangePickerToolbar, {
|
|
159
|
+
date: date,
|
|
160
|
+
isMobileKeyboardViewOpen: isMobileKeyboardViewOpen,
|
|
161
|
+
toggleMobileKeyboardView: toggleMobileKeyboardView,
|
|
162
|
+
currentlySelectingRangeEnd: currentlySelectingRangeEnd,
|
|
163
|
+
setCurrentlySelectingRangeEnd: setCurrentlySelectingRangeEnd,
|
|
164
|
+
startText: startText,
|
|
165
|
+
endText: endText,
|
|
166
|
+
toolbarTitle: toolbarTitle,
|
|
167
|
+
toolbarFormat: toolbarFormat
|
|
168
|
+
}), isMobileKeyboardViewOpen ? /*#__PURE__*/_jsx(MobileKeyboardInputView, {
|
|
169
|
+
children: /*#__PURE__*/_jsx(DateRangePickerInput, _extends({
|
|
170
|
+
disableOpenPicker: true,
|
|
171
|
+
ignoreInvalidInputs: true
|
|
172
|
+
}, DateInputProps))
|
|
173
|
+
}) : renderView()]
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
process.env.NODE_ENV !== "production" ? DateRangePickerView.propTypes = {
|
|
177
|
+
calendars: PropTypes.oneOf([1, 2, 3]),
|
|
178
|
+
disableAutoMonthSwitching: PropTypes.bool
|
|
179
|
+
} : void 0;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
const _excluded = ["calendars", "changeMonth", "components", "componentsProps", "currentlySelectingRangeEnd", "currentMonth", "date", "disableFuture", "disablePast", "leftArrowButtonText", "maxDate", "minDate", "onChange", "renderDay", "rightArrowButtonText"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { styled } from '@mui/material/styles';
|
|
6
|
+
import { useDefaultDates, useUtils, PickersArrowSwitcher, usePreviousMonthDisabled, useNextMonthDisabled, DayPicker } from '@mui/x-date-pickers/internals';
|
|
7
|
+
import { calculateRangePreview } from './date-range-manager';
|
|
8
|
+
import { DateRangePickerDay } from '../DateRangePickerDay';
|
|
9
|
+
import { isWithinRange, isStartOfRange, isEndOfRange } from '../internal/utils/date-utils';
|
|
10
|
+
import { doNothing } from '../internal/utils/utils';
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { createElement as _createElement } from "react";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
const DateRangePickerViewDesktopRoot = styled('div')({
|
|
15
|
+
display: 'flex',
|
|
16
|
+
flexDirection: 'row'
|
|
17
|
+
});
|
|
18
|
+
const DateRangePickerViewDesktopContainer = styled('div')(({
|
|
19
|
+
theme
|
|
20
|
+
}) => ({
|
|
21
|
+
'&:not(:last-of-type)': {
|
|
22
|
+
borderRight: `2px solid ${theme.palette.divider}`
|
|
23
|
+
}
|
|
24
|
+
}));
|
|
25
|
+
const DateRangePickerViewDesktopCalendar = styled(DayPicker)({
|
|
26
|
+
minWidth: 312,
|
|
27
|
+
minHeight: 288
|
|
28
|
+
});
|
|
29
|
+
const DateRangePickerViewDesktopArrowSwitcher = styled(PickersArrowSwitcher)({
|
|
30
|
+
padding: '16px 16px 8px 16px',
|
|
31
|
+
display: 'flex',
|
|
32
|
+
alignItems: 'center',
|
|
33
|
+
justifyContent: 'space-between'
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
function getCalendarsArray(calendars) {
|
|
37
|
+
switch (calendars) {
|
|
38
|
+
case 1:
|
|
39
|
+
return [0];
|
|
40
|
+
|
|
41
|
+
case 2:
|
|
42
|
+
return [0, 0];
|
|
43
|
+
|
|
44
|
+
case 3:
|
|
45
|
+
return [0, 0, 0];
|
|
46
|
+
// this will not work in IE11, but allows to support any amount of calendars
|
|
47
|
+
|
|
48
|
+
default:
|
|
49
|
+
return new Array(calendars).fill(0);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @ignore - internal component.
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
export function DateRangePickerViewDesktop(props) {
|
|
58
|
+
const {
|
|
59
|
+
calendars,
|
|
60
|
+
changeMonth,
|
|
61
|
+
components,
|
|
62
|
+
componentsProps,
|
|
63
|
+
currentlySelectingRangeEnd,
|
|
64
|
+
currentMonth,
|
|
65
|
+
date,
|
|
66
|
+
disableFuture,
|
|
67
|
+
disablePast,
|
|
68
|
+
leftArrowButtonText = 'Previous month',
|
|
69
|
+
maxDate: maxDateProp,
|
|
70
|
+
minDate: minDateProp,
|
|
71
|
+
onChange,
|
|
72
|
+
renderDay = (_, dateRangeProps) => /*#__PURE__*/_jsx(DateRangePickerDay, _extends({}, dateRangeProps)),
|
|
73
|
+
rightArrowButtonText = 'Next month'
|
|
74
|
+
} = props,
|
|
75
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
76
|
+
|
|
77
|
+
const utils = useUtils();
|
|
78
|
+
const defaultDates = useDefaultDates();
|
|
79
|
+
const minDate = minDateProp ?? defaultDates.minDate;
|
|
80
|
+
const maxDate = maxDateProp ?? defaultDates.maxDate;
|
|
81
|
+
const [rangePreviewDay, setRangePreviewDay] = React.useState(null);
|
|
82
|
+
const isNextMonthDisabled = useNextMonthDisabled(currentMonth, {
|
|
83
|
+
disableFuture,
|
|
84
|
+
maxDate
|
|
85
|
+
});
|
|
86
|
+
const isPreviousMonthDisabled = usePreviousMonthDisabled(currentMonth, {
|
|
87
|
+
disablePast,
|
|
88
|
+
minDate
|
|
89
|
+
});
|
|
90
|
+
const previewingRange = calculateRangePreview({
|
|
91
|
+
utils,
|
|
92
|
+
range: date,
|
|
93
|
+
newDate: rangePreviewDay,
|
|
94
|
+
currentlySelectingRangeEnd
|
|
95
|
+
});
|
|
96
|
+
const handleDayChange = React.useCallback(day => {
|
|
97
|
+
setRangePreviewDay(null);
|
|
98
|
+
onChange(day);
|
|
99
|
+
}, [onChange]);
|
|
100
|
+
|
|
101
|
+
const handlePreviewDayChange = newPreviewRequest => {
|
|
102
|
+
if (!isWithinRange(utils, newPreviewRequest, date)) {
|
|
103
|
+
setRangePreviewDay(newPreviewRequest);
|
|
104
|
+
} else {
|
|
105
|
+
setRangePreviewDay(null);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const CalendarTransitionProps = React.useMemo(() => ({
|
|
110
|
+
onMouseLeave: () => setRangePreviewDay(null)
|
|
111
|
+
}), []);
|
|
112
|
+
const selectNextMonth = React.useCallback(() => {
|
|
113
|
+
changeMonth(utils.getNextMonth(currentMonth));
|
|
114
|
+
}, [changeMonth, currentMonth, utils]);
|
|
115
|
+
const selectPreviousMonth = React.useCallback(() => {
|
|
116
|
+
changeMonth(utils.getPreviousMonth(currentMonth));
|
|
117
|
+
}, [changeMonth, currentMonth, utils]);
|
|
118
|
+
return /*#__PURE__*/_jsx(DateRangePickerViewDesktopRoot, {
|
|
119
|
+
children: getCalendarsArray(calendars).map((_, index) => {
|
|
120
|
+
const monthOnIteration = utils.setMonth(currentMonth, utils.getMonth(currentMonth) + index);
|
|
121
|
+
return /*#__PURE__*/_jsxs(DateRangePickerViewDesktopContainer, {
|
|
122
|
+
children: [/*#__PURE__*/_jsx(DateRangePickerViewDesktopArrowSwitcher, {
|
|
123
|
+
onLeftClick: selectPreviousMonth,
|
|
124
|
+
onRightClick: selectNextMonth,
|
|
125
|
+
isLeftHidden: index !== 0,
|
|
126
|
+
isRightHidden: index !== calendars - 1,
|
|
127
|
+
isLeftDisabled: isPreviousMonthDisabled,
|
|
128
|
+
isRightDisabled: isNextMonthDisabled,
|
|
129
|
+
leftArrowButtonText: leftArrowButtonText,
|
|
130
|
+
components: components,
|
|
131
|
+
componentsProps: componentsProps,
|
|
132
|
+
rightArrowButtonText: rightArrowButtonText,
|
|
133
|
+
children: utils.format(monthOnIteration, 'monthAndYear')
|
|
134
|
+
}), /*#__PURE__*/_createElement(DateRangePickerViewDesktopCalendar, _extends({}, other, {
|
|
135
|
+
key: index,
|
|
136
|
+
date: date,
|
|
137
|
+
onFocusedDayChange: doNothing,
|
|
138
|
+
onChange: handleDayChange,
|
|
139
|
+
currentMonth: monthOnIteration,
|
|
140
|
+
TransitionProps: CalendarTransitionProps,
|
|
141
|
+
renderDay: (day, __, DayProps) => renderDay(day, _extends({
|
|
142
|
+
isPreviewing: isWithinRange(utils, day, previewingRange),
|
|
143
|
+
isStartOfPreviewing: isStartOfRange(utils, day, previewingRange),
|
|
144
|
+
isEndOfPreviewing: isEndOfRange(utils, day, previewingRange),
|
|
145
|
+
isHighlighting: isWithinRange(utils, day, date),
|
|
146
|
+
isStartOfHighlighting: isStartOfRange(utils, day, date),
|
|
147
|
+
isEndOfHighlighting: isEndOfRange(utils, day, date),
|
|
148
|
+
onMouseEnter: () => handlePreviewDayChange(day)
|
|
149
|
+
}, DayProps))
|
|
150
|
+
}))]
|
|
151
|
+
}, index);
|
|
152
|
+
})
|
|
153
|
+
});
|
|
154
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
const _excluded = ["changeMonth", "components", "componentsProps", "date", "leftArrowButtonText", "maxDate", "minDate", "onChange", "renderDay", "rightArrowButtonText"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { PickersCalendarHeader, useDefaultDates, useUtils, DayPicker } from '@mui/x-date-pickers/internals';
|
|
6
|
+
import { doNothing } from '../internal/utils/utils';
|
|
7
|
+
import { DateRangePickerDay } from '../DateRangePickerDay';
|
|
8
|
+
import { isWithinRange, isStartOfRange, isEndOfRange } from '../internal/utils/date-utils';
|
|
9
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
const onlyDayView = ['day'];
|
|
12
|
+
/**
|
|
13
|
+
* @ignore - internal component.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export function DateRangePickerViewMobile(props) {
|
|
17
|
+
const {
|
|
18
|
+
changeMonth,
|
|
19
|
+
components,
|
|
20
|
+
componentsProps,
|
|
21
|
+
date,
|
|
22
|
+
leftArrowButtonText,
|
|
23
|
+
maxDate: maxDateProp,
|
|
24
|
+
minDate: minDateProp,
|
|
25
|
+
onChange,
|
|
26
|
+
renderDay = (_, dayProps) => /*#__PURE__*/_jsx(DateRangePickerDay, _extends({}, dayProps)),
|
|
27
|
+
rightArrowButtonText
|
|
28
|
+
} = props,
|
|
29
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
30
|
+
|
|
31
|
+
const utils = useUtils();
|
|
32
|
+
const defaultDates = useDefaultDates();
|
|
33
|
+
const minDate = minDateProp ?? defaultDates.minDate;
|
|
34
|
+
const maxDate = maxDateProp ?? defaultDates.maxDate;
|
|
35
|
+
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
36
|
+
children: [/*#__PURE__*/_jsx(PickersCalendarHeader, _extends({
|
|
37
|
+
components: components,
|
|
38
|
+
componentsProps: componentsProps,
|
|
39
|
+
leftArrowButtonText: leftArrowButtonText,
|
|
40
|
+
maxDate: maxDate,
|
|
41
|
+
minDate: minDate,
|
|
42
|
+
onMonthChange: changeMonth,
|
|
43
|
+
openView: "day",
|
|
44
|
+
rightArrowButtonText: rightArrowButtonText,
|
|
45
|
+
views: onlyDayView
|
|
46
|
+
}, other)), /*#__PURE__*/_jsx(DayPicker, _extends({}, other, {
|
|
47
|
+
date: date,
|
|
48
|
+
onChange: onChange,
|
|
49
|
+
onFocusedDayChange: doNothing,
|
|
50
|
+
renderDay: (day, _, DayProps) => renderDay(day, _extends({
|
|
51
|
+
isPreviewing: false,
|
|
52
|
+
isStartOfPreviewing: false,
|
|
53
|
+
isEndOfPreviewing: false,
|
|
54
|
+
isHighlighting: isWithinRange(utils, day, date),
|
|
55
|
+
isStartOfHighlighting: isStartOfRange(utils, day, date),
|
|
56
|
+
isEndOfHighlighting: isEndOfRange(utils, day, date)
|
|
57
|
+
}, DayProps))
|
|
58
|
+
}))]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export function calculateRangeChange({
|
|
2
|
+
utils,
|
|
3
|
+
range,
|
|
4
|
+
newDate: selectedDate,
|
|
5
|
+
currentlySelectingRangeEnd
|
|
6
|
+
}) {
|
|
7
|
+
const [start, end] = range;
|
|
8
|
+
|
|
9
|
+
if (currentlySelectingRangeEnd === 'start') {
|
|
10
|
+
return Boolean(end) && utils.isAfter(selectedDate, end) ? {
|
|
11
|
+
nextSelection: 'end',
|
|
12
|
+
newRange: [selectedDate, null]
|
|
13
|
+
} : {
|
|
14
|
+
nextSelection: 'end',
|
|
15
|
+
newRange: [selectedDate, end]
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return Boolean(start) && utils.isBefore(selectedDate, start) ? {
|
|
20
|
+
nextSelection: 'end',
|
|
21
|
+
newRange: [selectedDate, null]
|
|
22
|
+
} : {
|
|
23
|
+
nextSelection: 'start',
|
|
24
|
+
newRange: [start, selectedDate]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function calculateRangePreview(options) {
|
|
28
|
+
if (!options.newDate) {
|
|
29
|
+
return [null, null];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const [start, end] = options.range;
|
|
33
|
+
const {
|
|
34
|
+
newRange
|
|
35
|
+
} = calculateRangeChange(options);
|
|
36
|
+
|
|
37
|
+
if (!start || !end) {
|
|
38
|
+
return newRange;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const [previewStart, previewEnd] = newRange;
|
|
42
|
+
return options.currentlySelectingRangeEnd === 'end' ? [end, previewEnd] : [previewStart, start];
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DateRangePicker } from './DateRangePicker';
|