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.
Files changed (46) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/cjs/Affix/Affix.d.ts +5 -3
  3. package/cjs/Affix/Affix.js +33 -11
  4. package/cjs/Calendar/CalendarHeader.js +12 -3
  5. package/cjs/Cascader/Cascader.js +1 -1
  6. package/cjs/DatePicker/DatePicker.d.ts +34 -3
  7. package/cjs/DatePicker/DatePicker.js +38 -16
  8. package/cjs/DateRangePicker/DateRangePicker.d.ts +9 -1
  9. package/cjs/DateRangePicker/DateRangePicker.js +58 -39
  10. package/cjs/DateRangePicker/DateRangePickerContext.d.ts +7 -0
  11. package/cjs/DateRangePicker/DateRangePickerContext.js +19 -0
  12. package/cjs/Overlay/Modal.js +5 -5
  13. package/cjs/Overlay/OverlayTrigger.js +3 -2
  14. package/cjs/utils/dateUtils.d.ts +1 -0
  15. package/cjs/utils/dateUtils.js +10 -3
  16. package/cjs/utils/deprecatePropType.d.ts +5 -0
  17. package/cjs/utils/deprecatePropType.js +5 -0
  18. package/cjs/utils/usePortal.js +9 -12
  19. package/dist/rsuite-no-reset-rtl.css +16690 -0
  20. package/dist/rsuite-no-reset-rtl.min.css +2 -0
  21. package/dist/rsuite-no-reset-rtl.min.css.map +1 -0
  22. package/dist/rsuite-no-reset.css +16714 -0
  23. package/dist/rsuite-no-reset.min.css +2 -0
  24. package/dist/rsuite-no-reset.min.css.map +1 -0
  25. package/dist/rsuite.js +21 -10
  26. package/dist/rsuite.js.map +1 -1
  27. package/dist/rsuite.min.js +1 -1
  28. package/dist/rsuite.min.js.map +1 -1
  29. package/esm/Affix/Affix.d.ts +5 -3
  30. package/esm/Affix/Affix.js +32 -11
  31. package/esm/Calendar/CalendarHeader.js +11 -3
  32. package/esm/Cascader/Cascader.js +1 -1
  33. package/esm/DatePicker/DatePicker.d.ts +34 -3
  34. package/esm/DatePicker/DatePicker.js +37 -16
  35. package/esm/DateRangePicker/DateRangePicker.d.ts +9 -1
  36. package/esm/DateRangePicker/DateRangePicker.js +56 -39
  37. package/esm/DateRangePicker/DateRangePickerContext.d.ts +7 -0
  38. package/esm/DateRangePicker/DateRangePickerContext.js +6 -0
  39. package/esm/Overlay/Modal.js +5 -4
  40. package/esm/Overlay/OverlayTrigger.js +3 -2
  41. package/esm/utils/dateUtils.d.ts +1 -0
  42. package/esm/utils/dateUtils.js +10 -3
  43. package/esm/utils/deprecatePropType.d.ts +5 -0
  44. package/esm/utils/deprecatePropType.js +5 -0
  45. package/esm/utils/usePortal.js +10 -13
  46. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # [5.30.0](https://github.com/rsuite/rsuite/compare/v5.29.0...v5.30.0) (2023-03-31)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **Cascader:** fix infinite load state on inline mode and fix typo ([#3131](https://github.com/rsuite/rsuite/issues/3131)) ([faa05f0](https://github.com/rsuite/rsuite/commit/faa05f03df1ab890f0bcf13ebd173e52129400df))
