rsuite 5.22.0 → 5.22.1
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 +6 -0
- package/cjs/Calendar/Calendar.js +1 -1
- package/cjs/Calendar/CalendarContainer.d.ts +2 -2
- package/cjs/Calendar/CalendarContainer.js +11 -11
- package/cjs/Calendar/MonthDropdownItem.js +1 -1
- package/cjs/Calendar/TimeDropdown.js +1 -1
- package/cjs/Calendar/types.d.ts +2 -2
- package/cjs/DatePicker/DatePicker.js +4 -4
- package/cjs/DateRangePicker/Calendar.d.ts +2 -2
- package/cjs/DateRangePicker/Calendar.js +18 -13
- package/cjs/DateRangePicker/DateRangePicker.js +86 -60
- package/cjs/DateRangePicker/utils.d.ts +1 -1
- package/cjs/DateRangePicker/utils.js +11 -6
- package/cjs/utils/dateUtils.d.ts +16 -0
- package/cjs/utils/dateUtils.js +62 -8
- package/dist/rsuite.js +20 -9
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Calendar/Calendar.js +1 -1
- package/esm/Calendar/CalendarContainer.d.ts +2 -2
- package/esm/Calendar/CalendarContainer.js +11 -11
- package/esm/Calendar/MonthDropdownItem.js +1 -1
- package/esm/Calendar/TimeDropdown.js +1 -1
- package/esm/Calendar/types.d.ts +2 -2
- package/esm/DatePicker/DatePicker.js +4 -4
- package/esm/DateRangePicker/Calendar.d.ts +2 -2
- package/esm/DateRangePicker/Calendar.js +18 -13
- package/esm/DateRangePicker/DateRangePicker.js +86 -58
- package/esm/DateRangePicker/utils.d.ts +1 -1
- package/esm/DateRangePicker/utils.js +11 -6
- package/esm/utils/dateUtils.d.ts +16 -0
- package/esm/utils/dateUtils.js +47 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [5.22.1](https://github.com/rsuite/rsuite/compare/v5.22.0...v5.22.1) (2022-11-11)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
- **DateRangePicker:** fix time on calendar changing with date change ([#2884](https://github.com/rsuite/rsuite/issues/2884)) ([77529af](https://github.com/rsuite/rsuite/commit/77529af661eac3abec994f146c3c7262a85f2009))
|
|
6
|
+
|
|
1
7
|
# [5.22.0](https://github.com/rsuite/rsuite/compare/v5.21.0...v5.22.0) (2022-11-03)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
package/cjs/Calendar/Calendar.js
CHANGED
|
@@ -100,7 +100,7 @@ var CalendarPanel = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
100
100
|
renderCell: customRenderCell,
|
|
101
101
|
onMoveForward: handleChange,
|
|
102
102
|
onMoveBackward: handleChange,
|
|
103
|
-
|
|
103
|
+
onChangeMonth: handleChange,
|
|
104
104
|
onSelect: handleSelect
|
|
105
105
|
}));
|
|
106
106
|
});
|
|
@@ -39,9 +39,9 @@ export interface CalendarProps extends WithAsProps, Omit<HTMLAttributes<HTMLDivE
|
|
|
39
39
|
/** Custom locale */
|
|
40
40
|
locale: CalendarLocale;
|
|
41
41
|
/** Callback after the date has changed */
|
|
42
|
-
|
|
42
|
+
onChangeMonth?: (nextPageDate: Date, event: React.MouseEvent) => void;
|
|
43
43
|
/** Callback after the time has changed */
|
|
44
|
-
|
|
44
|
+
onChangeTime?: (nextPageTime: Date, event: React.MouseEvent) => void;
|
|
45
45
|
/** Callback after mouse enter other date cell */
|
|
46
46
|
onMouseMove?: (date: Date) => void;
|
|
47
47
|
/** Switch to the callback triggered after the previous month. */
|
|
@@ -53,8 +53,8 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
53
53
|
isoWeek = _props$isoWeek === void 0 ? false : _props$isoWeek,
|
|
54
54
|
limitEndYear = props.limitEndYear,
|
|
55
55
|
locale = props.locale,
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
onChangeMonth = props.onChangeMonth,
|
|
57
|
+
onChangeTime = props.onChangeTime,
|
|
58
58
|
onMouseMove = props.onMouseMove,
|
|
59
59
|
onMoveBackward = props.onMoveBackward,
|
|
60
60
|
onMoveForward = props.onMoveForward,
|
|
@@ -69,7 +69,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
69
69
|
showMeridian = props.showMeridian,
|
|
70
70
|
showWeekNumbers = props.showWeekNumbers,
|
|
71
71
|
inline = props.inline,
|
|
72
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "inSameMonth", "isoWeek", "limitEndYear", "locale", "
|
|
72
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "inSameMonth", "isoWeek", "limitEndYear", "locale", "onChangeMonth", "onChangeTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
|
|
73
73
|
|
|
74
74
|
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
75
75
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
@@ -141,10 +141,10 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
141
141
|
'show-week-numbers': showWeekNumbers
|
|
142
142
|
}));
|
|
143
143
|
var timeDropdownProps = (0, _pick.default)(rest, _dateUtils.calendarOnlyProps);
|
|
144
|
-
var
|
|
144
|
+
var handleChangeMonth = (0, _react.useCallback)(function (date, event) {
|
|
145
145
|
reset();
|
|
146
|
-
|
|
147
|
-
}, [
|
|
146
|
+
onChangeMonth === null || onChangeMonth === void 0 ? void 0 : onChangeMonth(date, event);
|
|
147
|
+
}, [onChangeMonth, reset]);
|
|
148
148
|
var contextValue = (0, _react.useMemo)(function () {
|
|
149
149
|
return {
|
|
150
150
|
date: calendarDate,
|
|
@@ -155,15 +155,15 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
155
155
|
inSameMonth: inSameMonth !== null && inSameMonth !== void 0 ? inSameMonth : inSameThisMonthDate,
|
|
156
156
|
isoWeek: isoWeek,
|
|
157
157
|
locale: locale,
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
onChangeMonth: handleChangeMonth,
|
|
159
|
+
onChangeTime: onChangeTime,
|
|
160
160
|
onMouseMove: onMouseMove,
|
|
161
161
|
onSelect: onSelect,
|
|
162
162
|
renderCell: renderCell,
|
|
163
163
|
showWeekNumbers: showWeekNumbers,
|
|
164
164
|
inline: inline
|
|
165
165
|
};
|
|
166
|
-
}, [calendarDate, dateRange, format,
|
|
166
|
+
}, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameMonth, inSameThisMonthDate, inline, isDisabledDate, isoWeek, locale, onChangeTime, onMouseMove, onSelect, renderCell, showWeekNumbers]);
|
|
167
167
|
return /*#__PURE__*/_react.default.createElement(_CalendarContext.CalendarProvider, {
|
|
168
168
|
value: contextValue
|
|
169
169
|
}, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, (0, _dateUtils.omitHideDisabledProps)(rest), {
|
|
@@ -214,8 +214,8 @@ CalendarContainer.propTypes = {
|
|
|
214
214
|
isoWeek: _propTypes.default.bool,
|
|
215
215
|
limitEndYear: _propTypes.default.number,
|
|
216
216
|
locale: _propTypes.default.object,
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
onChangeMonth: _propTypes.default.func,
|
|
218
|
+
onChangeTime: _propTypes.default.func,
|
|
219
219
|
onMoveBackward: _propTypes.default.func,
|
|
220
220
|
onMoveForward: _propTypes.default.func,
|
|
221
221
|
onSelect: _propTypes.default.func,
|
|
@@ -36,7 +36,7 @@ var MonthDropdownItem = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
36
36
|
|
|
37
37
|
var _useCalendarContext = (0, _CalendarContext.useCalendarContext)(),
|
|
38
38
|
date = _useCalendarContext.date,
|
|
39
|
-
onSelect = _useCalendarContext.
|
|
39
|
+
onSelect = _useCalendarContext.onChangeMonth;
|
|
40
40
|
|
|
41
41
|
var handleClick = (0, _react.useCallback)(function (event) {
|
|
42
42
|
if (disabled) {
|
|
@@ -125,7 +125,7 @@ var TimeDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
125
125
|
locale = _useCalendarContext.locale,
|
|
126
126
|
format = _useCalendarContext.format,
|
|
127
127
|
date = _useCalendarContext.date,
|
|
128
|
-
onSelect = _useCalendarContext.
|
|
128
|
+
onSelect = _useCalendarContext.onChangeTime;
|
|
129
129
|
|
|
130
130
|
var rowRef = (0, _react.useRef)(null);
|
|
131
131
|
(0, _react.useEffect)(function () {
|
package/cjs/Calendar/types.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ export interface CalendarInnerContextValue {
|
|
|
8
8
|
hoverRangeValue?: [Date, Date];
|
|
9
9
|
inSameMonth?: (date: Date) => boolean;
|
|
10
10
|
isoWeek: boolean;
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
onChangeMonth?: (nextPageDate: Date, event: React.MouseEvent) => void;
|
|
12
|
+
onChangeTime?: (nextPageTime: Date, event: React.MouseEvent) => void;
|
|
13
13
|
onMouseMove?: (date: Date) => void;
|
|
14
14
|
onSelect?: (date: Date, event: React.MouseEvent) => void;
|
|
15
15
|
renderCell?: (date: Date) => React.ReactNode;
|
|
@@ -158,7 +158,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
158
158
|
* A callback triggered when the time on the calendar changes.
|
|
159
159
|
*/
|
|
160
160
|
|
|
161
|
-
var
|
|
161
|
+
var handleChangeTime = (0, _react.useCallback)(function (nextPageTime) {
|
|
162
162
|
setCalendarDate(nextPageTime);
|
|
163
163
|
handleDateChange(nextPageTime);
|
|
164
164
|
}, [handleDateChange, setCalendarDate]);
|
|
@@ -259,7 +259,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
259
259
|
* A callback triggered when the date on the calendar changes.
|
|
260
260
|
*/
|
|
261
261
|
|
|
262
|
-
var
|
|
262
|
+
var handleChangeMonth = (0, _react.useCallback)(function (nextPageDate, event) {
|
|
263
263
|
setCalendarDate(nextPageDate);
|
|
264
264
|
handleDateChange(nextPageDate); // Show only the calendar month panel. formatStr = 'yyyy-MM'
|
|
265
265
|
|
|
@@ -364,8 +364,8 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
364
364
|
onSelect: handleSelect,
|
|
365
365
|
onToggleMonthDropdown: onToggleMonthDropdown,
|
|
366
366
|
onToggleTimeDropdown: onToggleTimeDropdown,
|
|
367
|
-
|
|
368
|
-
|
|
367
|
+
onChangeMonth: handleChangeMonth,
|
|
368
|
+
onChangeTime: handleChangeTime,
|
|
369
369
|
onToggleMeridian: handleToggleMeridian
|
|
370
370
|
}));
|
|
371
371
|
|
|
@@ -14,11 +14,11 @@ export interface CalendarProps extends WithAsProps, Omit<CalendarCoreProps, Omit
|
|
|
14
14
|
isoWeek?: boolean;
|
|
15
15
|
limitEndYear?: number;
|
|
16
16
|
locale?: DatePickerLocale;
|
|
17
|
-
|
|
17
|
+
onChangeCalendarMonth?: (index: number, date: Date) => void;
|
|
18
18
|
onChangeCalendarTime?: (index: number, date: Date) => void;
|
|
19
19
|
onToggleMeridian: (index: number, event: React.MouseEvent) => void;
|
|
20
|
+
onSelect?: (index: number, date: Date, event: React.SyntheticEvent) => void;
|
|
20
21
|
onMouseMove?: (date: Date) => void;
|
|
21
|
-
onSelect?: (date: Date, event: React.SyntheticEvent) => void;
|
|
22
22
|
showWeekNumbers?: boolean;
|
|
23
23
|
value?: [] | [Date] | [Date, Date];
|
|
24
24
|
}
|
|
@@ -32,22 +32,26 @@ var Calendar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
32
32
|
_props$index = props.index,
|
|
33
33
|
index = _props$index === void 0 ? 0 : _props$index,
|
|
34
34
|
limitEndYear = props.limitEndYear,
|
|
35
|
-
|
|
35
|
+
onChangeCalendarMonth = props.onChangeCalendarMonth,
|
|
36
36
|
onChangeCalendarTime = props.onChangeCalendarTime,
|
|
37
37
|
onToggleMeridian = props.onToggleMeridian,
|
|
38
|
+
onSelect = props.onSelect,
|
|
38
39
|
_props$value = props.value,
|
|
39
40
|
value = _props$value === void 0 ? [] : _props$value,
|
|
40
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "calendarDate", "format", "disabledDate", "index", "limitEndYear", "
|
|
41
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "calendarDate", "format", "disabledDate", "index", "limitEndYear", "onChangeCalendarMonth", "onChangeCalendarTime", "onToggleMeridian", "onSelect", "value"]);
|
|
41
42
|
var onMoveForward = (0, _react.useCallback)(function (nextPageDate) {
|
|
42
|
-
|
|
43
|
-
}, [index,
|
|
43
|
+
onChangeCalendarMonth === null || onChangeCalendarMonth === void 0 ? void 0 : onChangeCalendarMonth(index, nextPageDate);
|
|
44
|
+
}, [index, onChangeCalendarMonth]);
|
|
44
45
|
var onMoveBackward = (0, _react.useCallback)(function (nextPageDate) {
|
|
45
|
-
|
|
46
|
-
}, [index,
|
|
47
|
-
var
|
|
48
|
-
|
|
49
|
-
}, [index,
|
|
50
|
-
var
|
|
46
|
+
onChangeCalendarMonth === null || onChangeCalendarMonth === void 0 ? void 0 : onChangeCalendarMonth(index, nextPageDate);
|
|
47
|
+
}, [index, onChangeCalendarMonth]);
|
|
48
|
+
var handleSelect = (0, _react.useCallback)(function (date, event) {
|
|
49
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(index, date, event);
|
|
50
|
+
}, [index, onSelect]);
|
|
51
|
+
var handleChangeMonth = (0, _react.useCallback)(function (nextPageDate) {
|
|
52
|
+
onChangeCalendarMonth === null || onChangeCalendarMonth === void 0 ? void 0 : onChangeCalendarMonth(index, nextPageDate);
|
|
53
|
+
}, [index, onChangeCalendarMonth]);
|
|
54
|
+
var handleChangeTime = (0, _react.useCallback)(function (nextPageDate) {
|
|
51
55
|
onChangeCalendarTime === null || onChangeCalendarTime === void 0 ? void 0 : onChangeCalendarTime(index, nextPageDate);
|
|
52
56
|
}, [index, onChangeCalendarTime]);
|
|
53
57
|
var handleToggleMeridian = (0, _react.useCallback)(function (event) {
|
|
@@ -75,11 +79,12 @@ var Calendar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
75
79
|
inSameMonth: inSameMonth,
|
|
76
80
|
index: index,
|
|
77
81
|
limitEndYear: limitEndYear,
|
|
78
|
-
|
|
79
|
-
|
|
82
|
+
onChangeMonth: handleChangeMonth,
|
|
83
|
+
onChangeTime: handleChangeTime,
|
|
80
84
|
onMoveBackward: handleMoveBackward,
|
|
81
85
|
onMoveForward: handleMoveForward,
|
|
82
86
|
onToggleMeridian: handleToggleMeridian,
|
|
87
|
+
onSelect: handleSelect,
|
|
83
88
|
calendarDate: getCalendarDate(),
|
|
84
89
|
ref: ref
|
|
85
90
|
}));
|
|
@@ -98,7 +103,7 @@ Calendar.propTypes = {
|
|
|
98
103
|
disabledDate: _propTypes.default.func,
|
|
99
104
|
onSelect: _propTypes.default.func,
|
|
100
105
|
onMouseMove: _propTypes.default.func,
|
|
101
|
-
|
|
106
|
+
onChangeCalendarMonth: _propTypes.default.func
|
|
102
107
|
};
|
|
103
108
|
var _default = Calendar;
|
|
104
109
|
exports.default = _default;
|
|
@@ -144,8 +144,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
144
144
|
setHoverDateRange = _useState2[1]; // The displayed calendar panel is rendered based on this value.
|
|
145
145
|
|
|
146
146
|
|
|
147
|
-
var _useState3 = (0, _react.useState)((0, _utils2.
|
|
148
|
-
value: (_ref2 =
|
|
147
|
+
var _useState3 = (0, _react.useState)((0, _utils2.getSafeCalendarDate)({
|
|
148
|
+
value: (_ref2 = value !== null && value !== void 0 ? value : defaultCalendarValue) !== null && _ref2 !== void 0 ? _ref2 : null
|
|
149
149
|
})),
|
|
150
150
|
calendarDate = _useState3[0],
|
|
151
151
|
setCalendarDate = _useState3[1];
|
|
@@ -162,43 +162,46 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
162
162
|
|
|
163
163
|
var selectRangeValueRef = (0, _react.useRef)(null);
|
|
164
164
|
/**
|
|
165
|
-
* Get the time on the
|
|
165
|
+
* Get the time on the calendar.
|
|
166
166
|
*/
|
|
167
167
|
|
|
168
|
-
var
|
|
169
|
-
var
|
|
170
|
-
|
|
171
|
-
getSeconds = _utils.DateUtils.getSeconds,
|
|
172
|
-
set = _utils.DateUtils.set;
|
|
173
|
-
var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue[1]);
|
|
174
|
-
return set(date, {
|
|
175
|
-
hours: getHours(calendarEndDate),
|
|
176
|
-
minutes: getMinutes(calendarEndDate),
|
|
177
|
-
seconds: getSeconds(calendarEndDate)
|
|
178
|
-
});
|
|
168
|
+
var getCalendarDatetime = (0, _react.useCallback)(function (calendarKey) {
|
|
169
|
+
var index = calendarKey === 'start' ? 0 : 1;
|
|
170
|
+
return (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[index]) || (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue[index]);
|
|
179
171
|
}, [calendarDate, defaultCalendarValue]);
|
|
180
172
|
/**
|
|
181
173
|
* Call this function to update the calendar panel rendering benchmark value.
|
|
182
174
|
* If params `value` is not passed, it defaults to [new Date(), addMonth(new Date(), 1)].
|
|
183
175
|
*/
|
|
184
176
|
|
|
185
|
-
var updateCalendarDateRange = (0, _react.useCallback)(function (
|
|
186
|
-
var
|
|
187
|
-
|
|
177
|
+
var updateCalendarDateRange = (0, _react.useCallback)(function (_ref3) {
|
|
178
|
+
var dateRange = _ref3.dateRange,
|
|
179
|
+
calendarKey = _ref3.calendarKey,
|
|
180
|
+
eventName = _ref3.eventName;
|
|
181
|
+
var nextValue = dateRange; // The time should remain the same when the dates in the date range are changed.
|
|
188
182
|
|
|
189
|
-
if (shouldRenderTime(formatStr) &&
|
|
190
|
-
var _startDate =
|
|
183
|
+
if ((0, _dateUtils.shouldRenderTime)(formatStr) && dateRange !== null && dateRange !== void 0 && dateRange.length && eventName !== 'changeTime') {
|
|
184
|
+
var _startDate = (0, _dateUtils.copyTime)({
|
|
185
|
+
from: getCalendarDatetime('start'),
|
|
186
|
+
to: dateRange[0]
|
|
187
|
+
});
|
|
191
188
|
|
|
192
|
-
var _endDate =
|
|
189
|
+
var _endDate = (0, _dateUtils.copyTime)({
|
|
190
|
+
from: getCalendarDatetime('end'),
|
|
191
|
+
to: dateRange.length === 1 ? (0, _dateUtils.addMonths)(_startDate, 1) : dateRange[1]
|
|
192
|
+
});
|
|
193
193
|
|
|
194
194
|
nextValue = [_startDate, _endDate];
|
|
195
|
+
} else if (dateRange === null && typeof defaultCalendarValue !== 'undefined') {
|
|
196
|
+
// Make the calendar render the value of defaultCalendarValue after clearing the value.
|
|
197
|
+
nextValue = defaultCalendarValue;
|
|
195
198
|
}
|
|
196
199
|
|
|
197
|
-
setCalendarDate((0, _utils2.
|
|
200
|
+
setCalendarDate((0, _utils2.getSafeCalendarDate)({
|
|
198
201
|
value: nextValue,
|
|
199
202
|
calendarKey: calendarKey
|
|
200
203
|
}));
|
|
201
|
-
}, [
|
|
204
|
+
}, [formatStr, defaultCalendarValue, getCalendarDatetime]); // if valueProp changed then update selectValue/hoverValue
|
|
202
205
|
|
|
203
206
|
(0, _react.useEffect)(function () {
|
|
204
207
|
setSelectedDates(valueProp !== null && valueProp !== void 0 ? valueProp : []);
|
|
@@ -276,8 +279,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
276
279
|
return null;
|
|
277
280
|
}
|
|
278
281
|
|
|
279
|
-
if (
|
|
280
|
-
hoverValues.
|
|
282
|
+
if ((0, _dateUtils.isAfter)(hoverValues[0], hoverValues[1])) {
|
|
283
|
+
hoverValues = (0, _dateUtils.reverseDateRangeOmitTime)(hoverValues);
|
|
281
284
|
}
|
|
282
285
|
|
|
283
286
|
return hoverValues;
|
|
@@ -334,7 +337,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
334
337
|
* Callback for selecting a date cell in the calendar grid
|
|
335
338
|
*/
|
|
336
339
|
|
|
337
|
-
var handleSelectDate = (0, _react.useCallback)(function (date, event) {
|
|
340
|
+
var handleSelectDate = (0, _react.useCallback)(function (index, date, event) {
|
|
341
|
+
var calendarKey = index === 0 ? 'start' : 'end';
|
|
338
342
|
var nextSelectDates = hoverDateRange !== null && hoverDateRange !== void 0 ? hoverDateRange : [];
|
|
339
343
|
var hoverRangeValue = getHoverRangeValue(date);
|
|
340
344
|
var noHoverRangeValid = (0, _isNil.default)(hoverRangeValue); // in `oneTap` mode
|
|
@@ -364,17 +368,20 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
364
368
|
}
|
|
365
369
|
}
|
|
366
370
|
|
|
367
|
-
var shouldRenderTime = _utils.DateUtils.shouldRenderTime,
|
|
368
|
-
isAfter = _utils.DateUtils.isAfter;
|
|
369
|
-
|
|
370
371
|
if (nextSelectDates.length === 2) {
|
|
371
372
|
// If user have completed the selection, then sort the selected dates.
|
|
372
|
-
if (isAfter(nextSelectDates[0], nextSelectDates[1])) {
|
|
373
|
-
nextSelectDates.
|
|
373
|
+
if ((0, _dateUtils.isAfter)(nextSelectDates[0], nextSelectDates[1])) {
|
|
374
|
+
nextSelectDates = (0, _dateUtils.reverseDateRangeOmitTime)(nextSelectDates);
|
|
374
375
|
}
|
|
375
376
|
|
|
376
|
-
if (shouldRenderTime(formatStr)) {
|
|
377
|
-
nextSelectDates
|
|
377
|
+
if ((0, _dateUtils.shouldRenderTime)(formatStr)) {
|
|
378
|
+
nextSelectDates = [(0, _dateUtils.copyTime)({
|
|
379
|
+
from: getCalendarDatetime('start'),
|
|
380
|
+
to: nextSelectDates[0]
|
|
381
|
+
}), (0, _dateUtils.copyTime)({
|
|
382
|
+
from: getCalendarDatetime('end'),
|
|
383
|
+
to: nextSelectDates[1]
|
|
384
|
+
})];
|
|
378
385
|
}
|
|
379
386
|
|
|
380
387
|
setHoverDateRange(nextSelectDates);
|
|
@@ -383,10 +390,14 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
383
390
|
}
|
|
384
391
|
|
|
385
392
|
setSelectedDates(nextSelectDates);
|
|
386
|
-
updateCalendarDateRange(
|
|
393
|
+
updateCalendarDateRange({
|
|
394
|
+
dateRange: nextSelectDates,
|
|
395
|
+
calendarKey: calendarKey,
|
|
396
|
+
eventName: 'changeDate'
|
|
397
|
+
});
|
|
387
398
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
|
|
388
399
|
hasDoneSelect.current = !hasDoneSelect.current;
|
|
389
|
-
}, [formatStr,
|
|
400
|
+
}, [formatStr, getCalendarDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
|
|
390
401
|
/**
|
|
391
402
|
* If `selectValue` changed, there will be the following effects.
|
|
392
403
|
* 1. Check if the selection is completed.
|
|
@@ -398,41 +409,48 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
398
409
|
var doneSelected = selectValueLength === 0 || selectValueLength === 2;
|
|
399
410
|
doneSelected && setHoverDateRange(null);
|
|
400
411
|
}, [selectedDates]);
|
|
401
|
-
var
|
|
412
|
+
var updateSingleCalendarMonth = (0, _react.useCallback)(function (index, date) {
|
|
413
|
+
var calendarKey = index === 0 ? 'start' : 'end';
|
|
402
414
|
var nextCalendarDate = Array.from(calendarDate);
|
|
403
415
|
nextCalendarDate[index] = date;
|
|
404
|
-
updateCalendarDateRange(
|
|
416
|
+
updateCalendarDateRange({
|
|
417
|
+
dateRange: nextCalendarDate,
|
|
418
|
+
calendarKey: calendarKey,
|
|
419
|
+
eventName: 'changeMonth'
|
|
420
|
+
});
|
|
405
421
|
}, [calendarDate, updateCalendarDateRange]);
|
|
406
422
|
var updateSingleCalendarTime = (0, _react.useCallback)(function (index, date) {
|
|
423
|
+
var calendarKey = index === 0 ? 'start' : 'end';
|
|
424
|
+
var nextCalendarDate = Array.from(calendarDate);
|
|
425
|
+
nextCalendarDate[index] = date;
|
|
426
|
+
updateCalendarDateRange({
|
|
427
|
+
dateRange: nextCalendarDate,
|
|
428
|
+
calendarKey: calendarKey,
|
|
429
|
+
eventName: 'changeTime'
|
|
430
|
+
});
|
|
407
431
|
setSelectedDates(function (prev) {
|
|
408
|
-
var next = [].concat(prev);
|
|
409
|
-
var clonedDate = new Date(date.valueOf()); // if next[index] is not empty, only update the time after aligning the year, month and day
|
|
432
|
+
var next = [].concat(prev); // if next[index] is not empty, only update the time after aligning the year, month and day
|
|
410
433
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
next[index] = clonedDate;
|
|
434
|
+
next[index] = next[index] ? (0, _dateUtils.copyTime)({
|
|
435
|
+
from: date,
|
|
436
|
+
to: next[index]
|
|
437
|
+
}) : new Date(date.valueOf());
|
|
416
438
|
return next;
|
|
417
439
|
});
|
|
418
|
-
|
|
419
|
-
}, [updateSingleCalendarDate]);
|
|
440
|
+
}, [calendarDate, updateCalendarDateRange]);
|
|
420
441
|
/**
|
|
421
442
|
* The callback triggered when PM/AM is switched.
|
|
422
443
|
*/
|
|
423
444
|
|
|
424
445
|
var handleToggleMeridian = (0, _react.useCallback)(function (index) {
|
|
425
|
-
var
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
var hours = _utils.DateUtils.getHours(clonedDate);
|
|
429
|
-
|
|
430
|
-
var nextHours = hours >= 12 ? hours - 12 : hours + 12;
|
|
431
|
-
next[index] = _utils.DateUtils.setHours(clonedDate, nextHours);
|
|
432
|
-
setCalendarDate(next); // If the value already exists, update the value again.
|
|
446
|
+
var nextCalendarDate = Array.from(calendarDate);
|
|
447
|
+
nextCalendarDate[index] = (0, _dateUtils.getReversedTimeMeridian)(nextCalendarDate[index]);
|
|
448
|
+
setCalendarDate(nextCalendarDate); // If the value already exists, update the value again.
|
|
433
449
|
|
|
434
450
|
if (selectedDates.length === 2) {
|
|
435
|
-
|
|
451
|
+
var nextSelectedDates = Array.from(selectedDates);
|
|
452
|
+
nextSelectedDates[index] = (0, _dateUtils.getReversedTimeMeridian)(nextSelectedDates[index]);
|
|
453
|
+
setSelectedDates(nextSelectedDates);
|
|
436
454
|
}
|
|
437
455
|
}, [calendarDate, selectedDates]);
|
|
438
456
|
/**
|
|
@@ -444,7 +462,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
444
462
|
closeOverlay = false;
|
|
445
463
|
}
|
|
446
464
|
|
|
447
|
-
updateCalendarDateRange(
|
|
465
|
+
updateCalendarDateRange({
|
|
466
|
+
dateRange: value
|
|
467
|
+
});
|
|
448
468
|
|
|
449
469
|
if (closeOverlay) {
|
|
450
470
|
handleValueUpdate(event, value, closeOverlay);
|
|
@@ -460,7 +480,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
460
480
|
onOk === null || onOk === void 0 ? void 0 : onOk(selectedDates, event);
|
|
461
481
|
}, [handleValueUpdate, onOk, selectedDates]);
|
|
462
482
|
var handleClean = (0, _react.useCallback)(function (event) {
|
|
463
|
-
updateCalendarDateRange(
|
|
483
|
+
updateCalendarDateRange({
|
|
484
|
+
dateRange: null
|
|
485
|
+
});
|
|
464
486
|
handleValueUpdate(event, null);
|
|
465
487
|
}, [handleValueUpdate, updateCalendarDateRange]);
|
|
466
488
|
/**
|
|
@@ -497,7 +519,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
497
519
|
|
|
498
520
|
setHoverDateRange(selectValue);
|
|
499
521
|
setSelectedDates(selectValue);
|
|
500
|
-
updateCalendarDateRange(
|
|
522
|
+
updateCalendarDateRange({
|
|
523
|
+
dateRange: selectValue
|
|
524
|
+
});
|
|
501
525
|
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
502
526
|
[character, rangeFormatStr, updateCalendarDateRange]);
|
|
503
527
|
/**
|
|
@@ -520,13 +544,15 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
520
544
|
nextCalendarDate = [_startDate2, (0, _dateUtils.isSameMonth)(_startDate2, endData) ? (0, _dateUtils.addMonths)(endData, 1) : endData];
|
|
521
545
|
} else {
|
|
522
546
|
// Reset the date on the calendar to the default date
|
|
523
|
-
nextCalendarDate = (0, _utils2.
|
|
547
|
+
nextCalendarDate = (0, _utils2.getSafeCalendarDate)({
|
|
524
548
|
value: defaultCalendarValue !== null && defaultCalendarValue !== void 0 ? defaultCalendarValue : null
|
|
525
549
|
});
|
|
526
550
|
}
|
|
527
551
|
|
|
528
552
|
setSelectedDates(value !== null && value !== void 0 ? value : []);
|
|
529
|
-
updateCalendarDateRange(
|
|
553
|
+
updateCalendarDateRange({
|
|
554
|
+
dateRange: nextCalendarDate
|
|
555
|
+
});
|
|
530
556
|
}, [defaultCalendarValue, updateCalendarDateRange, setSelectedDates, value]);
|
|
531
557
|
var handleEntered = (0, _react.useCallback)(function () {
|
|
532
558
|
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
@@ -613,7 +639,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
613
639
|
showWeekNumbers: showWeekNumbers,
|
|
614
640
|
value: selectedDates,
|
|
615
641
|
showMeridian: showMeridian,
|
|
616
|
-
|
|
642
|
+
onChangeCalendarMonth: updateSingleCalendarMonth,
|
|
617
643
|
onChangeCalendarTime: updateSingleCalendarTime,
|
|
618
644
|
onMouseMove: handleMouseMove,
|
|
619
645
|
onSelect: handleSelectDate,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DateRange } from './types';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function getSafeCalendarDate({ value, calendarKey }: {
|
|
3
3
|
value: [] | [Date] | [Date, Date] | null;
|
|
4
4
|
calendarKey?: 'start' | 'end';
|
|
5
5
|
}): DateRange;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
-
exports.
|
|
4
|
+
exports.getSafeCalendarDate = getSafeCalendarDate;
|
|
5
5
|
exports.getWeekHoverRange = exports.getMonthHoverRange = exports.isSameRange = void 0;
|
|
6
6
|
|
|
7
7
|
var _dateUtils = require("../utils/dateUtils");
|
|
8
8
|
|
|
9
|
-
function
|
|
9
|
+
function getSafeCalendarDate(_ref) {
|
|
10
10
|
var _value;
|
|
11
11
|
|
|
12
12
|
var value = _ref.value,
|
|
@@ -16,13 +16,18 @@ function getCalendarDate(_ref) {
|
|
|
16
16
|
value = (_value = value) !== null && _value !== void 0 ? _value : [];
|
|
17
17
|
|
|
18
18
|
if (value[0] && value[1]) {
|
|
19
|
-
var
|
|
20
|
-
var endMonth = (0, _dateUtils.getMonth)(value[1]);
|
|
19
|
+
var diffMonth = (0, _dateUtils.differenceInCalendarMonths)(value[1], value[0]);
|
|
21
20
|
|
|
22
21
|
if (calendarKey === 'start') {
|
|
23
|
-
return [value[0],
|
|
22
|
+
return [value[0], diffMonth <= 0 ? (0, _dateUtils.copyTime)({
|
|
23
|
+
from: value[1],
|
|
24
|
+
to: (0, _dateUtils.addMonths)(value[0], 1)
|
|
25
|
+
}) : value[1]];
|
|
24
26
|
} else if (calendarKey === 'end') {
|
|
25
|
-
return [
|
|
27
|
+
return [diffMonth <= 0 ? (0, _dateUtils.copyTime)({
|
|
28
|
+
from: value[0],
|
|
29
|
+
to: (0, _dateUtils.addMonths)(value[1], -1)
|
|
30
|
+
}) : value[0], value[1]];
|
|
26
31
|
} // If only the start date
|
|
27
32
|
|
|
28
33
|
} else if (value[0]) {
|
package/cjs/utils/dateUtils.d.ts
CHANGED
|
@@ -36,6 +36,7 @@ export { default as subDays } from 'date-fns/subDays';
|
|
|
36
36
|
export { default as isMatch } from 'date-fns/isMatch';
|
|
37
37
|
export { default as isValid } from 'date-fns/isValid';
|
|
38
38
|
export { default as set } from 'date-fns/set';
|
|
39
|
+
export { default as differenceInCalendarMonths } from 'date-fns/differenceInCalendarMonths';
|
|
39
40
|
export declare type CalendarOnlyPropsType = 'disabledHours' | 'disabledMinutes' | 'disabledSeconds' | 'hideHours' | 'hideMinutes' | 'hideSeconds';
|
|
40
41
|
export declare const calendarOnlyProps: CalendarOnlyPropsType[];
|
|
41
42
|
/**
|
|
@@ -56,3 +57,18 @@ export declare const shouldOnlyRenderTime: (format: string) => boolean;
|
|
|
56
57
|
*/
|
|
57
58
|
export declare function getMonthView(monthDate: Date, isoWeek: boolean): Date[];
|
|
58
59
|
export declare function getDateMask(formatStr: string): (string | RegExp)[];
|
|
60
|
+
/**
|
|
61
|
+
* Copy the time of one date to another
|
|
62
|
+
*/
|
|
63
|
+
export declare function copyTime({ from, to }: {
|
|
64
|
+
from: Date;
|
|
65
|
+
to: Date;
|
|
66
|
+
}): Date;
|
|
67
|
+
/**
|
|
68
|
+
* Swap two dates without swapping the time.
|
|
69
|
+
*/
|
|
70
|
+
export declare function reverseDateRangeOmitTime(dateRange: [Date, Date]): [Date, Date];
|
|
71
|
+
/**
|
|
72
|
+
* Get the time with AM and PM reversed.
|
|
73
|
+
*/
|
|
74
|
+
export declare const getReversedTimeMeridian: (date: Date) => Date;
|