rsuite 5.28.3 → 5.30.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 +15 -0
- package/cjs/Affix/Affix.d.ts +5 -3
- package/cjs/Affix/Affix.js +33 -11
- package/cjs/Calendar/CalendarHeader.js +12 -3
- package/cjs/Cascader/Cascader.js +1 -1
- package/cjs/DatePicker/DatePicker.d.ts +34 -3
- package/cjs/DatePicker/DatePicker.js +38 -16
- package/cjs/DateRangePicker/DateRangePicker.d.ts +9 -1
- package/cjs/DateRangePicker/DateRangePicker.js +58 -39
- package/cjs/DateRangePicker/DateRangePickerContext.d.ts +7 -0
- package/cjs/DateRangePicker/DateRangePickerContext.js +19 -0
- package/cjs/Overlay/Modal.js +5 -5
- package/cjs/Overlay/OverlayTrigger.js +3 -2
- package/cjs/utils/dateUtils.d.ts +1 -0
- package/cjs/utils/dateUtils.js +10 -3
- package/cjs/utils/deprecatePropType.d.ts +5 -0
- package/cjs/utils/deprecatePropType.js +5 -0
- package/cjs/utils/usePortal.js +9 -12
- package/dist/rsuite-no-reset-rtl.css +16690 -0
- package/dist/rsuite-no-reset-rtl.min.css +2 -0
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -0
- package/dist/rsuite-no-reset.css +16714 -0
- package/dist/rsuite-no-reset.min.css +2 -0
- package/dist/rsuite-no-reset.min.css.map +1 -0
- package/dist/rsuite.js +21 -10
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Affix/Affix.d.ts +5 -3
- package/esm/Affix/Affix.js +32 -11
- package/esm/Calendar/CalendarHeader.js +11 -3
- package/esm/Cascader/Cascader.js +1 -1
- package/esm/DatePicker/DatePicker.d.ts +34 -3
- package/esm/DatePicker/DatePicker.js +37 -16
- package/esm/DateRangePicker/DateRangePicker.d.ts +9 -1
- package/esm/DateRangePicker/DateRangePicker.js +56 -39
- package/esm/DateRangePicker/DateRangePickerContext.d.ts +7 -0
- package/esm/DateRangePicker/DateRangePickerContext.js +6 -0
- package/esm/Overlay/Modal.js +5 -4
- package/esm/Overlay/OverlayTrigger.js +3 -2
- package/esm/utils/dateUtils.d.ts +1 -0
- package/esm/utils/dateUtils.js +10 -3
- package/esm/utils/deprecatePropType.d.ts +5 -0
- package/esm/utils/deprecatePropType.js +5 -0
- package/esm/utils/usePortal.js +10 -13
- package/package.json +1 -1
package/esm/Affix/Affix.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
|
|
1
|
+
import { Offset, RsRefForwardingComponent, WithAsProps } from '../@types/common';
|
|
2
2
|
export interface AffixProps extends WithAsProps {
|
|
3
|
+
/** Specify the container. */
|
|
4
|
+
container?: HTMLElement | (() => HTMLElement);
|
|
3
5
|
/** Distance from top */
|
|
4
6
|
top?: number;
|
|
5
7
|
/** Callback after the state changes. */
|
|
6
8
|
onChange?: (fixed?: boolean) => void;
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
+
/** Callback after the offset changes. */
|
|
10
|
+
onOffsetChange?: (offset?: Offset) => void;
|
|
9
11
|
}
|
|
10
12
|
declare const Affix: RsRefForwardingComponent<'div', AffixProps>;
|
|
11
13
|
export default Affix;
|
package/esm/Affix/Affix.js
CHANGED
|
@@ -2,20 +2,33 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
3
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
+
import debounce from 'lodash/debounce';
|
|
5
6
|
import getOffset from 'dom-lib/getOffset';
|
|
6
7
|
import { mergeRefs, useClassNames, useElementResize, useEventListener, useMount } from '../utils';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Get the layout size and offset of the mount element
|
|
10
11
|
*/
|
|
11
|
-
function useOffset(mountRef) {
|
|
12
|
+
function useOffset(mountRef, onOffsetChange) {
|
|
12
13
|
var _useState = useState(null),
|
|
13
14
|
offset = _useState[0],
|
|
14
15
|
setOffset = _useState[1];
|
|
15
16
|
|
|
16
17
|
var updateOffset = useCallback(function () {
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
if (!mountRef.current) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
var newOffset = getOffset(mountRef.current);
|
|
23
|
+
|
|
24
|
+
if ((newOffset === null || newOffset === void 0 ? void 0 : newOffset.height) !== (offset === null || offset === void 0 ? void 0 : offset.height) || (newOffset === null || newOffset === void 0 ? void 0 : newOffset.width) !== (offset === null || offset === void 0 ? void 0 : offset.width) || (newOffset === null || newOffset === void 0 ? void 0 : newOffset.top) !== (offset === null || offset === void 0 ? void 0 : offset.top) || (newOffset === null || newOffset === void 0 ? void 0 : newOffset.left) !== (offset === null || offset === void 0 ? void 0 : offset.left)) {
|
|
25
|
+
setOffset(newOffset);
|
|
26
|
+
|
|
27
|
+
if (offset !== null && newOffset !== null) {
|
|
28
|
+
onOffsetChange === null || onOffsetChange === void 0 ? void 0 : onOffsetChange(newOffset);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}, [mountRef, offset, onOffsetChange]); // Update after the element size changes
|
|
19
32
|
|
|
20
33
|
useElementResize(function () {
|
|
21
34
|
return mountRef.current;
|
|
@@ -23,7 +36,9 @@ function useOffset(mountRef) {
|
|
|
23
36
|
|
|
24
37
|
useMount(updateOffset); // Update after window size changes
|
|
25
38
|
|
|
26
|
-
useEventListener(window, 'resize', updateOffset, false);
|
|
39
|
+
useEventListener(window, 'resize', updateOffset, false); // Update after window scroll
|
|
40
|
+
|
|
41
|
+
useEventListener(window, 'scroll', debounce(updateOffset, 100), false);
|
|
27
42
|
return offset;
|
|
28
43
|
}
|
|
29
44
|
/**
|
|
@@ -66,7 +81,7 @@ function useFixed(offset, containerOffset, props) {
|
|
|
66
81
|
|
|
67
82
|
var scrollY = window.scrollY || window.pageYOffset; // When the scroll distance exceeds the element's top value, it is fixed.
|
|
68
83
|
|
|
69
|
-
var nextFixed = scrollY - (Number(offset.top) - Number(top)) >= 0; // If the current element is specified in the container,
|
|
84
|
+
var nextFixed = scrollY - (Number(offset === null || offset === void 0 ? void 0 : offset.top) - Number(top)) >= 0; // If the current element is specified in the container,
|
|
70
85
|
// add to determine whether the current container is in the window range.
|
|
71
86
|
|
|
72
87
|
if (containerOffset) {
|
|
@@ -77,7 +92,7 @@ function useFixed(offset, containerOffset, props) {
|
|
|
77
92
|
setFixed(nextFixed);
|
|
78
93
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextFixed);
|
|
79
94
|
}
|
|
80
|
-
}, [
|
|
95
|
+
}, [offset, top, containerOffset, fixed, onChange]); // Add scroll event to window
|
|
81
96
|
|
|
82
97
|
useEventListener(window, 'scroll', handleScroll, false);
|
|
83
98
|
return fixed;
|
|
@@ -96,10 +111,11 @@ var Affix = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
96
111
|
_props$top = props.top,
|
|
97
112
|
top = _props$top === void 0 ? 0 : _props$top,
|
|
98
113
|
onChange = props.onChange,
|
|
99
|
-
|
|
114
|
+
onOffsetChange = props.onOffsetChange,
|
|
115
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "children", "container", "top", "onChange", "onOffsetChange"]);
|
|
100
116
|
|
|
101
117
|
var mountRef = useRef(null);
|
|
102
|
-
var offset = useOffset(mountRef);
|
|
118
|
+
var offset = useOffset(mountRef, onOffsetChange);
|
|
103
119
|
var containerOffset = useContainerOffset(container);
|
|
104
120
|
var fixed = useFixed(offset, containerOffset, {
|
|
105
121
|
top: top,
|
|
@@ -111,14 +127,19 @@ var Affix = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
111
127
|
merge = _useClassNames.merge;
|
|
112
128
|
|
|
113
129
|
var classes = merge(className, (_merge = {}, _merge[withClassPrefix()] = fixed, _merge));
|
|
130
|
+
|
|
131
|
+
var _ref = offset || {},
|
|
132
|
+
width = _ref.width,
|
|
133
|
+
height = _ref.height;
|
|
134
|
+
|
|
114
135
|
var placeholderStyles = fixed ? {
|
|
115
|
-
width:
|
|
116
|
-
height:
|
|
136
|
+
width: width,
|
|
137
|
+
height: height
|
|
117
138
|
} : undefined;
|
|
118
139
|
var fixedStyles = {
|
|
119
140
|
position: 'fixed',
|
|
120
141
|
top: top,
|
|
121
|
-
width:
|
|
142
|
+
width: width,
|
|
122
143
|
zIndex: 10
|
|
123
144
|
};
|
|
124
145
|
var affixStyles = fixed ? fixedStyles : undefined;
|
|
@@ -9,6 +9,7 @@ import Button from '../Button';
|
|
|
9
9
|
import { useClassNames } from '../utils';
|
|
10
10
|
import { FormattedDate } from '../CustomProvider';
|
|
11
11
|
import { useCalendarContext } from './CalendarContext';
|
|
12
|
+
import { useDateRangePickerContext } from '../DateRangePicker/DateRangePickerContext';
|
|
12
13
|
var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
13
14
|
var _props$as = props.as,
|
|
14
15
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
@@ -39,6 +40,9 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
39
40
|
inline = _useCalendarContext.inline,
|
|
40
41
|
disabledDate = _useCalendarContext.disabledDate;
|
|
41
42
|
|
|
43
|
+
var _useDateRangePickerCo = useDateRangePickerContext(),
|
|
44
|
+
isSelectedIdle = _useDateRangePickerCo.isSelectedIdle;
|
|
45
|
+
|
|
42
46
|
var _useClassNames = useClassNames(classPrefix),
|
|
43
47
|
prefix = _useClassNames.prefix,
|
|
44
48
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
@@ -114,7 +118,9 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
114
118
|
var classes = merge(className, withClassPrefix({
|
|
115
119
|
'has-month': hasMonth,
|
|
116
120
|
'has-time': showTime
|
|
117
|
-
}));
|
|
121
|
+
})); // If the date is not selected, the time cannot be selected (it only works in DateRangePicker).
|
|
122
|
+
|
|
123
|
+
var disableSelectTime = typeof isSelectedIdle === 'undefined' ? false : !isSelectedIdle;
|
|
118
124
|
return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
|
|
119
125
|
ref: ref,
|
|
120
126
|
className: classes
|
|
@@ -122,13 +128,15 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
122
128
|
className: prefix('time-toolbar')
|
|
123
129
|
}, /*#__PURE__*/React.createElement(Button, _extends({}, btnProps, {
|
|
124
130
|
className: timeTitleClasses,
|
|
125
|
-
onClick: onToggleTimeDropdown
|
|
131
|
+
onClick: onToggleTimeDropdown,
|
|
132
|
+
disabled: disableSelectTime
|
|
126
133
|
}), date && /*#__PURE__*/React.createElement(FormattedDate, {
|
|
127
134
|
date: date,
|
|
128
135
|
formatStr: getTimeFormat()
|
|
129
136
|
})), showMeridian && /*#__PURE__*/React.createElement(Button, _extends({}, btnProps, {
|
|
130
137
|
className: prefix('meridian'),
|
|
131
|
-
onClick: onToggleMeridian
|
|
138
|
+
onClick: onToggleMeridian,
|
|
139
|
+
disabled: disableSelectTime
|
|
132
140
|
}), date && /*#__PURE__*/React.createElement(FormattedDate, {
|
|
133
141
|
date: date,
|
|
134
142
|
formatStr: "a"
|
package/esm/Cascader/Cascader.js
CHANGED
|
@@ -33,14 +33,45 @@ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, Form
|
|
|
33
33
|
* Whether to disable a date on the calendar view
|
|
34
34
|
*
|
|
35
35
|
* @returns date should be disabled (not selectable)
|
|
36
|
+
* @deprecated Use {@link shouldDisableDate} instead
|
|
36
37
|
*/
|
|
37
38
|
disabledDate?: (date?: Date) => boolean;
|
|
38
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Disabled hours
|
|
41
|
+
*
|
|
42
|
+
* @deprecated Use {@link shouldDisableHour} instead
|
|
43
|
+
*/
|
|
39
44
|
disabledHours?: (hour: number, date: Date) => boolean;
|
|
40
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Disabled minutes
|
|
47
|
+
*
|
|
48
|
+
* @deprecated Use {@link shouldDisableMinute} instead
|
|
49
|
+
*/
|
|
41
50
|
disabledMinutes?: (minute: number, date: Date) => boolean;
|
|
42
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Disabled seconds
|
|
53
|
+
*
|
|
54
|
+
* @deprecated Use {@link shouldDisableSecond} instead
|
|
55
|
+
*/
|
|
43
56
|
disabledSeconds?: (second: number, date: Date) => boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether a date on the calendar view should be disabled
|
|
59
|
+
*
|
|
60
|
+
* @returns date should be disabled (not selectable)
|
|
61
|
+
*/
|
|
62
|
+
shouldDisableDate?: (date: Date) => boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Disabled hours
|
|
65
|
+
*/
|
|
66
|
+
shouldDisableHour?: (hour: number, date: Date) => boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Disabled minutes
|
|
69
|
+
*/
|
|
70
|
+
shouldDisableMinute?: (minute: number, date: Date) => boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Disabled seconds
|
|
73
|
+
*/
|
|
74
|
+
shouldDisableSecond?: (second: number, date: Date) => boolean;
|
|
44
75
|
/** Hidden hours */
|
|
45
76
|
hideHours?: (hour: number, date: Date) => boolean;
|
|
46
77
|
/** Hidden minutes */
|
|
@@ -16,6 +16,7 @@ import PredefinedRanges from './PredefinedRanges';
|
|
|
16
16
|
import { composeFunctions, createChainedFunction, DateUtils, mergeRefs, useClassNames, useControlled, useCustom } from '../utils';
|
|
17
17
|
import { PickerOverlay, pickerPropTypes, PickerToggle, PickerToggleTrigger, pickTriggerPropKeys, omitTriggerPropKeys, usePickerClassName, usePublicMethods, useToggleKeyDownEvent } from '../Picker';
|
|
18
18
|
import { OverlayCloseCause } from '../Overlay/OverlayTrigger';
|
|
19
|
+
import { deprecatePropTypeNew } from '../utils/deprecatePropType';
|
|
19
20
|
var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
20
21
|
var _props$as = props.as,
|
|
21
22
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
@@ -50,7 +51,14 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
50
51
|
style = props.style,
|
|
51
52
|
toggleAs = props.toggleAs,
|
|
52
53
|
caretAsProp = props.caretAs,
|
|
53
|
-
|
|
54
|
+
DEPRECATED_disabledDate = props.disabledDate,
|
|
55
|
+
DEPRECATED_disabledHours = props.disabledHours,
|
|
56
|
+
DEPRECATED_disabledMinutes = props.disabledMinutes,
|
|
57
|
+
DEPRECATED_disabledSeconds = props.disabledSeconds,
|
|
58
|
+
shouldDisableDate = props.shouldDisableDate,
|
|
59
|
+
shouldDisableHour = props.shouldDisableHour,
|
|
60
|
+
shouldDisableMinute = props.shouldDisableMinute,
|
|
61
|
+
shouldDisableSecond = props.shouldDisableSecond,
|
|
54
62
|
renderValue = props.renderValue,
|
|
55
63
|
onChange = props.onChange,
|
|
56
64
|
onChangeCalendarDate = props.onChangeCalendarDate,
|
|
@@ -65,7 +73,7 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
65
73
|
onSelect = props.onSelect,
|
|
66
74
|
onToggleMonthDropdown = props.onToggleMonthDropdown,
|
|
67
75
|
onToggleTimeDropdown = props.onToggleTimeDropdown,
|
|
68
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "locale", "menuClassName", "appearance", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "toggleAs", "caretAs", "disabledDate", "renderValue", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown"]);
|
|
76
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "locale", "menuClassName", "appearance", "placement", "oneTap", "placeholder", "ranges", "value", "showMeridian", "showWeekNumbers", "style", "toggleAs", "caretAs", "disabledDate", "disabledHours", "disabledMinutes", "disabledSeconds", "shouldDisableDate", "shouldDisableHour", "shouldDisableMinute", "shouldDisableSecond", "renderValue", "onChange", "onChangeCalendarDate", "onClean", "onClose", "onEntered", "onExited", "onNextMonth", "onOk", "onOpen", "onPrevMonth", "onSelect", "onToggleMonthDropdown", "onToggleTimeDropdown"]);
|
|
69
77
|
|
|
70
78
|
var _useCustom = useCustom('DatePicker', overrideLocale),
|
|
71
79
|
locale = _useCustom.locale,
|
|
@@ -241,11 +249,17 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
241
249
|
updateValue(event, nextPageDate);
|
|
242
250
|
}
|
|
243
251
|
}, [formatStr, handleDateChange, oneTap, setCalendarDate, updateValue]);
|
|
244
|
-
var
|
|
245
|
-
|
|
252
|
+
var isDateDisabled = useCallback(function (date) {
|
|
253
|
+
if (typeof shouldDisableDate === 'function') {
|
|
254
|
+
return shouldDisableDate(date);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (typeof DEPRECATED_disabledDate === 'function') {
|
|
258
|
+
return DEPRECATED_disabledDate(date);
|
|
259
|
+
}
|
|
246
260
|
|
|
247
|
-
return
|
|
248
|
-
}, [
|
|
261
|
+
return false;
|
|
262
|
+
}, [DEPRECATED_disabledDate, shouldDisableDate]);
|
|
249
263
|
/**
|
|
250
264
|
* Callback after the input box value is changed.
|
|
251
265
|
*/
|
|
@@ -272,13 +286,13 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
272
286
|
return;
|
|
273
287
|
}
|
|
274
288
|
|
|
275
|
-
if (
|
|
289
|
+
if (isDateDisabled(date)) {
|
|
276
290
|
setInputState('Error');
|
|
277
291
|
return;
|
|
278
292
|
}
|
|
279
293
|
|
|
280
294
|
handleSelect(date, event, false);
|
|
281
|
-
}, [formatStr, locale, parseDate,
|
|
295
|
+
}, [formatStr, locale, parseDate, isDateDisabled, handleSelect]);
|
|
282
296
|
/**
|
|
283
297
|
* The callback after the enter key is triggered on the input
|
|
284
298
|
*/
|
|
@@ -300,12 +314,12 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
300
314
|
}, [onClose]); // Check whether the time is within the time range of the shortcut option in the toolbar.
|
|
301
315
|
|
|
302
316
|
var disabledToolbarHandle = useCallback(function (date) {
|
|
303
|
-
var
|
|
317
|
+
var _DEPRECATED_disabledD;
|
|
304
318
|
|
|
305
|
-
var allowDate = (
|
|
319
|
+
var allowDate = (_DEPRECATED_disabledD = DEPRECATED_disabledDate === null || DEPRECATED_disabledDate === void 0 ? void 0 : DEPRECATED_disabledDate(date)) !== null && _DEPRECATED_disabledD !== void 0 ? _DEPRECATED_disabledD : false;
|
|
306
320
|
var allowTime = DateUtils.disabledTime(props, date);
|
|
307
321
|
return allowDate || allowTime;
|
|
308
|
-
}, [
|
|
322
|
+
}, [DEPRECATED_disabledDate, props]);
|
|
309
323
|
/**
|
|
310
324
|
* Whether "OK" button is disabled
|
|
311
325
|
*
|
|
@@ -336,7 +350,10 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
336
350
|
locale: locale,
|
|
337
351
|
showWeekNumbers: showWeekNumbers,
|
|
338
352
|
showMeridian: showMeridian,
|
|
339
|
-
disabledDate:
|
|
353
|
+
disabledDate: isDateDisabled,
|
|
354
|
+
disabledHours: shouldDisableHour !== null && shouldDisableHour !== void 0 ? shouldDisableHour : DEPRECATED_disabledHours,
|
|
355
|
+
disabledMinutes: shouldDisableMinute !== null && shouldDisableMinute !== void 0 ? shouldDisableMinute : DEPRECATED_disabledMinutes,
|
|
356
|
+
disabledSeconds: shouldDisableSecond !== null && shouldDisableSecond !== void 0 ? shouldDisableSecond : DEPRECATED_disabledSeconds,
|
|
340
357
|
limitEndYear: limitEndYear,
|
|
341
358
|
format: formatStr,
|
|
342
359
|
isoWeek: isoWeek,
|
|
@@ -468,10 +485,14 @@ DatePicker.displayName = 'DatePicker';
|
|
|
468
485
|
DatePicker.propTypes = _extends({}, pickerPropTypes, {
|
|
469
486
|
calendarDefaultDate: PropTypes.instanceOf(Date),
|
|
470
487
|
defaultValue: PropTypes.instanceOf(Date),
|
|
471
|
-
disabledDate: PropTypes.func,
|
|
472
|
-
disabledHours: PropTypes.func,
|
|
473
|
-
disabledMinutes: PropTypes.func,
|
|
474
|
-
disabledSeconds: PropTypes.func,
|
|
488
|
+
disabledDate: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableDate" property instead.'),
|
|
489
|
+
disabledHours: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableHour" property instead.'),
|
|
490
|
+
disabledMinutes: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableMinute" property instead.'),
|
|
491
|
+
disabledSeconds: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableSecond" property instead.'),
|
|
492
|
+
shouldDisableDate: PropTypes.func,
|
|
493
|
+
shouldDisableHour: PropTypes.func,
|
|
494
|
+
shouldDisableMinute: PropTypes.func,
|
|
495
|
+
shouldDisableSecond: PropTypes.func,
|
|
475
496
|
format: PropTypes.string,
|
|
476
497
|
hideHours: PropTypes.func,
|
|
477
498
|
hideMinutes: PropTypes.func,
|
|
@@ -27,8 +27,16 @@ export interface DateRangePickerProps extends PickerBaseProps, FormControlBasePr
|
|
|
27
27
|
defaultCalendarValue?: DateRange;
|
|
28
28
|
/** The character that separates two dates */
|
|
29
29
|
character?: string;
|
|
30
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Disabled date
|
|
32
|
+
*
|
|
33
|
+
* @deprecated Use {@link shouldDisableDate} instead
|
|
34
|
+
*/
|
|
31
35
|
disabledDate?: DisabledDateFunction;
|
|
36
|
+
/**
|
|
37
|
+
* Whether a date cell is disabled
|
|
38
|
+
*/
|
|
39
|
+
shouldDisableDate?: DisabledDateFunction;
|
|
32
40
|
/** Called when the option is selected */
|
|
33
41
|
onSelect?: (date: Date, event?: React.SyntheticEvent) => void;
|
|
34
42
|
/** Called after clicking the OK button */
|
|
@@ -17,6 +17,8 @@ import { addMonths, compareAsc, isSameMonth, startOfDay, endOfDay, shouldRenderT
|
|
|
17
17
|
import Calendar from './Calendar';
|
|
18
18
|
import * as disabledDateUtils from './disabledDateUtils';
|
|
19
19
|
import { getSafeCalendarDate, getMonthHoverRange, getWeekHoverRange, isSameRange } from './utils';
|
|
20
|
+
import { deprecatePropTypeNew } from '../utils/deprecatePropType';
|
|
21
|
+
import DateRangePickerContext from './DateRangePickerContext';
|
|
20
22
|
var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
21
23
|
var _ref, _ref2, _merge;
|
|
22
24
|
|
|
@@ -36,7 +38,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
36
38
|
defaultCalendarValue = props.defaultCalendarValue,
|
|
37
39
|
defaultValue = props.defaultValue,
|
|
38
40
|
disabled = props.disabled,
|
|
39
|
-
|
|
41
|
+
DEPRECATED_disabledDateProp = props.disabledDate,
|
|
42
|
+
shouldDisableDate = props.shouldDisableDate,
|
|
40
43
|
_props$format = props.format,
|
|
41
44
|
formatStr = _props$format === void 0 ? 'yyyy-MM-dd' : _props$format,
|
|
42
45
|
hoverRange = props.hoverRange,
|
|
@@ -72,7 +75,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
72
75
|
onOpen = props.onOpen,
|
|
73
76
|
onSelect = props.onSelect,
|
|
74
77
|
renderTitle = props.renderTitle,
|
|
75
|
-
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "appearance", "editable", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect", "renderTitle"]);
|
|
78
|
+
rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "appearance", "editable", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "shouldDisableDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect", "renderTitle"]);
|
|
76
79
|
|
|
77
80
|
var _useClassNames = useClassNames(classPrefix),
|
|
78
81
|
merge = _useClassNames.merge,
|
|
@@ -96,7 +99,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
96
99
|
*/
|
|
97
100
|
|
|
98
101
|
|
|
99
|
-
var
|
|
102
|
+
var _useState = useState(true),
|
|
103
|
+
isSelectedIdle = _useState[0],
|
|
104
|
+
setSelectedIdle = _useState[1];
|
|
100
105
|
/**
|
|
101
106
|
* The currently selected date range.
|
|
102
107
|
*
|
|
@@ -106,25 +111,26 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
106
111
|
*
|
|
107
112
|
*/
|
|
108
113
|
|
|
109
|
-
var _useState = useState((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
|
|
110
|
-
selectedDates = _useState[0],
|
|
111
|
-
setSelectedDates = _useState[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
|
|
112
114
|
|
|
115
|
+
var _useState2 = useState((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
|
|
116
|
+
selectedDates = _useState2[0],
|
|
117
|
+
setSelectedDates = _useState2[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
|
|
113
118
|
|
|
114
|
-
var _useState2 = useState(null),
|
|
115
|
-
hoverDateRange = _useState2[0],
|
|
116
|
-
setHoverDateRange = _useState2[1]; // The displayed calendar panel is rendered based on this value.
|
|
117
119
|
|
|
120
|
+
var _useState3 = useState(null),
|
|
121
|
+
hoverDateRange = _useState3[0],
|
|
122
|
+
setHoverDateRange = _useState3[1]; // The displayed calendar panel is rendered based on this value.
|
|
118
123
|
|
|
119
|
-
|
|
124
|
+
|
|
125
|
+
var _useState4 = useState(getSafeCalendarDate({
|
|
120
126
|
value: (_ref2 = value !== null && value !== void 0 ? value : defaultCalendarValue) !== null && _ref2 !== void 0 ? _ref2 : null
|
|
121
127
|
})),
|
|
122
|
-
calendarDate =
|
|
123
|
-
setCalendarDate =
|
|
128
|
+
calendarDate = _useState4[0],
|
|
129
|
+
setCalendarDate = _useState4[1];
|
|
124
130
|
|
|
125
|
-
var
|
|
126
|
-
inputState =
|
|
127
|
-
setInputState =
|
|
131
|
+
var _useState5 = useState(),
|
|
132
|
+
inputState = _useState5[0],
|
|
133
|
+
setInputState = _useState5[1];
|
|
128
134
|
/**
|
|
129
135
|
* When hoverRange is set, `selectValue` will be updated during the hover process,
|
|
130
136
|
* which will cause the `selectValue` to be updated after the first click,
|
|
@@ -180,9 +186,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
180
186
|
setHoverDateRange(valueProp !== null && valueProp !== void 0 ? valueProp : null);
|
|
181
187
|
}, [valueProp]);
|
|
182
188
|
|
|
183
|
-
var
|
|
184
|
-
isPickerToggleActive =
|
|
185
|
-
setPickerToggleActive =
|
|
189
|
+
var _useState6 = useState(false),
|
|
190
|
+
isPickerToggleActive = _useState6[0],
|
|
191
|
+
setPickerToggleActive = _useState6[1];
|
|
186
192
|
|
|
187
193
|
var rootRef = useRef(null);
|
|
188
194
|
var overlayRef = useRef(null);
|
|
@@ -285,7 +291,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
285
291
|
// it means there's already one selected date
|
|
286
292
|
// and waiting for user to select the second date to complete the selection.
|
|
287
293
|
|
|
288
|
-
if (!
|
|
294
|
+
if (!isSelectedIdle) {
|
|
289
295
|
// If `hoverRange` is set, you need to change the value of hoverDateRange according to the rules
|
|
290
296
|
if (!isNil(nextHoverDateRange) && !isNil(selectRangeValueRef.current)) {
|
|
291
297
|
var nextSelectedDates = [selectRangeValueRef.current[0], nextHoverDateRange[1]];
|
|
@@ -304,7 +310,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
304
310
|
} else if (!isNil(nextHoverDateRange)) {
|
|
305
311
|
setHoverDateRange(nextHoverDateRange);
|
|
306
312
|
}
|
|
307
|
-
}, [getHoverRangeValue]);
|
|
313
|
+
}, [getHoverRangeValue, isSelectedIdle]);
|
|
308
314
|
/**
|
|
309
315
|
* Callback for selecting a date cell in the calendar grid
|
|
310
316
|
*/
|
|
@@ -315,23 +321,23 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
315
321
|
var hoverRangeValue = getHoverRangeValue(date);
|
|
316
322
|
var noHoverRangeValid = isNil(hoverRangeValue); // in `oneTap` mode
|
|
317
323
|
|
|
318
|
-
if (
|
|
324
|
+
if (isSelectedIdle && oneTap) {
|
|
319
325
|
handleValueUpdate(event, noHoverRangeValid ? [startOfDay(date), endOfDay(date)] : hoverRangeValue);
|
|
320
|
-
|
|
326
|
+
setSelectedIdle(false);
|
|
321
327
|
return;
|
|
322
328
|
} // no preset hover range can use
|
|
323
329
|
|
|
324
330
|
|
|
325
331
|
if (noHoverRangeValid) {
|
|
326
332
|
// start select
|
|
327
|
-
if (
|
|
333
|
+
if (isSelectedIdle) {
|
|
328
334
|
nextSelectDates = [date];
|
|
329
335
|
} else {
|
|
330
336
|
// finish select
|
|
331
337
|
nextSelectDates[1] = date;
|
|
332
338
|
}
|
|
333
339
|
} else {
|
|
334
|
-
if (!
|
|
340
|
+
if (!isSelectedIdle) {
|
|
335
341
|
nextSelectDates = selectedDates;
|
|
336
342
|
selectRangeValueRef.current = null;
|
|
337
343
|
} else {
|
|
@@ -368,8 +374,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
368
374
|
eventName: 'changeDate'
|
|
369
375
|
});
|
|
370
376
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
|
|
371
|
-
|
|
372
|
-
}, [formatStr, getCalendarDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
|
|
377
|
+
setSelectedIdle(!isSelectedIdle);
|
|
378
|
+
}, [formatStr, getCalendarDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, isSelectedIdle, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
|
|
373
379
|
/**
|
|
374
380
|
* If `selectValue` changed, there will be the following effects.
|
|
375
381
|
* 1. Check if the selection is completed.
|
|
@@ -445,7 +451,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
445
451
|
} // End unfinished selections.
|
|
446
452
|
|
|
447
453
|
|
|
448
|
-
|
|
454
|
+
setSelectedIdle(true);
|
|
449
455
|
}, [handleValueUpdate, updateCalendarDateRange]);
|
|
450
456
|
var handleOK = useCallback(function (event) {
|
|
451
457
|
handleValueUpdate(event, selectedDates);
|
|
@@ -532,19 +538,25 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
532
538
|
}, [onOpen]);
|
|
533
539
|
var handleExited = useCallback(function () {
|
|
534
540
|
setPickerToggleActive(false);
|
|
535
|
-
|
|
541
|
+
setSelectedIdle(true);
|
|
536
542
|
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
537
543
|
}, [onClose]);
|
|
538
544
|
var isDateDisabled = useCallback(function (date, selectDate, selectedDone, target) {
|
|
539
|
-
|
|
545
|
+
if (typeof shouldDisableDate === 'function') {
|
|
546
|
+
return shouldDisableDate(date, selectDate, selectedDone, target);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
if (typeof DEPRECATED_disabledDateProp === 'function') {
|
|
550
|
+
return DEPRECATED_disabledDateProp(date, selectDate, selectedDone, target);
|
|
551
|
+
}
|
|
540
552
|
|
|
541
|
-
return
|
|
542
|
-
}, [
|
|
553
|
+
return false;
|
|
554
|
+
}, [DEPRECATED_disabledDateProp, shouldDisableDate]);
|
|
543
555
|
var disabledByBetween = useCallback(function (start, end, type) {
|
|
544
556
|
// If the date is between the start and the end
|
|
545
557
|
// the button is disabled
|
|
546
558
|
while (DateUtils.isBefore(start, end) || DateUtils.isSameDay(start, end)) {
|
|
547
|
-
if (isDateDisabled(start, selectedDates,
|
|
559
|
+
if (isDateDisabled(start, selectedDates, isSelectedIdle, type)) {
|
|
548
560
|
return true;
|
|
549
561
|
}
|
|
550
562
|
|
|
@@ -552,17 +564,17 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
552
564
|
}
|
|
553
565
|
|
|
554
566
|
return false;
|
|
555
|
-
}, [isDateDisabled, selectedDates]);
|
|
567
|
+
}, [isDateDisabled, isSelectedIdle, selectedDates]);
|
|
556
568
|
var disabledOkButton = useCallback(function () {
|
|
557
569
|
var start = selectedDates[0],
|
|
558
570
|
end = selectedDates[1];
|
|
559
571
|
|
|
560
|
-
if (!start || !end || !
|
|
572
|
+
if (!start || !end || !isSelectedIdle) {
|
|
561
573
|
return true;
|
|
562
574
|
}
|
|
563
575
|
|
|
564
576
|
return disabledByBetween(start, end, DATERANGE_DISABLED_TARGET.TOOLBAR_BUTTON_OK);
|
|
565
|
-
}, [disabledByBetween, selectedDates]);
|
|
577
|
+
}, [disabledByBetween, isSelectedIdle, selectedDates]);
|
|
566
578
|
var disabledShortcutButton = useCallback(function (value) {
|
|
567
579
|
if (value === void 0) {
|
|
568
580
|
value = [];
|
|
@@ -579,8 +591,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
579
591
|
return disabledByBetween(start, end, DATERANGE_DISABLED_TARGET.TOOLBAR_SHORTCUT);
|
|
580
592
|
}, [disabledByBetween]);
|
|
581
593
|
var handleDisabledDate = useCallback(function (date, values, type) {
|
|
582
|
-
return isDateDisabled(date, values,
|
|
583
|
-
}, [isDateDisabled]);
|
|
594
|
+
return isDateDisabled(date, values, isSelectedIdle, type);
|
|
595
|
+
}, [isDateDisabled, isSelectedIdle]);
|
|
584
596
|
var onPickerKeyDown = useToggleKeyDownEvent(_extends({
|
|
585
597
|
triggerRef: triggerRef,
|
|
586
598
|
targetRef: targetRef,
|
|
@@ -651,11 +663,15 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
651
663
|
className: prefix('daterange-header')
|
|
652
664
|
}, getDisplayString(selectedDates)), /*#__PURE__*/React.createElement("div", {
|
|
653
665
|
className: prefix("daterange-calendar-" + (showOneCalendar ? 'single' : 'group'))
|
|
666
|
+
}, /*#__PURE__*/React.createElement(DateRangePickerContext.Provider, {
|
|
667
|
+
value: {
|
|
668
|
+
isSelectedIdle: isSelectedIdle
|
|
669
|
+
}
|
|
654
670
|
}, /*#__PURE__*/React.createElement(Calendar, _extends({
|
|
655
671
|
index: 0
|
|
656
672
|
}, calendarProps)), !showOneCalendar && /*#__PURE__*/React.createElement(Calendar, _extends({
|
|
657
673
|
index: 1
|
|
658
|
-
}, calendarProps)))), /*#__PURE__*/React.createElement(Toolbar, {
|
|
674
|
+
}, calendarProps))))), /*#__PURE__*/React.createElement(Toolbar, {
|
|
659
675
|
locale: locale,
|
|
660
676
|
calendarDate: selectedDates,
|
|
661
677
|
disabledOkBtn: disabledOkButton,
|
|
@@ -733,7 +749,8 @@ DateRangePicker.propTypes = _extends({}, pickerPropTypes, {
|
|
|
733
749
|
limitEndYear: PropTypes.number,
|
|
734
750
|
onChange: PropTypes.func,
|
|
735
751
|
onOk: PropTypes.func,
|
|
736
|
-
disabledDate: PropTypes.func,
|
|
752
|
+
disabledDate: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableDate" property instead.'),
|
|
753
|
+
shouldDisableDate: PropTypes.func,
|
|
737
754
|
onSelect: PropTypes.func,
|
|
738
755
|
showWeekNumbers: PropTypes.bool,
|
|
739
756
|
showMeridian: PropTypes.bool,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DateRangePickerContextValue {
|
|
3
|
+
isSelectedIdle?: boolean;
|
|
4
|
+
}
|
|
5
|
+
declare const DateRangePickerContext: React.Context<DateRangePickerContextValue>;
|
|
6
|
+
export default DateRangePickerContext;
|
|
7
|
+
export declare const useDateRangePickerContext: () => DateRangePickerContextValue;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
var DateRangePickerContext = /*#__PURE__*/React.createContext({});
|
|
3
|
+
export default DateRangePickerContext;
|
|
4
|
+
export var useDateRangePickerContext = function useDateRangePickerContext() {
|
|
5
|
+
return useContext(DateRangePickerContext) || {};
|
|
6
|
+
};
|
package/esm/Overlay/Modal.js
CHANGED
|
@@ -4,7 +4,6 @@ import React, { useRef, useEffect, useState, useCallback, useMemo } from 'react'
|
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import classNames from 'classnames';
|
|
6
6
|
import contains from 'dom-lib/contains';
|
|
7
|
-
import getContainer from 'dom-lib/getContainer';
|
|
8
7
|
import on from 'dom-lib/on';
|
|
9
8
|
import ModalManager from './ModalManager';
|
|
10
9
|
import Fade from '../Animation/Fade';
|
|
@@ -90,7 +89,8 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
90
89
|
var _usePortal = usePortal({
|
|
91
90
|
container: container
|
|
92
91
|
}),
|
|
93
|
-
Portal = _usePortal.Portal
|
|
92
|
+
Portal = _usePortal.Portal,
|
|
93
|
+
containerElement = _usePortal.target;
|
|
94
94
|
|
|
95
95
|
var modal = useModalManager();
|
|
96
96
|
|
|
@@ -141,8 +141,9 @@ var Modal = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
141
141
|
var documentKeyDownListener = useRef();
|
|
142
142
|
var documentFocusListener = useRef();
|
|
143
143
|
var handleOpen = useEventCallback(function () {
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
if (containerElement) {
|
|
145
|
+
modal.add(containerElement, containerClassName);
|
|
146
|
+
}
|
|
146
147
|
|
|
147
148
|
if (!documentKeyDownListener.current) {
|
|
148
149
|
documentKeyDownListener.current = on(document, 'keydown', handleDocumentKeyDown);
|