6
+ - **DatePicker:** fix abnormal time display in the calendar header ([#3136](https://github.com/rsuite/rsuite/issues/3136)) ([860df1a](https://github.com/rsuite/rsuite/commit/860df1a7bd03b40371ac6891e45f3295b9edc72f))
7
+ - **DateRangePicker:** fix the error of invalid time during date selection ([#3135](https://github.com/rsuite/rsuite/issues/3135)) ([adeafdc](https://github.com/rsuite/rsuite/commit/adeafdc44162fd2ef9e2470094a52cb17b5cddb3))
8
+
9
+ # [5.29.0](https://github.com/rsuite/rsuite/compare/v5.28.3...v5.29.0) (2023-03-24)
10
+
11
+ ### Bug Fixes
12
+
13
+ - **Affix:** fix misalignment due to DOM content updates ([#3124](https://github.com/rsuite/rsuite/issues/3124)) ([76d21e9](https://github.com/rsuite/rsuite/commit/76d21e9e950da8c2df52d1fbc96abcada633d908))
14
+ - **Picker:** fix async container update cause offset error ([#3126](https://github.com/rsuite/rsuite/issues/3126)) ([c3e15c5](https://github.com/rsuite/rsuite/commit/c3e15c512319b0240236e35a5b28432bea1d25f3))
15
+
1
16
  ## [5.28.3](https://github.com/rsuite/rsuite/compare/v5.28.2...v5.28.3) (2023-03-17)
2
17
 
3
18
  ### Bug Fixes
@@ -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
- /** Specify the container. */
8
- container?: HTMLElement | (() => HTMLElement);
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;
@@ -15,6 +15,8 @@ var _react = _interopRequireWildcard(require("react"));
15
15
 
16
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
19
+
18
20
  var _getOffset = _interopRequireDefault(require("dom-lib/getOffset"));
19
21
 
20
22
  var _utils = require("../utils");
@@ -22,14 +24,26 @@ var _utils = require("../utils");
22
24
  /**
23
25
  * Get the layout size and offset of the mount element
24
26
  */
25
- function useOffset(mountRef) {
27
+ function useOffset(mountRef, onOffsetChange) {
26
28
  var _useState = (0, _react.useState)(null),
27
29
  offset = _useState[0],
28
30
  setOffset = _useState[1];
29
31
 
30
32
  var updateOffset = (0, _react.useCallback)(function () {
31
- setOffset((0, _getOffset.default)(mountRef.current));
32
- }, [mountRef]); // Update after the element size changes
33
+ if (!mountRef.current) {
34
+ return;
35
+ }
36
+
37
+ var newOffset = (0, _getOffset.default)(mountRef.current);
38
+
39
+ 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)) {
40
+ setOffset(newOffset);
41
+
42
+ if (offset !== null && newOffset !== null) {
43
+ onOffsetChange === null || onOffsetChange === void 0 ? void 0 : onOffsetChange(newOffset);
44
+ }
45
+ }
46
+ }, [mountRef, offset, onOffsetChange]); // Update after the element size changes
33
47
 
34
48
  (0, _utils.useElementResize)(function () {
35
49
  return mountRef.current;
@@ -37,7 +51,9 @@ function useOffset(mountRef) {
37
51
 
38
52
  (0, _utils.useMount)(updateOffset); // Update after window size changes
39
53
 
40
- (0, _utils.useEventListener)(window, 'resize', updateOffset, false);
54
+ (0, _utils.useEventListener)(window, 'resize', updateOffset, false); // Update after window scroll
55
+
56
+ (0, _utils.useEventListener)(window, 'scroll', (0, _debounce.default)(updateOffset, 100), false);
41
57
  return offset;
42
58
  }
43
59
  /**
@@ -80,7 +96,7 @@ function useFixed(offset, containerOffset, props) {
80
96
 
81
97
  var scrollY = window.scrollY || window.pageYOffset; // When the scroll distance exceeds the element's top value, it is fixed.
82
98
 
83
- var nextFixed = scrollY - (Number(offset.top) - Number(top)) >= 0; // If the current element is specified in the container,
99
+ 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,
84
100
  // add to determine whether the current container is in the window range.
85
101
 
86
102
  if (containerOffset) {
@@ -91,7 +107,7 @@ function useFixed(offset, containerOffset, props) {
91
107
  setFixed(nextFixed);
92
108
  onChange === null || onChange === void 0 ? void 0 : onChange(nextFixed);
93
109
  }
94
- }, [fixed, offset, containerOffset, onChange, top]); // Add scroll event to window
110
+ }, [offset, top, containerOffset, fixed, onChange]); // Add scroll event to window
95
111
 
96
112
  (0, _utils.useEventListener)(window, 'scroll', handleScroll, false);
97
113
  return fixed;
@@ -110,9 +126,10 @@ var Affix = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
110
126
  _props$top = props.top,
111
127
  top = _props$top === void 0 ? 0 : _props$top,
112
128
  onChange = props.onChange,
113
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "children", "container", "top", "onChange"]);
129
+ onOffsetChange = props.onOffsetChange,
130
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "children", "container", "top", "onChange", "onOffsetChange"]);
114
131
  var mountRef = (0, _react.useRef)(null);
115
- var offset = useOffset(mountRef);
132
+ var offset = useOffset(mountRef, onOffsetChange);
116
133
  var containerOffset = useContainerOffset(container);
117
134
  var fixed = useFixed(offset, containerOffset, {
118
135
  top: top,
@@ -124,14 +141,19 @@ var Affix = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
124
141
  merge = _useClassNames.merge;
125
142
 
126
143
  var classes = merge(className, (_merge = {}, _merge[withClassPrefix()] = fixed, _merge));
144
+
145
+ var _ref = offset || {},
146
+ width = _ref.width,
147
+ height = _ref.height;
148
+
127
149
  var placeholderStyles = fixed ? {
128
- width: offset === null || offset === void 0 ? void 0 : offset.width,
129
- height: offset === null || offset === void 0 ? void 0 : offset.height
150
+ width: width,
151
+ height: height
130
152
  } : undefined;
131
153
  var fixedStyles = {
132
154
  position: 'fixed',
133
155
  top: top,
134
- width: offset === null || offset === void 0 ? void 0 : offset.width,
156
+ width: width,
135
157
  zIndex: 10
136
158
  };
137
159
  var affixStyles = fixed ? fixedStyles : undefined;
@@ -29,6 +29,8 @@ var _CustomProvider = require("../CustomProvider");
29
29
 
30
30
  var _CalendarContext = require("./CalendarContext");
31
31
 
32
+ var _DateRangePickerContext = require("../DateRangePicker/DateRangePickerContext");
33
+
32
34
  var CalendarHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
33
35
  var _props$as = props.as,
34
36
  Component = _props$as === void 0 ? 'div' : _props$as,
@@ -59,6 +61,9 @@ var CalendarHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref
59
61
  inline = _useCalendarContext.inline,
60
62
  disabledDate = _useCalendarContext.disabledDate;
61
63
 
64
+ var _useDateRangePickerCo = (0, _DateRangePickerContext.useDateRangePickerContext)(),
65
+ isSelectedIdle = _useDateRangePickerCo.isSelectedIdle;
66
+
62
67
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
63
68
  prefix = _useClassNames.prefix,
64
69
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -136,7 +141,9 @@ var CalendarHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref
136
141
  var classes = merge(className, withClassPrefix({
137
142
  'has-month': hasMonth,
138
143
  'has-time': showTime
139
- }));
144
+ })); // If the date is not selected, the time cannot be selected (it only works in DateRangePicker).
145
+
146
+ var disableSelectTime = typeof isSelectedIdle === 'undefined' ? false : !isSelectedIdle;
140
147
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
141
148
  ref: ref,
142
149
  className: classes
@@ -144,13 +151,15 @@ var CalendarHeader = /*#__PURE__*/_react.default.forwardRef(function (props, ref
144
151
  className: prefix('time-toolbar')
145
152
  }, /*#__PURE__*/_react.default.createElement(_Button.default, (0, _extends2.default)({}, btnProps, {
146
153
  className: timeTitleClasses,
147
- onClick: onToggleTimeDropdown
154
+ onClick: onToggleTimeDropdown,
155
+ disabled: disableSelectTime
148
156
  }), date && /*#__PURE__*/_react.default.createElement(_CustomProvider.FormattedDate, {
149
157
  date: date,
150
158
  formatStr: getTimeFormat()
151
159
  })), showMeridian && /*#__PURE__*/_react.default.createElement(_Button.default, (0, _extends2.default)({}, btnProps, {
152
160
  className: prefix('meridian'),
153
- onClick: onToggleMeridian
161
+ onClick: onToggleMeridian,
162
+ disabled: disableSelectTime
154
163
  }), date && /*#__PURE__*/_react.default.createElement(_CustomProvider.FormattedDate, {
155
164
  date: date,
156
165
  formatStr: "a"
@@ -295,7 +295,7 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
295
295
  node.loading = false;
296
296
  node[childrenKey] = data;
297
297
 
298
- if (targetRef.current) {
298
+ if (targetRef.current || inline) {
299
299
  addColumn(data, columnIndex);
300
300
  }
301
301
  });
@@ -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
- /** Disabled hours */
39
+ /**
40
+ * Disabled hours
41
+ *
42
+ * @deprecated Use {@link shouldDisableHour} instead
43
+ */
39
44
  disabledHours?: (hour: number, date: Date) => boolean;
40
- /** Disabled minutes */
45
+ /**
46
+ * Disabled minutes
47
+ *
48
+ * @deprecated Use {@link shouldDisableMinute} instead
49
+ */
41
50
  disabledMinutes?: (minute: number, date: Date) => boolean;
42
- /** Disabled seconds */
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 */
@@ -43,6 +43,8 @@ var _Picker = require("../Picker");
43
43
 
44
44
  var _OverlayTrigger = require("../Overlay/OverlayTrigger");
45
45
 
46
+ var _deprecatePropType = require("../utils/deprecatePropType");
47
+
46
48
  var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
47
49
  var _props$as = props.as,
48
50
  Component = _props$as === void 0 ? 'div' : _props$as,
@@ -77,7 +79,14 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
77
79
  style = props.style,
78
80
  toggleAs = props.toggleAs,
79
81
  caretAsProp = props.caretAs,
80
- disabledDateProp = props.disabledDate,
82
+ DEPRECATED_disabledDate = props.disabledDate,
83
+ DEPRECATED_disabledHours = props.disabledHours,
84
+ DEPRECATED_disabledMinutes = props.disabledMinutes,
85
+ DEPRECATED_disabledSeconds = props.disabledSeconds,
86
+ shouldDisableDate = props.shouldDisableDate,
87
+ shouldDisableHour = props.shouldDisableHour,
88
+ shouldDisableMinute = props.shouldDisableMinute,
89
+ shouldDisableSecond = props.shouldDisableSecond,
81
90
  renderValue = props.renderValue,
82
91
  onChange = props.onChange,
83
92
  onChangeCalendarDate = props.onChangeCalendarDate,
@@ -92,7 +101,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
92
101
  onSelect = props.onSelect,
93
102
  onToggleMonthDropdown = props.onToggleMonthDropdown,
94
103
  onToggleTimeDropdown = props.onToggleTimeDropdown,
95
- rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
104
+ rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
96
105
 
97
106
  var _useCustom = (0, _utils.useCustom)('DatePicker', overrideLocale),
98
107
  locale = _useCustom.locale,
@@ -271,11 +280,17 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
271
280
  updateValue(event, nextPageDate);
272
281
  }
273
282
  }, [formatStr, handleDateChange, oneTap, setCalendarDate, updateValue]);
274
- var disabledDate = (0, _react.useCallback)(function (date) {
275
- var _disabledDateProp;
283
+ var isDateDisabled = (0, _react.useCallback)(function (date) {
284
+ if (typeof shouldDisableDate === 'function') {
285
+ return shouldDisableDate(date);
286
+ }
287
+
288
+ if (typeof DEPRECATED_disabledDate === 'function') {
289
+ return DEPRECATED_disabledDate(date);
290
+ }
276
291
 
277
- return (_disabledDateProp = disabledDateProp === null || disabledDateProp === void 0 ? void 0 : disabledDateProp(date)) !== null && _disabledDateProp !== void 0 ? _disabledDateProp : false;
278
- }, [disabledDateProp]);
292
+ return false;
293
+ }, [DEPRECATED_disabledDate, shouldDisableDate]);
279
294
  /**
280
295
  * Callback after the input box value is changed.
281
296
  */
@@ -302,13 +317,13 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
302
317
  return;
303
318
  }
304
319
 
305
- if (disabledDate(date)) {
320
+ if (isDateDisabled(date)) {
306
321
  setInputState('Error');
307
322
  return;
308
323
  }
309
324
 
310
325
  handleSelect(date, event, false);
311
- }, [formatStr, locale, parseDate, disabledDate, handleSelect]);
326
+ }, [formatStr, locale, parseDate, isDateDisabled, handleSelect]);
312
327
  /**
313
328
  * The callback after the enter key is triggered on the input
314
329
  */
@@ -330,14 +345,14 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
330
345
  }, [onClose]); // Check whether the time is within the time range of the shortcut option in the toolbar.
331
346
 
332
347
  var disabledToolbarHandle = (0, _react.useCallback)(function (date) {
333
- var _disabledDateProp2;
348
+ var _DEPRECATED_disabledD;
334
349
 
335
- var allowDate = (_disabledDateProp2 = disabledDateProp === null || disabledDateProp === void 0 ? void 0 : disabledDateProp(date)) !== null && _disabledDateProp2 !== void 0 ? _disabledDateProp2 : false;
350
+ var allowDate = (_DEPRECATED_disabledD = DEPRECATED_disabledDate === null || DEPRECATED_disabledDate === void 0 ? void 0 : DEPRECATED_disabledDate(date)) !== null && _DEPRECATED_disabledD !== void 0 ? _DEPRECATED_disabledD : false;
336
351
 
337
352
  var allowTime = _utils.DateUtils.disabledTime(props, date);
338
353
 
339
354
  return allowDate || allowTime;
340
- }, [disabledDateProp, props]);
355
+ }, [DEPRECATED_disabledDate, props]);
341
356
  /**
342
357
  * Whether "OK" button is disabled
343
358
  *
@@ -369,7 +384,10 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
369
384
  locale: locale,
370
385
  showWeekNumbers: showWeekNumbers,
371
386
  showMeridian: showMeridian,
372
- disabledDate: disabledDate,
387
+ disabledDate: isDateDisabled,
388
+ disabledHours: shouldDisableHour !== null && shouldDisableHour !== void 0 ? shouldDisableHour : DEPRECATED_disabledHours,
389
+ disabledMinutes: shouldDisableMinute !== null && shouldDisableMinute !== void 0 ? shouldDisableMinute : DEPRECATED_disabledMinutes,
390
+ disabledSeconds: shouldDisableSecond !== null && shouldDisableSecond !== void 0 ? shouldDisableSecond : DEPRECATED_disabledSeconds,
373
391
  limitEndYear: limitEndYear,
374
392
  format: formatStr,
375
393
  isoWeek: isoWeek,
@@ -503,10 +521,14 @@ DatePicker.displayName = 'DatePicker';
503
521
  DatePicker.propTypes = (0, _extends2.default)({}, _Picker.pickerPropTypes, {
504
522
  calendarDefaultDate: _propTypes.default.instanceOf(Date),
505
523
  defaultValue: _propTypes.default.instanceOf(Date),
506
- disabledDate: _propTypes.default.func,
507
- disabledHours: _propTypes.default.func,
508
- disabledMinutes: _propTypes.default.func,
509
- disabledSeconds: _propTypes.default.func,
524
+ disabledDate: (0, _deprecatePropType.deprecatePropTypeNew)(_propTypes.default.func, 'Use "shouldDisableDate" property instead.'),
525
+ disabledHours: (0, _deprecatePropType.deprecatePropTypeNew)(_propTypes.default.func, 'Use "shouldDisableHour" property instead.'),
526
+ disabledMinutes: (0, _deprecatePropType.deprecatePropTypeNew)(_propTypes.default.func, 'Use "shouldDisableMinute" property instead.'),
527
+ disabledSeconds: (0, _deprecatePropType.deprecatePropTypeNew)(_propTypes.default.func, 'Use "shouldDisableSecond" property instead.'),
528
+ shouldDisableDate: _propTypes.default.func,
529
+ shouldDisableHour: _propTypes.default.func,
530
+ shouldDisableMinute: _propTypes.default.func,
531
+ shouldDisableSecond: _propTypes.default.func,
510
532
  format: _propTypes.default.string,
511
533
  hideHours: _propTypes.default.func,
512
534
  hideMinutes: _propTypes.default.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
- /** Disabled date */
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 */
@@ -45,6 +45,10 @@ var disabledDateUtils = _interopRequireWildcard(require("./disabledDateUtils"));
45
45
 
