rsuite 5.43.0 → 5.44.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 (61) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/Picker/styles/index.less +0 -4
  3. package/cjs/Cascader/Cascader.d.ts +2 -2
  4. package/cjs/CheckPicker/CheckPicker.d.ts +1 -1
  5. package/cjs/CheckTreePicker/CheckTreePicker.d.ts +1 -1
  6. package/cjs/CheckTreePicker/CheckTreePicker.js +2 -2
  7. package/cjs/DatePicker/DatePicker.d.ts +3 -1
  8. package/cjs/DatePicker/DatePicker.js +18 -5
  9. package/cjs/DatePicker/PredefinedRanges.d.ts +2 -2
  10. package/cjs/DatePicker/PredefinedRanges.js +8 -8
  11. package/cjs/DatePicker/Toolbar.js +4 -4
  12. package/cjs/DateRangePicker/DateRangePicker.d.ts +3 -1
  13. package/cjs/DateRangePicker/DateRangePicker.js +18 -5
  14. package/cjs/DateRangePicker/types.d.ts +2 -2
  15. package/cjs/InputPicker/InputPicker.d.ts +1 -1
  16. package/cjs/InputPicker/InputPicker.js +1 -1
  17. package/cjs/MultiCascader/MultiCascader.d.ts +2 -2
  18. package/cjs/Picker/PickerToggle.d.ts +2 -0
  19. package/cjs/Picker/PickerToggle.js +10 -4
  20. package/cjs/Picker/utils.js +3 -2
  21. package/cjs/SelectPicker/SelectPicker.d.ts +1 -3
  22. package/cjs/TreePicker/TreePicker.d.ts +1 -1
  23. package/cjs/toaster/useToaster.js +22 -19
  24. package/dist/rsuite-no-reset-rtl.css +0 -3
  25. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  26. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  27. package/dist/rsuite-no-reset.css +0 -3
  28. package/dist/rsuite-no-reset.min.css +1 -1
  29. package/dist/rsuite-no-reset.min.css.map +1 -1
  30. package/dist/rsuite-rtl.css +0 -3
  31. package/dist/rsuite-rtl.min.css +1 -1
  32. package/dist/rsuite-rtl.min.css.map +1 -1
  33. package/dist/rsuite.css +0 -3
  34. package/dist/rsuite.js +27 -16
  35. package/dist/rsuite.js.map +1 -1
  36. package/dist/rsuite.min.css +1 -1
  37. package/dist/rsuite.min.css.map +1 -1
  38. package/dist/rsuite.min.js +1 -1
  39. package/dist/rsuite.min.js.map +1 -1
  40. package/esm/Cascader/Cascader.d.ts +2 -2
  41. package/esm/CheckPicker/CheckPicker.d.ts +1 -1
  42. package/esm/CheckTreePicker/CheckTreePicker.d.ts +1 -1
  43. package/esm/CheckTreePicker/CheckTreePicker.js +2 -2
  44. package/esm/DatePicker/DatePicker.d.ts +3 -1
  45. package/esm/DatePicker/DatePicker.js +18 -5
  46. package/esm/DatePicker/PredefinedRanges.d.ts +2 -2
  47. package/esm/DatePicker/PredefinedRanges.js +8 -8
  48. package/esm/DatePicker/Toolbar.js +4 -4
  49. package/esm/DateRangePicker/DateRangePicker.d.ts +3 -1
  50. package/esm/DateRangePicker/DateRangePicker.js +18 -5
  51. package/esm/DateRangePicker/types.d.ts +2 -2
  52. package/esm/InputPicker/InputPicker.d.ts +1 -1
  53. package/esm/InputPicker/InputPicker.js +1 -1
  54. package/esm/MultiCascader/MultiCascader.d.ts +2 -2
  55. package/esm/Picker/PickerToggle.d.ts +2 -0
  56. package/esm/Picker/PickerToggle.js +10 -4
  57. package/esm/Picker/utils.js +3 -2
  58. package/esm/SelectPicker/SelectPicker.d.ts +1 -3
  59. package/esm/TreePicker/TreePicker.d.ts +1 -1
  60. package/esm/toaster/useToaster.js +22 -19
  61. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # [5.44.0](https://github.com/rsuite/rsuite/compare/5.43.0...5.44.0) (2023-11-10)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **DatePicker,DateRangePicker:** fix inability to clear values via Backspace key ([#3446](https://github.com/rsuite/rsuite/issues/3446)) ([ca7dcdd](https://github.com/rsuite/rsuite/commit/ca7dcddb1406b8d6a20ff4ad11755fbac83be07e))
