rsuite 5.49.0 → 5.50.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 (115) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/Cascader/styles/index.less +4 -4
  3. package/DateRangePicker/styles/index.less +15 -5
  4. package/Dropdown/styles/index.less +5 -4
  5. package/Dropdown/styles/mixin.less +0 -11
  6. package/Picker/styles/index.less +31 -24
  7. package/Picker/styles/mixin.less +17 -13
  8. package/README.md +4 -4
  9. package/TagInput/styles/index.less +1 -1
  10. package/cjs/AutoComplete/AutoComplete.js +25 -26
  11. package/cjs/Calendar/Calendar.d.ts +5 -1
  12. package/cjs/Calendar/CalendarContainer.d.ts +5 -1
  13. package/cjs/Cascader/Cascader.js +46 -48
  14. package/cjs/CheckPicker/CheckPicker.d.ts +2 -2
  15. package/cjs/CheckPicker/CheckPicker.js +33 -36
  16. package/cjs/CheckTreePicker/CheckTreePicker.js +61 -64
  17. package/cjs/DatePicker/DatePicker.d.ts +5 -1
  18. package/cjs/DatePicker/DatePicker.js +2 -4
  19. package/cjs/DatePicker/Toolbar.js +2 -1
  20. package/cjs/DateRangeInput/DateRangeInput.js +2 -2
  21. package/cjs/DateRangePicker/Calendar.js +24 -23
  22. package/cjs/DateRangePicker/DateRangePicker.d.ts +18 -4
  23. package/cjs/DateRangePicker/DateRangePicker.js +239 -201
  24. package/cjs/DateRangePicker/types.d.ts +11 -3
  25. package/cjs/DateRangePicker/utils.d.ts +2 -1
  26. package/cjs/DateRangePicker/utils.js +7 -5
  27. package/cjs/FormControl/FormControl.d.ts +11 -1
  28. package/cjs/FormControl/FormControl.js +6 -5
  29. package/cjs/InputPicker/InputPicker.js +62 -63
  30. package/cjs/MultiCascader/MultiCascader.js +40 -42
  31. package/cjs/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  32. package/cjs/{DatePicker → Picker}/PickerIndicator.js +2 -1
  33. package/cjs/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  34. package/cjs/Picker/PickerToggle.d.ts +17 -22
  35. package/cjs/Picker/PickerToggle.js +52 -177
  36. package/cjs/Picker/index.d.ts +3 -0
  37. package/cjs/Picker/index.js +10 -1
  38. package/cjs/Picker/usePickerRef.d.ts +3 -1
  39. package/cjs/Picker/usePickerRef.js +13 -7
  40. package/cjs/Picker/utils.d.ts +5 -9
  41. package/cjs/Picker/utils.js +22 -89
  42. package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
  43. package/cjs/SelectPicker/SelectPicker.js +39 -42
  44. package/cjs/TreePicker/TreePicker.js +72 -75
  45. package/cjs/utils/constants.d.ts +2 -1
  46. package/cjs/utils/constants.js +1 -0
  47. package/cjs/utils/dateUtils.d.ts +0 -1
  48. package/cjs/utils/dateUtils.js +0 -6
  49. package/cjs/utils/getStringLength.d.ts +2 -0
  50. package/cjs/utils/getStringLength.js +18 -0
  51. package/cjs/utils/index.d.ts +1 -0
  52. package/cjs/utils/index.js +4 -1
  53. package/dist/rsuite-no-reset-rtl.css +92 -69
  54. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  55. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  56. package/dist/rsuite-no-reset.css +92 -69
  57. package/dist/rsuite-no-reset.min.css +1 -1
  58. package/dist/rsuite-no-reset.min.css.map +1 -1
  59. package/dist/rsuite-rtl.css +92 -69
  60. package/dist/rsuite-rtl.min.css +1 -1
  61. package/dist/rsuite-rtl.min.css.map +1 -1
  62. package/dist/rsuite.css +92 -69
  63. package/dist/rsuite.js +67 -46
  64. package/dist/rsuite.js.map +1 -1
  65. package/dist/rsuite.min.css +1 -1
  66. package/dist/rsuite.min.css.map +1 -1
  67. package/dist/rsuite.min.js +1 -1
  68. package/dist/rsuite.min.js.map +1 -1
  69. package/esm/AutoComplete/AutoComplete.js +28 -29
  70. package/esm/Calendar/Calendar.d.ts +5 -1
  71. package/esm/Calendar/CalendarContainer.d.ts +5 -1
  72. package/esm/Cascader/Cascader.js +49 -51
  73. package/esm/CheckPicker/CheckPicker.d.ts +2 -2
  74. package/esm/CheckPicker/CheckPicker.js +36 -39
  75. package/esm/CheckTreePicker/CheckTreePicker.js +64 -67
  76. package/esm/DatePicker/DatePicker.d.ts +5 -1
  77. package/esm/DatePicker/DatePicker.js +1 -3
  78. package/esm/DatePicker/Toolbar.js +2 -1
  79. package/esm/DateRangeInput/DateRangeInput.js +2 -2
  80. package/esm/DateRangePicker/Calendar.js +25 -23
  81. package/esm/DateRangePicker/DateRangePicker.d.ts +18 -4
  82. package/esm/DateRangePicker/DateRangePicker.js +241 -203
  83. package/esm/DateRangePicker/types.d.ts +11 -3
  84. package/esm/DateRangePicker/utils.d.ts +2 -1
  85. package/esm/DateRangePicker/utils.js +7 -5
  86. package/esm/FormControl/FormControl.d.ts +11 -1
  87. package/esm/FormControl/FormControl.js +4 -3
  88. package/esm/InputPicker/InputPicker.js +64 -65
  89. package/esm/MultiCascader/MultiCascader.js +43 -45
  90. package/esm/{DatePicker → Picker}/PickerIndicator.d.ts +1 -1
  91. package/esm/{DatePicker → Picker}/PickerIndicator.js +2 -1
  92. package/esm/{DatePicker → Picker}/PickerLabel.d.ts +1 -1
  93. package/esm/Picker/PickerToggle.d.ts +17 -22
  94. package/esm/Picker/PickerToggle.js +54 -179
  95. package/esm/Picker/index.d.ts +3 -0
  96. package/esm/Picker/index.js +3 -0
  97. package/esm/Picker/usePickerRef.d.ts +3 -1
  98. package/esm/Picker/usePickerRef.js +13 -8
  99. package/esm/Picker/utils.d.ts +5 -9
  100. package/esm/Picker/utils.js +24 -90
  101. package/esm/SelectPicker/SelectPicker.d.ts +2 -2
  102. package/esm/SelectPicker/SelectPicker.js +42 -45
  103. package/esm/TreePicker/TreePicker.js +75 -78
  104. package/esm/utils/constants.d.ts +2 -1
  105. package/esm/utils/constants.js +1 -0
  106. package/esm/utils/dateUtils.d.ts +0 -1
  107. package/esm/utils/dateUtils.js +0 -5
  108. package/esm/utils/getStringLength.d.ts +2 -0
  109. package/esm/utils/getStringLength.js +13 -0
  110. package/esm/utils/index.d.ts +1 -0
  111. package/esm/utils/index.js +1 -0
  112. package/package.json +1 -1
  113. package/styles/mixins/combobox.less +10 -0
  114. /package/cjs/{DatePicker → Picker}/PickerLabel.js +0 -0
  115. /package/esm/{DatePicker → Picker}/PickerLabel.js +0 -0