46
46
  var _utils2 = require("./utils");
47
47
 
48
+ var _deprecatePropType = require("../utils/deprecatePropType");
49
+
50
+ var _DateRangePickerContext = _interopRequireDefault(require("./DateRangePickerContext"));
51
+
48
52
  var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
49
53
  var _ref, _ref2, _merge;
50
54
 
@@ -64,7 +68,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
64
68
  defaultCalendarValue = props.defaultCalendarValue,
65
69
  defaultValue = props.defaultValue,
66
70
  disabled = props.disabled,
67
- disabledDateProp = props.disabledDate,
71
+ DEPRECATED_disabledDateProp = props.disabledDate,
72
+ shouldDisableDate = props.shouldDisableDate,
68
73
  _props$format = props.format,
69
74
  formatStr = _props$format === void 0 ? 'yyyy-MM-dd' : _props$format,
70
75
  hoverRange = props.hoverRange,
@@ -100,7 +105,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
100
105
  onOpen = props.onOpen,
101
106
  onSelect = props.onSelect,
102
107
  renderTitle = props.renderTitle,
103
- rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
108
+ rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
104
109
 
105
110
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
106
111
  merge = _useClassNames.merge,
@@ -124,7 +129,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
124
129
  */
125
130
 
126
131
 
127
- var hasDoneSelect = (0, _react.useRef)(true);
132
+ var _useState = (0, _react.useState)(true),
133
+ isSelectedIdle = _useState[0],
134
+ setSelectedIdle = _useState[1];
128
135
  /**
129
136
  * The currently selected date range.
130
137
  *
@@ -134,25 +141,26 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
134
141
  *
135
142
  */