6
+ - **toaster:** fix useToaster not keep same reference when re-renders ([#3440](https://github.com/rsuite/rsuite/issues/3440)) ([a603033](https://github.com/rsuite/rsuite/commit/a603033eeb0a1de2299938c506fb42ee13375f2c))
7
+
8
+ ### Features
9
+
10
+ - add loading prop for all pickers ([#3444](https://github.com/rsuite/rsuite/issues/3444)) ([3c5b2af](https://github.com/rsuite/rsuite/commit/3c5b2af3658bb44c8eb22f1c59f8a9c989c7e62e))
11
+ - **DatePicker,DateRangePicker:** add support for onShortcutClick ([#3439](https://github.com/rsuite/rsuite/issues/3439)) ([ae00f90](https://github.com/rsuite/rsuite/commit/ae00f9045fd7dba95739f1f3fc8a21d671b6875b))
12
+
1
13
  # [5.43.0](https://github.com/rsuite/rsuite/compare/5.42.0...5.43.0) (2023-11-03)
2
14
 
3
15
  ### Bug Fixes
@@ -18,10 +18,6 @@
18
18
  max-width: 100%;
19
19
  }
20
20
 
21
- &-toggle {
22
- min-width: 75px;
23
- }
24
-
25
21
  &-toggle.rs-btn {
26
22
  .rs-ripple-pond {
27
23
  display: none !important;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerHandle } from '../Picker';
3
+ import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
5
5
  export declare type ValueType = number | string;
6
- export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T | null, PickerLocale, ItemDataType<T>> {
6
+ export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T | null, PickerLocale, ItemDataType<T>>, Pick<PickerToggleProps, 'loading'> {
7
7
  /** Sets the width of the menu */
8
8
  menuWidth?: number;
9
9
  /** Sets the height of the menu */
@@ -4,7 +4,7 @@ import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ItemDataType, FormControlPickerProps } from '../@types/common';
5
5
  import type { MultipleSelectProps } from '../SelectPicker';
6
6
  export declare type ValueType = (number | string)[];
7
- export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerLocale, ItemDataType<T>>, MultipleSelectProps<T>, Pick<PickerToggleProps, 'label' | 'caretAs'> {
7
+ export interface CheckPickerProps<T> extends FormControlPickerProps<T[], PickerLocale, ItemDataType<T>>, MultipleSelectProps<T>, Pick<PickerToggleProps, 'label' | 'caretAs' | 'loading'> {
8
8
  /** Top the selected option in the options */
9
9
  sticky?: boolean;
10
10
  /** A picker that can be counted */
@@ -4,7 +4,7 @@ import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { TreeBaseProps } from '../Tree/Tree';
5
5
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
6
  export declare type ValueType = (string | number)[];
7
- export interface CheckTreePickerProps<T = ValueType> extends TreeBaseProps<T, ItemDataType>, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs'> {
7
+ export interface CheckTreePickerProps<T = ValueType> extends TreeBaseProps<T, ItemDataType>, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs' | 'loading'> {
8
8
  /** Tree node cascade */
9
9
  cascade?: boolean;
10
10
  /** A picker that can be counted */
@@ -487,7 +487,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
487
487
  handleSelect(activeItem, event);
488
488
  }
489
489
  }, [flattenNodes, focusItemValue, handleSelect, uncheckableItemValues, valueKey]);
490
- var onPickerKeydown = (0, _Picker.useToggleKeyDownEvent)({
490
+ var onPickerKeydown = (0, _Picker.useToggleKeyDownEvent)((0, _extends2.default)({
491
491
  toggle: !focusItemValue || !active,
492
492
  triggerRef: triggerRef,
493
493
  targetRef: targetRef,
@@ -510,7 +510,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
510
510
  del: handleClean
511
511
  });
512
512
  }
513
- });
513
+ }, rest));
514
514
  var handleTreeKeydown = (0, _react.useCallback)(function (event) {
515
515
  if (!treeViewRef.current) {
516
516
  return;
@@ -4,7 +4,7 @@ import { DatePickerLocale } from '../locales';
4
4
  import { PickerToggleProps } from '../Picker';
5
5
  import { FormControlBaseProps, PickerBaseProps, RsRefForwardingComponent } from '../@types/common';
6
6
  export type { RangeType } from './Toolbar';
7
- export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext'> {
7
+ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext' | 'loading'> {
8
8
  /** Predefined date Ranges */
9
9
  ranges?: RangeType<Date>[];
10
10
  /** Calendar panel default presentation date and time */
@@ -94,6 +94,8 @@ export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, Form
94
94
  onNextMonth?: (date: Date) => void;
95
95
  /** Called after clicking the OK button */
96
96
  onOk?: (date: Date, event: React.SyntheticEvent) => void;
97
+ /** Called after clicking the shortcut button */
98
+ onShortcutClick?: (range: RangeType<Date>, event: React.MouseEvent) => void;
97
99
  /** Called when clean */
98
100
  onClean?: (event: React.MouseEvent) => void;
99
101
  /** Custom render value */
@@ -12,6 +12,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
12
12
  var _mapValues = _interopRequireDefault(require("lodash/mapValues"));
13
13
  var _pick = _interopRequireDefault(require("lodash/pick"));
14
14
  var _omit = _interopRequireDefault(require("lodash/omit"));
15
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
15
16
  var _Calendar = _interopRequireDefault(require("@rsuite/icons/legacy/Calendar"));
16
17
  var _ClockO = _interopRequireDefault(require("@rsuite/icons/legacy/ClockO"));
17
18
  var _CalendarContainer = _interopRequireDefault(require("../Calendar/CalendarContainer"));
@@ -81,7 +82,8 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
81
82
  onSelect = props.onSelect,
82
83
  onToggleMonthDropdown = props.onToggleMonthDropdown,
83
84
  onToggleTimeDropdown = props.onToggleTimeDropdown,
84
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "limitStartYear", "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"]);
85
+ onShortcutClick = props.onShortcutClick,
86
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "calendarDefaultDate", "cleanable", "editable", "defaultValue", "disabled", "format", "isoWeek", "limitEndYear", "limitStartYear", "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", "onShortcutClick"]);
85
87
  var _useCustom = (0, _utils.useCustom)('DatePicker', overrideLocale),
86
88
  locale = _useCustom.locale,
87
89
  formatDate = _useCustom.formatDate,
@@ -180,10 +182,12 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
180
182
  /**
181
183
  * The callback triggered after the date in the shortcut area is clicked.
182
184
  */
183
- var handleShortcutPageDate = (0, _react.useCallback)(function (value, closeOverlay, event) {
185
+ var handleShortcutPageDate = (0, _react.useCallback)(function (range, closeOverlay, event) {
186
+ var value = range.value;
184
187
  updateValue(event, value, closeOverlay);
185
188
  handleDateChange(value, event);
186
- }, [handleDateChange, updateValue]);
189
+ onShortcutClick === null || onShortcutClick === void 0 ? void 0 : onShortcutClick(range, event);
190
+ }, [handleDateChange, onShortcutClick, updateValue]);
187
191
 
188
192
  /**
189
193
  * The callback triggered after clicking the OK button.
@@ -296,6 +300,14 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
296
300
  }
297
301
  setInputState('Initial');
298
302
  }, [inputState, calendarDate, updateValue]);
303
+ var handleInputBackspace = (0, _react.useCallback)(function (event) {
304
+ var value = event.target.value;
305
+
306
+ // When the input box is empty, the date is cleared.
307
+ if (value === '') {
308
+ handleClean(event);
309
+ }
310
+ }, [handleClean]);
299
311
  var handleEntered = (0, _react.useCallback)(function () {
300
312
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
301
313
  setActive(true);
@@ -386,14 +398,14 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
386
398
  calendarDate: calendarDate,
387
399
  locale: locale,
388
400
  disabledShortcut: disabledToolbarHandle,
389
- onClickShortcut: handleShortcutPageDate
401
+ onShortcutClick: handleShortcutPageDate
390
402
  }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, calendar, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
391
403
  locale: locale,
392
404
  ranges: bottomRanges,
393
405
  calendarDate: calendarDate,
394
406
  disabledOkBtn: isOKButtonDisabled,
395
407
  disabledShortcut: disabledToolbarHandle,
396
- onClickShortcut: handleShortcutPageDate,
408
+ onShortcutClick: handleShortcutPageDate,
397
409
  onOk: handleOK,
398
410
  hideOkBtn: oneTap
399
411
  }))));
@@ -451,6 +463,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
451
463
  onInputChange: handleInputChange,
452
464
  onInputBlur: handleInputPressEnd,
453
465
  onInputPressEnter: handleInputPressEnd,
466
+ onInputBackspace: (0, _debounce.default)(handleInputBackspace, 10),
454
467
  onKeyDown: onPickerKeyDown,
455
468
  onClean: (0, _utils.createChainedFunction)(handleClean, onClean),
456
469
  cleanable: cleanable && !disabled,
@@ -1,13 +1,13 @@
1
1
  import React from 'react';
2
2
  import { StackProps } from '../Stack';
3
- import { RangeType } from './types';
3
+ import { InnerRange, RangeType } from './types';
4
4
  import { CalendarLocale } from '../locales';
5
5
  export interface PredefinedRangesProps<T = any, Shortcut = T> extends StackProps {
6
6
  ranges?: RangeType<Shortcut>[];
7
7
  calendarDate: T;
8
8
  locale: CalendarLocale;
9
9
  disabledShortcut?: (value: T) => boolean;
10
- onClickShortcut?: (value: Shortcut, closeOverlay: boolean, event: React.MouseEvent) => void;
10
+ onShortcutClick?: (range: InnerRange<Shortcut>, closeOverlay: boolean, event: React.MouseEvent) => void;
11
11
  }
12
12
  declare const PredefinedRanges: React.ForwardRefExoticComponent<PredefinedRangesProps<any, any> & React.RefAttributes<HTMLDivElement>>;
13
13
  export default PredefinedRanges;
@@ -15,11 +15,11 @@ var _utils2 = require("./utils");
15
15
  var PredefinedRanges = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
16
16
  var className = props.className,
17
17
  disabledShortcut = props.disabledShortcut,
18
- onClickShortcut = props.onClickShortcut,
18
+ onShortcutClick = props.onShortcutClick,
19
19
  calendarDate = props.calendarDate,
20
20
  rangesProp = props.ranges,
21
21
  locale = props.locale,
22
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "disabledShortcut", "onClickShortcut", "calendarDate", "ranges", "locale"]);
22
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "disabledShortcut", "onShortcutClick", "calendarDate", "ranges", "locale"]);
23
23
  var _useState = (0, _react.useState)((0, _utils2.getRanges)(props)),
24
24
  ranges = _useState[0],
25
25
  setRanges = _useState[1];
@@ -42,17 +42,17 @@ var PredefinedRanges = /*#__PURE__*/_react.default.forwardRef(function (props, r
42
42
  ref: ref,
43
43
  alignItems: "flex-start",
44
44
  spacing: 4
45
- }, rest), ranges.map(function (_ref, index) {
46
- var value = _ref.value,
47
- closeOverlay = _ref.closeOverlay,
48
- label = _ref.label,
49
- rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["value", "closeOverlay", "label"]);
45
+ }, rest), ranges.map(function (range, index) {
46
+ var value = range.value,
47
+ closeOverlay = range.closeOverlay,
48
+ label = range.label,
49
+ rest = (0, _objectWithoutPropertiesLoose2.default)(range, ["value", "closeOverlay", "label"]);
50
50
  var disabled = disabledShortcut === null || disabledShortcut === void 0 ? void 0 : disabledShortcut(value);
51
51
  var handleClickShortcut = function handleClickShortcut(event) {
52
52
  if (disabled) {
53
53
  return;
54
54
  }
55
- onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
55
+ onShortcutClick === null || onShortcutClick === void 0 ? void 0 : onShortcutClick(range, closeOverlay !== false ? true : false, event);
56
56
  };
57
57
  return /*#__PURE__*/_react.default.createElement(_Button.default, (0, _extends2.default)({
58
58
  appearance: "link",
@@ -41,11 +41,11 @@ var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
41
41
  disabledShortcut = props.disabledShortcut,
42
42
  hideOkBtn = props.hideOkBtn,
43
43
  onOk = props.onOk,
44
- onClickShortcut = props.onClickShortcut,
44
+ onShortcutClick = props.onShortcutClick,
45
45
  calendarDate = props.calendarDate,
46
46
  ranges = props.ranges,
47
47
  locale = props.locale,
48
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "classPrefix", "disabledOkBtn", "disabledShortcut", "hideOkBtn", "onOk", "onClickShortcut", "calendarDate", "ranges", "locale"]);
48
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "classPrefix", "disabledOkBtn", "disabledShortcut", "hideOkBtn", "onOk", "onShortcutClick", "calendarDate", "ranges", "locale"]);
49
49
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
50
50
  merge = _useClassNames.merge,
51
51
  prefix = _useClassNames.prefix,
@@ -66,7 +66,7 @@ var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
66
66
  calendarDate: calendarDate,
67
67
  locale: locale,
68
68
  disabledShortcut: disabledShortcut,
69
- onClickShortcut: onClickShortcut
69
+ onShortcutClick: onShortcutClick
70
70
  }), /*#__PURE__*/_react.default.createElement("div", {
71
71
  className: prefix('right')
72
72
  }, /*#__PURE__*/_react.default.createElement(SubmitButton, {
@@ -82,7 +82,7 @@ Toolbar.propTypes = {
82
82
  className: _propTypes.default.string,
83
83
  classPrefix: _propTypes.default.string,
84
84
  calendarDate: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.arrayOf(_propTypes.default.instanceOf(Date))]).isRequired,
85
- onClickShortcut: _propTypes.default.func,
85
+ onShortcutClick: _propTypes.default.func,
86
86
  onOk: _propTypes.default.func,
87
87
  disabledShortcut: _propTypes.default.func,
88
88
  disabledOkBtn: _propTypes.default.func,
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { FormControlBaseProps, PickerBaseProps } from '../@types/common';
3
3
  import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { DisabledDateFunction, RangeType, DateRange } from './types';
5
- export interface DateRangePickerProps extends PickerBaseProps, FormControlBaseProps<DateRange | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext'> {
5
+ export interface DateRangePickerProps extends PickerBaseProps, FormControlBaseProps<DateRange | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext' | 'loading'> {
6
6
  /** Predefined date ranges */
7
7
  ranges?: RangeType[];
8
8
  /** Format date */
@@ -43,6 +43,8 @@ export interface DateRangePickerProps extends PickerBaseProps, FormControlBasePr
43
43
  onSelect?: (date: Date, event?: React.SyntheticEvent) => void;
44
44
  /** Called after clicking the OK button */
45
45
  onOk?: (date: DateRange, event: React.SyntheticEvent) => void;
46
+ /** Called after clicking the shortcut button */
47
+ onShortcutClick?: (range: RangeType, event: React.MouseEvent) => void;
46
48
  /** Called when clean */
47
49
  onClean?: (event: React.MouseEvent) => void;
48
50
  /** Custom render value */
@@ -12,6 +12,7 @@ var _isNil = _interopRequireDefault(require("lodash/isNil"));
12
12
  var _omit = _interopRequireDefault(require("lodash/omit"));
13
13
  var _partial = _interopRequireDefault(require("lodash/partial"));
14
14
  var _pick = _interopRequireDefault(require("lodash/pick"));
15
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
15
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
16
17
  var _react = _interopRequireWildcard(require("react"));
17
18
  var _CustomProvider = require("../CustomProvider");
@@ -81,8 +82,9 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
81
82
  onOk = props.onOk,
82
83
  onOpen = props.onOpen,
83
84
  onSelect = props.onSelect,
85
+ onShortcutClick = props.onShortcutClick,
84
86
  renderTitle = props.renderTitle,
85
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "appearance", "editable", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "shouldDisableDate", "format", "hoverRange", "isoWeek", "limitEndYear", "limitStartYear", "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"]);
87
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "classPrefix", "className", "appearance", "editable", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "shouldDisableDate", "format", "hoverRange", "isoWeek", "limitEndYear", "limitStartYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "caretAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect", "onShortcutClick", "renderTitle"]);
86
88
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
87
89
  merge = _useClassNames.merge,