@@ -1,5 +1,6 @@
1
1
  'use client';
2
- import { useCallback, useImperativeHandle, useRef } from 'react';
2
+ import { useImperativeHandle, useRef } from 'react';
3
+ import useEventCallback from '../utils/useEventCallback';
3
4
  /**
4
5
  * A hook of the exposed method of Picker
5
6
  */
@@ -9,20 +10,22 @@ function usePickerRef(ref, parmas) {
9
10
  var target = useRef(null);
10
11
  var overlay = useRef(null);
11
12
  var list = useRef(null);
13
+ var searchInput = useRef(null);
14
+ var treeView = useRef(null);
12
15
  var _ref = parmas || {},
13
16
  inline = _ref.inline;
14
- var handleOpen = useCallback(function () {
17
+ var handleOpen = useEventCallback(function () {
15
18
  var _trigger$current;
16
19
  trigger === null || trigger === void 0 ? void 0 : (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : _trigger$current.open();
17
- }, [trigger]);
18
- var handleClose = useCallback(function () {
20
+ });
21
+ var handleClose = useEventCallback(function () {
19
22
  var _trigger$current2;
20
23
  trigger === null || trigger === void 0 ? void 0 : (_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : _trigger$current2.close();
21
- }, [trigger]);
22
- var handleUpdatePosition = useCallback(function () {
24
+ });
25
+ var handleUpdatePosition = useEventCallback(function () {
23
26
  var _trigger$current3;
24
27
  trigger === null || trigger === void 0 ? void 0 : (_trigger$current3 = trigger.current) === null || _trigger$current3 === void 0 ? void 0 : _trigger$current3.updatePosition();
25
- }, [trigger]);
28
+ });
26
29
  useImperativeHandle(ref, function () {
27
30
  // Tree and CheckTree
28
31
  if (inline) {
@@ -71,7 +74,9 @@ function usePickerRef(ref, parmas) {
71
74
  root: root,
72
75
  overlay: overlay,
73
76
  target: target,
74
- list: list
77
+ list: list,
78
+ searchInput: searchInput,
79
+ treeView: treeView
75
80
  };
76
81
  }
77
82
  export default usePickerRef;
@@ -68,10 +68,10 @@ export declare const useFocusItemValue: <T, D>(defaultFocusItemValue: T | null |
68
68
  };
69
69
  export interface ToggleKeyDownEventProps {
70
70
  toggle?: boolean;
71
- triggerRef: React.RefObject<any>;
72
- targetRef: React.RefObject<any>;
73
- overlayRef?: React.RefObject<any>;
74
- searchInputRef?: React.RefObject<any>;
71
+ trigger: React.RefObject<any>;
72
+ target: React.RefObject<any>;
73
+ overlay?: React.RefObject<any>;
74
+ searchInput?: React.RefObject<any>;
75
75
  active?: boolean;
76
76
  readOnly?: boolean;
77
77
  disabled?: boolean;
@@ -88,7 +88,7 @@ export interface ToggleKeyDownEventProps {
88
88
  * A hook to control the toggle keyboard operation
89
89
  * @param props
90
90
  */
91
- export declare const useToggleKeyDownEvent: (props: ToggleKeyDownEventProps) => (event: React.KeyboardEvent) => void;
91
+ export declare const useToggleKeyDownEvent: (props: ToggleKeyDownEventProps) => (...args: any[]) => any;
92
92
  interface SearchOptions<T> {
93
93
  labelKey: string;
94
94
  searchBy?: (keyword: string, label: any, item: T) => boolean;
@@ -113,8 +113,4 @@ export interface PickerDependentParameters {
113
113
  listRef?: React.RefObject<ListHandle>;
114
114
  inline?: boolean;
115
115
  }
116
- /**
117
- * A hook of the exposed method of Picker
118
- */
119
- export declare function usePublicMethods(ref: any, parmas: PickerDependentParameters): void;
120
116
  export {};
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React, { useState, useImperativeHandle, useCallback, useMemo } from 'react';
3
+ import React, { useState, useCallback, useMemo } from 'react';
4
4
  import kebabCase from 'lodash/kebabCase';
5
5
  import trim from 'lodash/trim';
6
6
  import isFunction from 'lodash/isFunction';
@@ -8,7 +8,7 @@ import isUndefined from 'lodash/isUndefined';
8
8
  import omit from 'lodash/omit';
9
9
  import find from 'lodash/find';
10
10
  import { findNodeOfTree } from '../utils/treeUtils';
11
- import { KEY_VALUES, useClassNames, shallowEqual, reactToString, placementPolyfill } from '../utils';
11
+ import { KEY_VALUES, useClassNames, shallowEqual, reactToString, placementPolyfill, useEventCallback } from '../utils';
12
12
  import { getHeight } from 'dom-lib';
13
13
  var defaultNodeKeys = {
14
14
  valueKey: 'value',
@@ -353,10 +353,10 @@ export var useFocusItemValue = function useFocusItemValue(defaultFocusItemValue,
353
353
  export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
354
354
  var _props$toggle = props.toggle,
355
355
  toggle = _props$toggle === void 0 ? true : _props$toggle,
356
- triggerRef = props.triggerRef,
357
- targetRef = props.targetRef,
358
- overlayRef = props.overlayRef,
359
- searchInputRef = props.searchInputRef,
356
+ trigger = props.trigger,
357
+ target = props.target,
358
+ overlay = props.overlay,
359
+ searchInput = props.searchInput,
360
360
  active = props.active,
361
361
  readOnly = props.readOnly,
362
362
  disabled = props.disabled,
@@ -368,32 +368,32 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
368
368
  onMenuKeyDown = props.onMenuKeyDown,
369
369
  onMenuPressEnter = props.onMenuPressEnter,
370
370
  onMenuPressBackspace = props.onMenuPressBackspace;
371
- var handleClose = useCallback(function () {
372
- var _triggerRef$current, _triggerRef$current$c, _targetRef$current, _targetRef$current$fo;
373
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$c = _triggerRef$current.close) === null || _triggerRef$current$c === void 0 ? void 0 : _triggerRef$current$c.call(_triggerRef$current);
371
+ var handleClose = useEventCallback(function () {
372
+ var _trigger$current, _trigger$current$clos, _trigger$current2, _trigger$current2$foc;
373
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$clos = _trigger$current.close) === null || _trigger$current$clos === void 0 ? void 0 : _trigger$current$clos.call(_trigger$current);
374
374
 
375
375
  // The focus is on the trigger button after closing
376
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : (_targetRef$current$fo = _targetRef$current.focus) === null || _targetRef$current$fo === void 0 ? void 0 : _targetRef$current$fo.call(_targetRef$current);
376
+ (_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : (_trigger$current2$foc = _trigger$current2.focus) === null || _trigger$current2$foc === void 0 ? void 0 : _trigger$current2$foc.call(_trigger$current2);
377
377
  onClose === null || onClose === void 0 ? void 0 : onClose();
378
- }, [onClose, targetRef, triggerRef]);
379
- var handleOpen = useCallback(function () {
380
- var _triggerRef$current2, _triggerRef$current2$;
381
- (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : (_triggerRef$current2$ = _triggerRef$current2.open) === null || _triggerRef$current2$ === void 0 ? void 0 : _triggerRef$current2$.call(_triggerRef$current2);
378
+ });
379
+ var handleOpen = useEventCallback(function () {
380
+ var _trigger$current3, _trigger$current3$ope;
381
+ (_trigger$current3 = trigger.current) === null || _trigger$current3 === void 0 ? void 0 : (_trigger$current3$ope = _trigger$current3.open) === null || _trigger$current3$ope === void 0 ? void 0 : _trigger$current3$ope.call(_trigger$current3);
382
382
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
383
- }, [onOpen, triggerRef]);
384
- var handleToggleDropdown = useCallback(function () {
383
+ });
384
+ var handleToggleDropdown = useEventCallback(function () {
385
385
  if (active) {
386
386
  handleClose();
387
387
  return;
388
388
  }
389
389
  handleOpen();
390
- }, [active, handleOpen, handleClose]);
391
- var onToggle = useCallback(function (event) {
390
+ });
391
+ var onToggle = useEventCallback(function (event) {
392
392
  // Keyboard events should not be processed when readOnly and disabled are set.
393
393
  if (readOnly || disabled || loading) {
394
394
  return;
395
395
  }
396
- if (event.target === (targetRef === null || targetRef === void 0 ? void 0 : targetRef.current)) {
396
+ if (event.target === (target === null || target === void 0 ? void 0 : target.current)) {
397
397
  // enter
398
398
  if (toggle && event.key === KEY_VALUES.ENTER) {
399
399
  handleToggleDropdown();
@@ -404,7 +404,7 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
404
404
  onExit === null || onExit === void 0 ? void 0 : onExit(event);
405
405
  }
406
406
  }
407
- if (overlayRef !== null && overlayRef !== void 0 && overlayRef.current) {
407
+ if (overlay !== null && overlay !== void 0 && overlay.current) {
408
408
  // The keyboard operation callback on the menu.
409
409
  onMenuKeyDown === null || onMenuKeyDown === void 0 ? void 0 : onMenuKeyDown(event);
410
410
  if (event.key === KEY_VALUES.ENTER) {
@@ -415,7 +415,7 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
415
415
  * There is no callback when typing the Backspace key in the search box.
416
416
  * The default is to remove search keywords
417
417
  */
418
- if (event.key === KEY_VALUES.BACKSPACE && event.target !== (searchInputRef === null || searchInputRef === void 0 ? void 0 : searchInputRef.current)) {
418
+ if (event.key === KEY_VALUES.BACKSPACE && event.target !== (searchInput === null || searchInput === void 0 ? void 0 : searchInput.current)) {
419
419
  onMenuPressBackspace === null || onMenuPressBackspace === void 0 ? void 0 : onMenuPressBackspace(event);
420
420
  }
421
421
 
@@ -425,8 +425,8 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
425
425
  // Exclude Input
426
426
  // eg: <SelectPicker renderExtraFooter={() => <Input />} />
427
427
  if (((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.tagName) !== 'INPUT') {
428
- var _searchInputRef$curre;
429
- searchInputRef === null || searchInputRef === void 0 ? void 0 : (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
428
+ var _searchInput$current;
429
+ searchInput === null || searchInput === void 0 ? void 0 : (_searchInput$current = searchInput.current) === null || _searchInput$current === void 0 ? void 0 : _searchInput$current.focus();
430
430
  }
431
431
  }
432
432
  }
@@ -436,7 +436,7 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
436
436
 
437
437
  // Native event callback
438
438
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
439
- }, [readOnly, disabled, loading, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
439
+ });
440
440
  return onToggle;
441
441
  };
442
442
  /**
@@ -484,70 +484,4 @@ export function useSearch(data, props) {
484
484
  handleSearch: handleSearch,
485
485
  resetSearch: resetSearch
486
486
  };
487
- }
488
- /**
489
- * A hook of the exposed method of Picker
490
- */
491
- export function usePublicMethods(ref, parmas) {
492
- var triggerRef = parmas.triggerRef,
493
- overlayRef = parmas.overlayRef,
494
- targetRef = parmas.targetRef,
495
- rootRef = parmas.rootRef,
496
- listRef = parmas.listRef,
497
- inline = parmas.inline;
498
- var handleOpen = useCallback(function () {
499
- var _triggerRef$current3;
500
- triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current3 = triggerRef.current) === null || _triggerRef$current3 === void 0 ? void 0 : _triggerRef$current3.open();
501
- }, [triggerRef]);
502
- var handleClose = useCallback(function () {
503
- var _triggerRef$current4;
504
- triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current4 = triggerRef.current) === null || _triggerRef$current4 === void 0 ? void 0 : _triggerRef$current4.close();
505
- }, [triggerRef]);
506
- var handleUpdatePosition = useCallback(function () {
507
- var _triggerRef$current5;
508
- triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current5 = triggerRef.current) === null || _triggerRef$current5 === void 0 ? void 0 : _triggerRef$current5.updatePosition();
509
- }, [triggerRef]);
510
- useImperativeHandle(ref, function () {
511
- // Tree and CheckTree
512
- if (inline) {
513
- return {
514
- get root() {
515
- var _triggerRef$current$r, _triggerRef$current6;
516
- return rootRef !== null && rootRef !== void 0 && rootRef.current ? rootRef === null || rootRef === void 0 ? void 0 : rootRef.current : (_triggerRef$current$r = triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current6 = triggerRef.current) === null || _triggerRef$current6 === void 0 ? void 0 : _triggerRef$current6.root) !== null && _triggerRef$current$r !== void 0 ? _triggerRef$current$r : null;
517
- },
518
- get list() {
519
- if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
520
- throw new Error('The list is not found, please set `virtualized` for the component.');
521
- }
522
- return listRef === null || listRef === void 0 ? void 0 : listRef.current;
523
- }
524
- };
525
- }
526
- return {
527
- get root() {
528
- var _ref, _triggerRef$current7;
529
- return (_ref = (rootRef === null || rootRef === void 0 ? void 0 : rootRef.current) || (triggerRef === null || triggerRef === void 0 ? void 0 : (_triggerRef$current7 = triggerRef.current) === null || _triggerRef$current7 === void 0 ? void 0 : _triggerRef$current7.root)) !== null && _ref !== void 0 ? _ref : null;
530
- },
531
- get overlay() {
532
- var _overlayRef$current;
533
- if (!(overlayRef !== null && overlayRef !== void 0 && overlayRef.current)) {
534
- throw new Error('The overlay is not found. Please confirm whether the picker is open.');
535
- }
536
- return (_overlayRef$current = overlayRef === null || overlayRef === void 0 ? void 0 : overlayRef.current) !== null && _overlayRef$current !== void 0 ? _overlayRef$current : null;
537
- },
538
- get target() {
539
- var _targetRef$current2;
540
- return (_targetRef$current2 = targetRef === null || targetRef === void 0 ? void 0 : targetRef.current) !== null && _targetRef$current2 !== void 0 ? _targetRef$current2 : null;
541
- },
542
- get list() {
543
- if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
544
- throw new Error("\n The list is not found.\n 1.Please set virtualized for the component.\n 2.Please confirm whether the picker is open.\n ");
545
- }
546
- return listRef === null || listRef === void 0 ? void 0 : listRef.current;
547
- },
548
- updatePosition: handleUpdatePosition,
549
- open: handleOpen,
550
- close: handleClose
551
- };
552
- });
553
487
  }
@@ -1,4 +1,4 @@
1
- import React, { Ref } from 'react';
1
+ import React from 'react';
2
2
  import { PickerLocale } from '../locales';
3
3
  import { PickerHandle, PickerToggleProps } from '../Picker';
4
4
  import { ListProps } from '../Windowing';
@@ -49,7 +49,7 @@ export interface SelectPickerProps<T> extends Omit<FormControlPickerProps<T, Pic
49
49
  }
50
50
  export interface SelectPickerComponent {
51
51
  <T>(props: SelectPickerProps<T> & {
52
- ref?: Ref<PickerHandle>;
52
+ ref?: React.Ref<PickerHandle>;
53
53
  }): JSX.Element | null;
54
54
  displayName?: string;
55
55
  propTypes?: React.WeakValidationMap<SelectPickerProps<any>>;
@@ -3,16 +3,16 @@ import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTempla
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
5
  var _templateObject;
6
- import React, { useRef, useState, useCallback } from 'react';
6
+ import React, { useState } from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import pick from 'lodash/pick';
9
9
  import isUndefined from 'lodash/isUndefined';
10
10
  import isNil from 'lodash/isNil';
11
11
  import isFunction from 'lodash/isFunction';
12
12
  import omit from 'lodash/omit';
13
- import { createChainedFunction, useCustom, useClassNames, useControlled, mergeRefs, shallowEqual } from '../utils';
13
+ import { createChainedFunction, useCustom, useClassNames, useControlled, useEventCallback, mergeRefs, shallowEqual } from '../utils';
14
14
  import { getDataGroupBy } from '../utils/getDataGroupBy';
15
- import { DropdownMenu, DropdownMenuItem, PickerToggle, PickerToggleTrigger, PickerOverlay, SearchBar, useFocusItemValue, usePickerClassName, useSearch, usePublicMethods, useToggleKeyDownEvent, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
15
+ import { DropdownMenu, DropdownMenuItem, PickerToggle, PickerToggleTrigger, PickerOverlay, SearchBar, useFocusItemValue, usePickerClassName, useSearch, useToggleKeyDownEvent, usePickerRef, pickTriggerPropKeys, omitTriggerPropKeys, listPickerPropTypes } from '../Picker';
16
16
  var emptyArray = [];
17
17
  /**
18
18
  * The `SelectPicker` component is used to select an item from a list of data.
@@ -73,11 +73,13 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
73
73
  renderMenuItem = props.renderMenuItem,
74
74
  renderExtraFooter = props.renderExtraFooter,
75
75
  rest = _objectWithoutPropertiesLoose(props, ["as", "appearance", "data", "valueKey", "labelKey", "value", "classPrefix", "placeholder", "defaultValue", "disabled", "cleanable", "placement", "menuClassName", "menuAutoWidth", "menuMaxHeight", "menuStyle", "groupBy", "locale", "toggleAs", "style", "searchable", "disabledItemValues", "virtualized", "listProps", "id", "onGroupTitleClick", "searchBy", "onEntered", "onExited", "onClean", "onChange", "onSelect", "onSearch", "onClose", "onOpen", "sort", "renderValue", "renderMenu", "renderMenuGroup", "renderMenuItem", "renderExtraFooter"]);
76
- var triggerRef = useRef(null);
77
- var targetRef = useRef(null);
78
- var overlayRef = useRef(null);
79
- var searchInputRef = useRef(null);
80
- var listRef = useRef(null);
76
+ var _usePickerRef = usePickerRef(ref),
77
+ trigger = _usePickerRef.trigger,
78
+ root = _usePickerRef.root,
79
+ target = _usePickerRef.target,
80
+ overlay = _usePickerRef.overlay,
81
+ list = _usePickerRef.list,
82
+ searchInput = _usePickerRef.searchInput;
81
83
  var _useCustom = useCustom('Picker', overrideLocale),
82
84
  locale = _useCustom.locale;
83
85
  var _ref = useControlled(valueProp, defaultValue),
@@ -87,7 +89,7 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
87
89
  data: data,
88
90
  valueKey: valueKey,
89
91
  target: function target() {
90
- return overlayRef.current;
92
+ return overlay.current;
91
93
  }
92
94
  }),
93
95
  focusItemValue = _useFocusItemValue.focusItemValue,
@@ -110,19 +112,19 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
110
112
  var _useState = useState(false),
111
113
  active = _useState[0],
112
114
  setActive = _useState[1];
113
- var handleClose = useCallback(function () {
114
- var _triggerRef$current, _triggerRef$current$c;
115
- (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$c = _triggerRef$current.close) === null || _triggerRef$current$c === void 0 ? void 0 : _triggerRef$current$c.call(_triggerRef$current);
116
- }, []);
117
- var handleSelect = useCallback(function (value, item, event) {
118
- var _targetRef$current;
115
+ var handleClose = useEventCallback(function () {
116
+ var _trigger$current, _trigger$current$clos;
117
+ (_trigger$current = trigger.current) === null || _trigger$current === void 0 ? void 0 : (_trigger$current$clos = _trigger$current.close) === null || _trigger$current$clos === void 0 ? void 0 : _trigger$current$clos.call(_trigger$current);
118
+ });
119
+ var handleSelect = useEventCallback(function (value, item, event) {
120
+ var _target$current;
119
121
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(value, item, event);
120
- (_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : _targetRef$current.focus();
121
- }, [onSelect]);
122
- var handleChangeValue = useCallback(function (value, event) {
122
+ (_target$current = target.current) === null || _target$current === void 0 ? void 0 : _target$current.focus();
123
+ });
124
+ var handleChangeValue = useEventCallback(function (value, event) {
123
125
  onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
124
- }, [onChange]);
125
- var handleMenuPressEnter = useCallback(function (event) {
126
+ });
127
+ var handleMenuPressEnter = useEventCallback(function (event) {
126
128
  if (!focusItemValue) {
127
129
  return;
128
130
  }
@@ -135,28 +137,28 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
135
137
  handleSelect(focusItemValue, focusItem, event);
136
138
  handleChangeValue(focusItemValue, event);
137
139
  handleClose();
138
- }, [data, focusItemValue, handleChangeValue, handleClose, handleSelect, setValue, valueKey]);
139
- var handleItemSelect = useCallback(function (value, item, event) {
140
+ });
141
+ var handleItemSelect = useEventCallback(function (value, item, event) {
140
142
  setValue(value);
141
143
  setFocusItemValue(value);
142
144
  handleSelect(value, item, event);
143
145
  handleChangeValue(value, event);
144
146
  handleClose();
145
- }, [setValue, setFocusItemValue, handleSelect, handleChangeValue, handleClose]);
146
- var handleClean = useCallback(function (event) {
147
+ });
148
+ var handleClean = useEventCallback(function (event) {
147
149
  if (disabled || !cleanable) {
148
150
  return;
149
151
  }
150
152
  setValue(null);
151
153
  setFocusItemValue(value);
152
154
  handleChangeValue(null, event);
153
- }, [value, disabled, cleanable, setValue, handleChangeValue, setFocusItemValue]);
155
+ });
154
156
  var onPickerKeyDown = useToggleKeyDownEvent(_extends({
155
157
  toggle: !focusItemValue || !active,
156
- triggerRef: triggerRef,
157
- targetRef: targetRef,
158
- overlayRef: overlayRef,
159
- searchInputRef: searchInputRef,
158
+ trigger: trigger,
159
+ target: target,
160
+ overlay: overlay,
161
+ searchInput: searchInput,
160
162
  active: active,
161
163
  onExit: handleClean,
162
164
  onMenuKeyDown: onFocusItem,
@@ -165,22 +167,16 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
165
167
  setFocusItemValue(null);
166
168
  }
167
169
  }, rest));
168
- var handleExited = useCallback(function () {
170
+ var handleExited = useEventCallback(function () {
169
171
  resetSearch();
170
172
  setActive(false);
171
173
  onSearch === null || onSearch === void 0 ? void 0 : onSearch('');
172
174
  onClose === null || onClose === void 0 ? void 0 : onClose();
173
- }, [onClose, resetSearch, onSearch]);
174
- var handleEntered = useCallback(function () {
175
+ });
176
+ var handleEntered = useEventCallback(function () {
175
177
  setActive(true);
176
178
  setFocusItemValue(value);
177
179
  onOpen === null || onOpen === void 0 ? void 0 : onOpen();
178
- }, [onOpen, setFocusItemValue, value]);
179
- usePublicMethods(ref, {
180
- triggerRef: triggerRef,
181
- overlayRef: overlayRef,
182
- targetRef: targetRef,
183
- listRef: listRef
184
180
  });
185
181
 
186
182
  // Find active `MenuItem` by `value`
@@ -227,7 +223,7 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
227
223
  var menu = items.length ? /*#__PURE__*/React.createElement(DropdownMenu, {
228
224
  id: id ? id + "-listbox" : undefined,
229
225
  listProps: listProps,
230
- listRef: listRef,
226
+ listRef: list,
231
227
  disabledItemValues: disabledItemValues,
232
228
  valueKey: valueKey,
233
229
  labelKey: labelKey,
@@ -252,17 +248,17 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
252
248
  className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["none"])))
253
249
  }, locale === null || locale === void 0 ? void 0 : locale.noResultsText);
254
250
  return /*#__PURE__*/React.createElement(PickerOverlay, {
255
- ref: mergeRefs(overlayRef, speakerRef),
251
+ ref: mergeRefs(overlay, speakerRef),
256
252
  autoWidth: menuAutoWidth,
257
253
  className: classes,
258
254
  style: styles,
259
255
  onKeyDown: onPickerKeyDown,
260
- target: triggerRef
256
+ target: trigger
261
257
  }, searchable && /*#__PURE__*/React.createElement(SearchBar, {
262
258
  placeholder: locale === null || locale === void 0 ? void 0 : locale.searchPlaceholder,
263
259
  onChange: handleSearch,
264
260
  value: searchKeyword,
265
- inputRef: searchInputRef
261
+ inputRef: searchInput
266
262
  }), renderMenu ? renderMenu(menu) : menu, renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
267
263
  };
268
264
  var _usePickerClassName = usePickerClassName(_extends({}, props, {
@@ -276,17 +272,18 @@ var SelectPicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
276
272
  usedClassNamePropKeys = _usePickerClassName[1];
277
273
  return /*#__PURE__*/React.createElement(PickerToggleTrigger, {
278
274
  pickerProps: pick(props, pickTriggerPropKeys),
279
- ref: triggerRef,
275
+ ref: trigger,
280
276
  placement: placement,
281
277
  onEntered: createChainedFunction(handleEntered, onEntered),
282
278
  onExited: createChainedFunction(handleExited, onExited),
283
279
  speaker: renderDropdownMenu
284
280
  }, /*#__PURE__*/React.createElement(Component, {
285
281
  className: classes,
286
- style: style
282
+ style: style,
283
+ ref: root
287
284
  }, /*#__PURE__*/React.createElement(PickerToggle, _extends({}, omit(rest, [].concat(omitTriggerPropKeys, usedClassNamePropKeys)), {
288
285
  id: id,
289
- ref: targetRef,
286
+ ref: target,
290
287
  appearance: appearance,
291
288
  onClean: createChainedFunction(handleClean, onClean),
292
289
  onKeyDown: onPickerKeyDown,