136
143
 
137
- var _useState = (0, _react.useState)((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
138
- selectedDates = _useState[0],
139
- setSelectedDates = _useState[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
140
144
 
145
+ var _useState2 = (0, _react.useState)((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
146
+ selectedDates = _useState2[0],
147
+ setSelectedDates = _useState2[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
141
148
 
142
- var _useState2 = (0, _react.useState)(null),
143
- hoverDateRange = _useState2[0],
144
- setHoverDateRange = _useState2[1]; // The displayed calendar panel is rendered based on this value.
145
149
 
150
+ var _useState3 = (0, _react.useState)(null),
151
+ hoverDateRange = _useState3[0],
152
+ setHoverDateRange = _useState3[1]; // The displayed calendar panel is rendered based on this value.
146
153
 
147
- var _useState3 = (0, _react.useState)((0, _utils2.getSafeCalendarDate)({
154
+
155
+ var _useState4 = (0, _react.useState)((0, _utils2.getSafeCalendarDate)({
148
156
  value: (_ref2 = value !== null && value !== void 0 ? value : defaultCalendarValue) !== null && _ref2 !== void 0 ? _ref2 : null
149
157
  })),
150
- calendarDate = _useState3[0],
151
- setCalendarDate = _useState3[1];
158
+ calendarDate = _useState4[0],
159
+ setCalendarDate = _useState4[1];
152
160
 
153
- var _useState4 = (0, _react.useState)(),
154
- inputState = _useState4[0],
155
- setInputState = _useState4[1];
161
+ var _useState5 = (0, _react.useState)(),
162
+ inputState = _useState5[0],
163
+ setInputState = _useState5[1];
156
164
  /**
157
165
  * When hoverRange is set, `selectValue` will be updated during the hover process,
158
166
  * which will cause the `selectValue` to be updated after the first click,
@@ -208,9 +216,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
208
216
  setHoverDateRange(valueProp !== null && valueProp !== void 0 ? valueProp : null);
209
217
  }, [valueProp]);
210
218
 
211
- var _useState5 = (0, _react.useState)(false),
212
- isPickerToggleActive = _useState5[0],
213
- setPickerToggleActive = _useState5[1];
219
+ var _useState6 = (0, _react.useState)(false),
220
+ isPickerToggleActive = _useState6[0],
221
+ setPickerToggleActive = _useState6[1];
214
222
 
215
223
  var rootRef = (0, _react.useRef)(null);
216
224
  var overlayRef = (0, _react.useRef)(null);
@@ -313,7 +321,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
313
321
  // it means there's already one selected date
314
322
  // and waiting for user to select the second date to complete the selection.
315
323
 
316
- if (!hasDoneSelect.current) {
324
+ if (!isSelectedIdle) {
317
325
  // If `hoverRange` is set, you need to change the value of hoverDateRange according to the rules
318
326
  if (!(0, _isNil.default)(nextHoverDateRange) && !(0, _isNil.default)(selectRangeValueRef.current)) {
319
327
  var nextSelectedDates = [selectRangeValueRef.current[0], nextHoverDateRange[1]];
@@ -332,7 +340,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
332
340
  } else if (!(0, _isNil.default)(nextHoverDateRange)) {
333
341
  setHoverDateRange(nextHoverDateRange);
334
342
  }
335
- }, [getHoverRangeValue]);
343
+ }, [getHoverRangeValue, isSelectedIdle]);
336
344
  /**
337
345
  * Callback for selecting a date cell in the calendar grid
338
346
  */
@@ -343,23 +351,23 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
343
351
  var hoverRangeValue = getHoverRangeValue(date);
344
352
  var noHoverRangeValid = (0, _isNil.default)(hoverRangeValue); // in `oneTap` mode
345
353
 
346
- if (hasDoneSelect.current && oneTap) {
354
+ if (isSelectedIdle && oneTap) {
347
355
  handleValueUpdate(event, noHoverRangeValid ? [(0, _dateUtils.startOfDay)(date), (0, _dateUtils.endOfDay)(date)] : hoverRangeValue);
348
- hasDoneSelect.current = false;
356
+ setSelectedIdle(false);
349
357
  return;
350
358
  } // no preset hover range can use
351
359
 
352
360
 
353
361
  if (noHoverRangeValid) {
354
362
  // start select
355
- if (hasDoneSelect.current) {
363
+ if (isSelectedIdle) {
356
364
  nextSelectDates = [date];
357
365
  } else {
358
366
  // finish select
359
367
  nextSelectDates[1] = date;
360
368
  }
361
369
  } else {
362
- if (!hasDoneSelect.current) {
370
+ if (!isSelectedIdle) {
363
371
  nextSelectDates = selectedDates;
364
372
  selectRangeValueRef.current = null;
365
373
  } else {
@@ -396,8 +404,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
396
404
  eventName: 'changeDate'
397
405
  });
398
406
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
399
- hasDoneSelect.current = !hasDoneSelect.current;
400
- }, [formatStr, getCalendarDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
407
+ setSelectedIdle(!isSelectedIdle);
408
+ }, [formatStr, getCalendarDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, isSelectedIdle, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
401
409
  /**
402
410
  * If `selectValue` changed, there will be the following effects.
403
411
  * 1. Check if the selection is completed.
@@ -473,7 +481,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
473
481
  } // End unfinished selections.
474
482
 
475
483
 
476
- hasDoneSelect.current = true;
484
+ setSelectedIdle(true);
477
485
  }, [handleValueUpdate, updateCalendarDateRange]);
478
486
  var handleOK = (0, _react.useCallback)(function (event) {
479
487
  handleValueUpdate(event, selectedDates);
@@ -560,19 +568,25 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
560
568
  }, [onOpen]);
561
569
  var handleExited = (0, _react.useCallback)(function () {
562
570
  setPickerToggleActive(false);
563
- hasDoneSelect.current = true;
571
+ setSelectedIdle(true);
564
572
  onClose === null || onClose === void 0 ? void 0 : onClose();
565
573
  }, [onClose]);
566
574
  var isDateDisabled = (0, _react.useCallback)(function (date, selectDate, selectedDone, target) {
567
- var _disabledDateProp;
575
+ if (typeof shouldDisableDate === 'function') {
576
+ return shouldDisableDate(date, selectDate, selectedDone, target);
577
+ }
568
578
 
569
- return (_disabledDateProp = disabledDateProp === null || disabledDateProp === void 0 ? void 0 : disabledDateProp(date, selectDate, selectedDone, target)) !== null && _disabledDateProp !== void 0 ? _disabledDateProp : false;
570
- }, [disabledDateProp]);
579
+ if (typeof DEPRECATED_disabledDateProp === 'function') {
580
+ return DEPRECATED_disabledDateProp(date, selectDate, selectedDone, target);
581
+ }
582
+
583
+ return false;
584
+ }, [DEPRECATED_disabledDateProp, shouldDisableDate]);
571
585
  var disabledByBetween = (0, _react.useCallback)(function (start, end, type) {
572
586
  // If the date is between the start and the end
573
587
  // the button is disabled
574
588
  while (_utils.DateUtils.isBefore(start, end) || _utils.DateUtils.isSameDay(start, end)) {
575
- if (isDateDisabled(start, selectedDates, hasDoneSelect.current, type)) {
589
+ if (isDateDisabled(start, selectedDates, isSelectedIdle, type)) {
576
590
  return true;
577
591
  }
578
592
 
@@ -580,17 +594,17 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
580
594
  }
581
595
 
582
596
  return false;
583
- }, [isDateDisabled, selectedDates]);
597
+ }, [isDateDisabled, isSelectedIdle, selectedDates]);
584
598
  var disabledOkButton = (0, _react.useCallback)(function () {
585
599
  var start = selectedDates[0],
586
600
  end = selectedDates[1];
587
601
 
588
- if (!start || !end || !hasDoneSelect.current) {
602
+ if (!start || !end || !isSelectedIdle) {
589
603
  return true;
590
604
  }
591
605
 
592
606
  return disabledByBetween(start, end, _utils.DATERANGE_DISABLED_TARGET.TOOLBAR_BUTTON_OK);
593
- }, [disabledByBetween, selectedDates]);
607
+ }, [disabledByBetween, isSelectedIdle, selectedDates]);
594
608
  var disabledShortcutButton = (0, _react.useCallback)(function (value) {
595
609
  if (value === void 0) {
596
610
  value = [];
@@ -607,8 +621,8 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
607
621
  return disabledByBetween(start, end, _utils.DATERANGE_DISABLED_TARGET.TOOLBAR_SHORTCUT);
608
622
  }, [disabledByBetween]);
609
623
  var handleDisabledDate = (0, _react.useCallback)(function (date, values, type) {
610
- return isDateDisabled(date, values, hasDoneSelect.current, type);
611
- }, [isDateDisabled]);
624
+ return isDateDisabled(date, values, isSelectedIdle, type);
625
+ }, [isDateDisabled, isSelectedIdle]);
612
626
  var onPickerKeyDown = (0, _Picker.useToggleKeyDownEvent)((0, _extends2.default)({
613
627
  triggerRef: triggerRef,
614
628
  targetRef: targetRef,
@@ -677,11 +691,15 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
677
691
  className: prefix('daterange-header')
678
692
  }, getDisplayString(selectedDates)), /*#__PURE__*/_react.default.createElement("div", {
679
693
  className: prefix("daterange-calendar-" + (showOneCalendar ? 'single' : 'group'))
694
+ }, /*#__PURE__*/_react.default.createElement(_DateRangePickerContext.default.Provider, {
695
+ value: {
696
+ isSelectedIdle: isSelectedIdle
697
+ }
680
698
  }, /*#__PURE__*/_react.default.createElement(_Calendar2.default, (0, _extends2.default)({
681
699
  index: 0
682
700
  }, calendarProps)), !showOneCalendar && /*#__PURE__*/_react.default.createElement(_Calendar2.default, (0, _extends2.default)({
683
701
  index: 1
684
- }, calendarProps)))), /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
702
+ }, calendarProps))))), /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
685
703
  locale: locale,
686
704
  calendarDate: selectedDates,
687
705
  disabledOkBtn: disabledOkButton,
@@ -760,7 +778,8 @@ DateRangePicker.propTypes = (0, _extends2.default)({}, _Picker.pickerPropTypes,
760
778
  limitEndYear: _propTypes.default.number,
761
779
  onChange: _propTypes.default.func,
762
780
  onOk: _propTypes.default.func,
763
- disabledDate: _propTypes.default.func,
781
+ disabledDate: (0, _deprecatePropType.deprecatePropTypeNew)(_propTypes.default.func, 'Use "shouldDisableDate" property instead.'),
782
+ shouldDisableDate: _propTypes.default.func,
764
783
  onSelect: _propTypes.default.func,
765
784
  showWeekNumbers: _propTypes.default.bool,
766
785
  showMeridian: _propTypes.default.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;