88
90
  prefix = _useClassNames.prefix;
@@ -408,10 +410,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
408
410
  /**
409
411
  * Toolbar operation callback function
410
412
  */
411
- var handleShortcutPageDate = (0, _react.useCallback)(function (value, closeOverlay, event) {
413
+ var handleShortcutPageDate = (0, _react.useCallback)(function (range, closeOverlay, event) {
412
414
  if (closeOverlay === void 0) {
413
415
  closeOverlay = false;
414
416
  }
417
+ var value = range.value;
415
418
  updateCalendarDateRange({
416
419
  dateRange: value
417
420
  });
@@ -420,10 +423,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
420
423
  } else {
421
424
  setSelectedDates(value !== null && value !== void 0 ? value : []);
422
425
  }
426
+ onShortcutClick === null || onShortcutClick === void 0 ? void 0 : onShortcutClick(range, event);
423
427
 
424
428
  // End unfinished selections.
425
429
  setSelectedIdle(true);
426
- }, [handleValueUpdate, updateCalendarDateRange]);
430
+ }, [handleValueUpdate, onShortcutClick, updateCalendarDateRange]);
427
431
  var handleOK = (0, _react.useCallback)(function (event) {
428
432
  handleValueUpdate(event, selectedDates);
429
433
  onOk === null || onOk === void 0 ? void 0 : onOk(selectedDates, event);
@@ -481,6 +485,14 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
481
485
  }
482
486
  setInputState('Initial');
483
487
  }, [handleValueUpdate, selectedDates, inputState]);
488
+ var handleInputBackspace = (0, _react.useCallback)(function (event) {
489
+ var value = event.target.value;
490
+
491
+ // When the input box is empty, the date is cleared.
492
+ if (value === '') {
493
+ handleClean(event);
494
+ }
495
+ }, [handleClean]);
484
496
  var handleEnter = (0, _react.useCallback)(function () {
485
497
  var nextCalendarDate;
486
498
  if (value && value.length) {
@@ -611,7 +623,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
611
623
  calendarDate: calendarDate,
612
624
  locale: locale,
613
625
  disabledShortcut: disabledShortcutButton,
614
- onClickShortcut: handleShortcutPageDate
626
+ onShortcutClick: handleShortcutPageDate
615
627
  }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
616
628
  className: prefix('daterange-content')
617
629
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -633,7 +645,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
633
645
  disabledShortcut: disabledShortcutButton,
634
646
  hideOkBtn: oneTap,
635
647
  onOk: handleOK,
636
- onClickShortcut: handleShortcutPageDate,
648
+ onShortcutClick: handleShortcutPageDate,
637
649
  ranges: bottomRanges
638
650
  })))));
639
651
  };
@@ -670,6 +682,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
670
682
  onInputChange: handleInputChange,
671
683
  onInputBlur: handleInputPressEnd,
672
684
  onInputPressEnter: handleInputPressEnd,
685
+ onInputBackspace: (0, _debounce.default)(handleInputBackspace, 10),
673
686
  onKeyDown: onPickerKeyDown,
674
687
  onClean: (0, _utils.createChainedFunction)(handleClean, onClean),
675
688
  cleanable: cleanable && !disabled,
@@ -2,9 +2,9 @@ import React from 'react';
2
2
  import { DATERANGE_DISABLED_TARGET } from '../utils/constants';
3
3
  export declare type ValueType = [Date?, Date?];
4
4
  export declare type DateRange = [Date, Date];
5
- export interface RangeType {
5
+ export interface RangeType<T = DateRange> {
6
6
  label: React.ReactNode;
7
- value: DateRange | ((value?: ValueType) => DateRange);
7
+ value: T | ((value?: T) => T);
8
8
  closeOverlay?: boolean;
9
9
  placement?: 'bottom' | 'left';
10
10
  }
@@ -26,7 +26,7 @@ interface InputItemDataType extends ItemDataType {
26
26
  create?: boolean;
27
27
  }
28
28
  export declare type ValueType = any;
29
- export interface InputPickerProps<T = ValueType> extends FormControlPickerProps<T, InputPickerLocale, InputItemDataType>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs'> {
29
+ export interface InputPickerProps<T = ValueType> extends FormControlPickerProps<T, InputPickerLocale, InputItemDataType>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'loading'> {
30
30
  tabIndex?: number;
31
31
  /** Settings can create new options */
32
32
  creatable?: boolean;
@@ -611,7 +611,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
611
611
  usedClassNamePropKeys = _usePickerClassName[1];
612
612
  var classes = merge(pickerClasses, (_merge = {}, _merge[prefix(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteralLoose2.default)(["tag"])))] = multi, _merge[prefix(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteralLoose2.default)(["focused"])))] = open, _merge[prefix(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteralLoose2.default)(["disabled-options"])))] = disabledOptions, _merge));
613
613
  var searching = !!searchKeyword && open;
614
- var displaySearchInput = searchable && !disabled;
614
+ var displaySearchInput = searchable && !disabled && !rest.loading;
615
615
  var inputProps = multi ? {
616
616
  inputStyle: {
617
617
  maxWidth: maxWidth - 63
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
- import { PickerComponent } from '../Picker';
3
+ import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
5
5
  export declare type ValueType = (number | string)[];
6
- export interface MultiCascaderProps<T = ValueType> extends FormControlPickerProps<T, PickerLocale, ItemDataType> {
6
+ export interface MultiCascaderProps<T = ValueType> extends FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'loading'> {
7
7
  cascade?: boolean;
8
8
  /** A picker that can be counted */
9
9
  countable?: boolean;
@@ -15,6 +15,7 @@ export interface PickerToggleProps extends ToggleButtonProps {
15
15
  readOnly?: boolean;
16
16
  plaintext?: boolean;
17
17
  tabIndex?: number;
18
+ /** Whether to display an loading indicator on toggle button */
18
19
  loading?: boolean;
19
20
  editable?: boolean;
20
21
  name?: string;
@@ -22,6 +23,7 @@ export interface PickerToggleProps extends ToggleButtonProps {
22
23
  inputMask?: (string | RegExp)[];
23
24
  onInputChange?: (value: string, event: React.ChangeEvent) => void;
24
25
  onInputPressEnter?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
26
+ onInputBackspace?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
25
27
  onInputBlur?: (event: React.FocusEvent<HTMLElement>) => void;
26
28
  onInputFocus?: (event: React.FocusEvent<HTMLElement>) => void;
27
29
  placement?: TypeAttributes.Placement;
@@ -50,6 +50,7 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
50
50
  inputMask = _props$inputMask === void 0 ? defaultInputMask : _props$inputMask,
51
51
  onInputChange = props.onInputChange,
52
52
  onInputPressEnter = props.onInputPressEnter,
53
+ onInputBackspace = props.onInputBackspace,
53
54
  onInputBlur = props.onInputBlur,
54
55
  onInputFocus = props.onInputFocus,
55
56
  onClean = props.onClean,
@@ -62,7 +63,7 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
62
63
  caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
63
64
  label = props.label,
64
65
  name = props.name,
65
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "loading", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label", "name"]);
66
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "loading", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBackspace", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label", "name"]);
66
67
  var inputRef = (0, _react.useRef)(null);
67
68
  var comboboxRef = (0, _react.useRef)(null);
68
69
  var _useState = (0, _react.useState)(false),
@@ -136,10 +137,15 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
136
137
  onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
137
138
  }, [onInputChange]);
138
139
  var handleInputKeyDown = (0, _react.useCallback)(function (event) {
139
- if (editable && event.key === _utils.KEY_VALUES.ENTER) {
140
- onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
140
+ if (editable) {
141
+ if (event.key === _utils.KEY_VALUES.ENTER) {
142
+ onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
143
+ }
144
+ if (event.key === _utils.KEY_VALUES.BACKSPACE) {
145
+ onInputBackspace === null || onInputBackspace === void 0 ? void 0 : onInputBackspace(event);
146
+ }
141
147
  }
142
- }, [onInputPressEnter, editable]);
148
+ }, [editable, onInputPressEnter, onInputBackspace]);
143
149
  var renderInput = (0, _react.useCallback)(function (ref, props) {
144
150
  return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
145
151
  ref: (0, _utils.mergeRefs)(inputRef, ref),
@@ -367,6 +367,7 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
367
367
  active = props.active,
368
368
  readOnly = props.readOnly,
369
369
  disabled = props.disabled,
370
+ loading = props.loading,
370
371
  onExit = props.onExit,
371
372
  onOpen = props.onOpen,
372
373
  onClose = props.onClose,
@@ -393,7 +394,7 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
393
394
  }, [active, handleOpen, handleClose]);
394
395
  var onToggle = (0, _react.useCallback)(function (event) {
395
396
  // Keyboard events should not be processed when readOnly and disabled are set.
396
- if (readOnly || disabled) {
397
+ if (readOnly || disabled || loading) {
397
398
  return;
398
399
  }
399
400
  if (event.target === (targetRef === null || targetRef === void 0 ? void 0 : targetRef.current)) {
@@ -439,7 +440,7 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
439
440
 
440
441
  // Native event callback
441
442
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
442
- }, [readOnly, disabled, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
443
+ }, [readOnly, disabled, loading, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
443
444
  return onToggle;
444
445
  };
445
446
  exports.useToggleKeyDownEvent = useToggleKeyDownEvent;
@@ -6,8 +6,6 @@ import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
6
  export interface SelectProps<T> {
7
7
  /** Set group condition key in data */
8
8
  groupBy?: string;
9
- /** Whether to display an loading indicator on toggle button */
10
- loading?: boolean;
11
9
  /** Whether dispaly search input box */
12
10
  searchable?: boolean;
13
11
  /** Whether using virtualized list */
@@ -41,7 +39,7 @@ export interface MultipleSelectProps<T> extends Omit<SelectProps<T>, 'renderValu
41
39
  /** Custom render selected items */
42
40
  renderValue?: (value: T[], item: ItemDataType<T>[], selectedElement: React.ReactNode) => React.ReactNode;
43
41
  }
44
- export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, 'value' | 'defaultValue' | 'onChange'>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'label'> {
42
+ export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, PickerLocale, ItemDataType<T>>, 'value' | 'defaultValue' | 'onChange'>, SelectProps<T>, Pick<PickerToggleProps, 'caretAs' | 'label' | 'loading'> {
45
43
  /** Initial value */
46
44
  defaultValue?: T;
47
45
  /** Current value of the component. Creates a controlled component */
@@ -3,7 +3,7 @@ import { PickerLocale } from '../locales';
3
3
  import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { TreeDragProps, TreeBaseProps } from '../Tree/Tree';
5
5
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
- export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs'> {
6
+ export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs' | 'loading'> {
7
7
  /** The height of Dropdown */
8
8
  height?: number;
9
9
  /** Tree node cascade */
@@ -4,6 +4,7 @@
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
5
  exports.__esModule = true;
6
6
  exports.default = void 0;
7
+ var _react = require("react");
7
8
  var _toaster = _interopRequireDefault(require("./toaster"));
8
9
  var _utils = require("../utils");
9
10
  /**
@@ -13,25 +14,27 @@ var _utils = require("../utils");
13
14
  var useToaster = function useToaster() {
14
15
  var _useCustom = (0, _utils.useCustom)(),
15
16
  toasters = _useCustom.toasters;
16
- return {
17
- push: function push(message, options) {
18
- var _toasters$current;
19
- var customToaster = toasters === null || toasters === void 0 ? void 0 : (_toasters$current = toasters.current) === null || _toasters$current === void 0 ? void 0 : _toasters$current.get((options === null || options === void 0 ? void 0 : options.placement) || 'topCenter');
20
- return customToaster ? customToaster.push(message, options) : _toaster.default.push(message, options);
21
- },
22
- remove: function remove(key) {
23
- toasters ? Array.from(toasters.current).forEach(function (_ref) {
24
- var c = _ref[1];
25
- return c === null || c === void 0 ? void 0 : c.remove(key);
26
- }) : _toaster.default.remove(key);
27
- },
28
- clear: function clear() {
29
- toasters ? Array.from(toasters.current).forEach(function (_ref2) {
30
- var c = _ref2[1];
31
- return c === null || c === void 0 ? void 0 : c.clear();
32
- }) : _toaster.default.clear();
33
- }
34
- };
17
+ return (0, _react.useMemo)(function () {
18
+ return {
19
+ push: function push(message, options) {
20
+ var _toasters$current;
21
+ var customToaster = toasters === null || toasters === void 0 ? void 0 : (_toasters$current = toasters.current) === null || _toasters$current === void 0 ? void 0 : _toasters$current.get((options === null || options === void 0 ? void 0 : options.placement) || 'topCenter');
22
+ return customToaster ? customToaster.push(message, options) : _toaster.default.push(message, options);
23
+ },
24
+ remove: function remove(key) {
25
+ toasters ? Array.from(toasters.current).forEach(function (_ref) {
26
+ var c = _ref[1];
27
+ return c === null || c === void 0 ? void 0 : c.remove(key);
28
+ }) : _toaster.default.remove(key);
29
+ },
30
+ clear: function clear() {
31
+ toasters ? Array.from(toasters.current).forEach(function (_ref2) {
32
+ var c = _ref2[1];
33
+ return c === null || c === void 0 ? void 0 : c.clear();
34
+ }) : _toaster.default.clear();
35
+ }
36
+ };
37
+ }, [toasters]);
35
38
  };
36
39
  var _default = useToaster;
37
40
  exports.default = _default;
@@ -10797,9 +10797,6 @@ textarea.rs-picker-search-input {
10797
10797
  vertical-align: middle;
10798
10798
  max-width: 100%;
10799
10799
  }
10800
- .rs-picker-toggle {
10801
- min-width: 75px;
10802
- }
10803
10800
  .rs-picker-toggle.rs-btn .rs-ripple-pond {
10804
10801
  display: none !important;
10805
10802
  }