@rc-component/tree-select 1.1.3 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,14 @@ import { SHOW_ALL, SHOW_CHILD, SHOW_PARENT } from './utils/strategyUtil';
8
8
  import type { SafeKey, DataNode, SimpleModeConfig, ChangeEventExtra, FieldNames, LegacyDataNode } from './interface';
9
9
  export type SemanticName = 'input' | 'prefix' | 'suffix';
10
10
  export type PopupSemantic = 'item' | 'itemTitle';
11
- export interface TreeSelectProps<ValueType = any, OptionType extends DataNode = DataNode> extends Omit<BaseSelectPropsWithoutPrivate, 'mode' | 'classNames' | 'styles'> {
11
+ export interface SearchConfig {
12
+ searchValue?: string;
13
+ onSearch?: (value: string) => void;
14
+ autoClearSearchValue?: boolean;
15
+ filterTreeNode?: boolean | ((inputValue: string, treeNode: DataNode) => boolean);
16
+ treeNodeFilterProp?: string;
17
+ }
18
+ export interface TreeSelectProps<ValueType = any, OptionType extends DataNode = DataNode> extends Omit<BaseSelectPropsWithoutPrivate, 'mode' | 'classNames' | 'styles' | 'showSearch'> {
12
19
  prefixCls?: string;
13
20
  id?: string;
14
21
  children?: React.ReactNode;
@@ -21,12 +28,18 @@ export interface TreeSelectProps<ValueType = any, OptionType extends DataNode =
21
28
  value?: ValueType;
22
29
  defaultValue?: ValueType;
23
30
  onChange?: (value: ValueType, labelList: React.ReactNode[], extra: ChangeEventExtra) => void;
31
+ showSearch?: boolean | SearchConfig;
32
+ /** @deprecated Use `showSearch.searchValue` instead */
24
33
  searchValue?: string;
25
- /** @deprecated Use `searchValue` instead */
34
+ /** @deprecated Use `showSearch.searchValue` instead */
26
35
  inputValue?: string;
36
+ /** @deprecated Use `showSearch.onSearch` instead */
27
37
  onSearch?: (value: string) => void;
38
+ /** @deprecated Use `showSearch.autoClearSearchValue` instead */
28
39
  autoClearSearchValue?: boolean;
40
+ /** @deprecated Use `showSearch.filterTreeNode` instead */
29
41
  filterTreeNode?: boolean | ((inputValue: string, treeNode: DataNode) => boolean);
42
+ /** @deprecated Use `showSearch.treeNodeFilterProp` instead */
30
43
  treeNodeFilterProp?: string;
31
44
  onSelect?: (value: ValueType, option: OptionType) => void;
32
45
  onDeselect?: (value: ValueType, option: OptionType) => void;
package/es/TreeSelect.js CHANGED
@@ -18,6 +18,7 @@ import { fillAdditionalInfo, fillLegacyProps } from "./utils/legacyUtil";
18
18
  import { formatStrategyValues, SHOW_ALL, SHOW_CHILD, SHOW_PARENT } from "./utils/strategyUtil";
19
19
  import { fillFieldNames, isNil, toArray } from "./utils/valueUtil";
20
20
  import warningProps from "./utils/warningPropsUtil";
21
+ import useSearchConfig from "./hooks/useSearchConfig";
21
22
  function isRawValue(value) {
22
23
  return !value || typeof value !== 'object';
23
24
  }
@@ -32,12 +33,13 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
32
33
  onSelect,
33
34
  onDeselect,
34
35
  // Search
35
- searchValue,
36
- inputValue,
37
- onSearch,
38
- autoClearSearchValue = true,
39
- filterTreeNode,
40
- treeNodeFilterProp = 'value',
36
+ showSearch,
37
+ searchValue: legacySearchValue,
38
+ inputValue: legacyinputValue,
39
+ onSearch: legacyOnSearch,
40
+ autoClearSearchValue: legacyAutoClearSearchValue,
41
+ filterTreeNode: legacyFilterTreeNode,
42
+ treeNodeFilterProp: legacytreeNodeFilterProp,
41
43
  // Selector
42
44
  showCheckedStrategy,
43
45
  treeNodeLabelProp,
@@ -86,6 +88,22 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
86
88
  const mergedCheckable = treeCheckable || treeCheckStrictly;
87
89
  const mergedLabelInValue = treeCheckStrictly || labelInValue;
88
90
  const mergedMultiple = mergedCheckable || multiple;
91
+ const searchProps = {
92
+ searchValue: legacySearchValue,
93
+ inputValue: legacyinputValue,
94
+ onSearch: legacyOnSearch,
95
+ autoClearSearchValue: legacyAutoClearSearchValue,
96
+ filterTreeNode: legacyFilterTreeNode,
97
+ treeNodeFilterProp: legacytreeNodeFilterProp
98
+ };
99
+ const [mergedShowSearch, searchConfig] = useSearchConfig(showSearch, searchProps);
100
+ const {
101
+ searchValue,
102
+ onSearch,
103
+ autoClearSearchValue = true,
104
+ filterTreeNode,
105
+ treeNodeFilterProp = 'value'
106
+ } = searchConfig;
89
107
  const [internalValue, setInternalValue] = useMergedState(defaultValue, {
90
108
  value
91
109
  });
@@ -110,7 +128,7 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
110
128
 
111
129
  // =========================== Search ===========================
112
130
  const [mergedSearchValue, setSearchValue] = useMergedState('', {
113
- value: searchValue !== undefined ? searchValue : inputValue,
131
+ value: searchValue,
114
132
  postState: search => search || ''
115
133
  });
116
134
  const onInternalSearch = searchText => {
@@ -499,6 +517,8 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
499
517
  onDisplayValuesChange: onDisplayValuesChange
500
518
  // >>> Search
501
519
  ,
520
+ autoClearSearchValue: autoClearSearchValue,
521
+ showSearch: mergedShowSearch,
502
522
  searchValue: mergedSearchValue,
503
523
  onSearch: onInternalSearch
504
524
  // >>> Options
@@ -0,0 +1,4 @@
1
+ import type { SearchConfig } from "../TreeSelect";
2
+ export default function useSearchConfig(showSearch: boolean | SearchConfig, props: SearchConfig & {
3
+ inputValue: string;
4
+ }): [boolean, SearchConfig];
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+
3
+ // Convert `showSearch` to unique config
4
+ export default function useSearchConfig(showSearch, props) {
5
+ const {
6
+ searchValue,
7
+ inputValue,
8
+ onSearch,
9
+ autoClearSearchValue,
10
+ filterTreeNode,
11
+ treeNodeFilterProp
12
+ } = props;
13
+ return React.useMemo(() => {
14
+ const isObject = typeof showSearch === 'object';
15
+ const searchConfig = {
16
+ searchValue: searchValue ?? inputValue,
17
+ onSearch,
18
+ autoClearSearchValue,
19
+ filterTreeNode,
20
+ treeNodeFilterProp,
21
+ ...(isObject ? showSearch : {})
22
+ };
23
+ return [isObject ? true : showSearch, searchConfig];
24
+ }, [showSearch, searchValue, inputValue, onSearch, autoClearSearchValue, filterTreeNode, treeNodeFilterProp]);
25
+ }
@@ -8,7 +8,14 @@ import { SHOW_ALL, SHOW_CHILD, SHOW_PARENT } from './utils/strategyUtil';
8
8
  import type { SafeKey, DataNode, SimpleModeConfig, ChangeEventExtra, FieldNames, LegacyDataNode } from './interface';
9
9
  export type SemanticName = 'input' | 'prefix' | 'suffix';
10
10
  export type PopupSemantic = 'item' | 'itemTitle';
11
- export interface TreeSelectProps<ValueType = any, OptionType extends DataNode = DataNode> extends Omit<BaseSelectPropsWithoutPrivate, 'mode' | 'classNames' | 'styles'> {
11
+ export interface SearchConfig {
12
+ searchValue?: string;
13
+ onSearch?: (value: string) => void;
14
+ autoClearSearchValue?: boolean;
15
+ filterTreeNode?: boolean | ((inputValue: string, treeNode: DataNode) => boolean);
16
+ treeNodeFilterProp?: string;
17
+ }
18
+ export interface TreeSelectProps<ValueType = any, OptionType extends DataNode = DataNode> extends Omit<BaseSelectPropsWithoutPrivate, 'mode' | 'classNames' | 'styles' | 'showSearch'> {
12
19
  prefixCls?: string;
13
20
  id?: string;
14
21
  children?: React.ReactNode;
@@ -21,12 +28,18 @@ export interface TreeSelectProps<ValueType = any, OptionType extends DataNode =
21
28
  value?: ValueType;
22
29
  defaultValue?: ValueType;
23
30
  onChange?: (value: ValueType, labelList: React.ReactNode[], extra: ChangeEventExtra) => void;
31
+ showSearch?: boolean | SearchConfig;
32
+ /** @deprecated Use `showSearch.searchValue` instead */
24
33
  searchValue?: string;
25
- /** @deprecated Use `searchValue` instead */
34
+ /** @deprecated Use `showSearch.searchValue` instead */
26
35
  inputValue?: string;
36
+ /** @deprecated Use `showSearch.onSearch` instead */
27
37
  onSearch?: (value: string) => void;
38
+ /** @deprecated Use `showSearch.autoClearSearchValue` instead */
28
39
  autoClearSearchValue?: boolean;
40
+ /** @deprecated Use `showSearch.filterTreeNode` instead */
29
41
  filterTreeNode?: boolean | ((inputValue: string, treeNode: DataNode) => boolean);
42
+ /** @deprecated Use `showSearch.treeNodeFilterProp` instead */
30
43
  treeNodeFilterProp?: string;
31
44
  onSelect?: (value: ValueType, option: OptionType) => void;
32
45
  onDeselect?: (value: ValueType, option: OptionType) => void;
package/lib/TreeSelect.js CHANGED
@@ -23,6 +23,7 @@ var _legacyUtil = require("./utils/legacyUtil");
23
23
  var _strategyUtil = require("./utils/strategyUtil");
24
24
  var _valueUtil = require("./utils/valueUtil");
25
25
  var _warningPropsUtil = _interopRequireDefault(require("./utils/warningPropsUtil"));
26
+ var _useSearchConfig = _interopRequireDefault(require("./hooks/useSearchConfig"));
26
27
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
27
28
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
28
29
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -41,12 +42,13 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
41
42
  onSelect,
42
43
  onDeselect,
43
44
  // Search
44
- searchValue,
45
- inputValue,
46
- onSearch,
47
- autoClearSearchValue = true,
48
- filterTreeNode,
49
- treeNodeFilterProp = 'value',
45
+ showSearch,
46
+ searchValue: legacySearchValue,
47
+ inputValue: legacyinputValue,
48
+ onSearch: legacyOnSearch,
49
+ autoClearSearchValue: legacyAutoClearSearchValue,
50
+ filterTreeNode: legacyFilterTreeNode,
51
+ treeNodeFilterProp: legacytreeNodeFilterProp,
50
52
  // Selector
51
53
  showCheckedStrategy,
52
54
  treeNodeLabelProp,
@@ -95,6 +97,22 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
95
97
  const mergedCheckable = treeCheckable || treeCheckStrictly;
96
98
  const mergedLabelInValue = treeCheckStrictly || labelInValue;
97
99
  const mergedMultiple = mergedCheckable || multiple;
100
+ const searchProps = {
101
+ searchValue: legacySearchValue,
102
+ inputValue: legacyinputValue,
103
+ onSearch: legacyOnSearch,
104
+ autoClearSearchValue: legacyAutoClearSearchValue,
105
+ filterTreeNode: legacyFilterTreeNode,
106
+ treeNodeFilterProp: legacytreeNodeFilterProp
107
+ };
108
+ const [mergedShowSearch, searchConfig] = (0, _useSearchConfig.default)(showSearch, searchProps);
109
+ const {
110
+ searchValue,
111
+ onSearch,
112
+ autoClearSearchValue = true,
113
+ filterTreeNode,
114
+ treeNodeFilterProp = 'value'
115
+ } = searchConfig;
98
116
  const [internalValue, setInternalValue] = (0, _useMergedState.default)(defaultValue, {
99
117
  value
100
118
  });
@@ -119,7 +137,7 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
119
137
 
120
138
  // =========================== Search ===========================
121
139
  const [mergedSearchValue, setSearchValue] = (0, _useMergedState.default)('', {
122
- value: searchValue !== undefined ? searchValue : inputValue,
140
+ value: searchValue,
123
141
  postState: search => search || ''
124
142
  });
125
143
  const onInternalSearch = searchText => {
@@ -508,6 +526,8 @@ const TreeSelect = /*#__PURE__*/React.forwardRef((props, ref) => {
508
526
  onDisplayValuesChange: onDisplayValuesChange
509
527
  // >>> Search
510
528
  ,
529
+ autoClearSearchValue: autoClearSearchValue,
530
+ showSearch: mergedShowSearch,
511
531
  searchValue: mergedSearchValue,
512
532
  onSearch: onInternalSearch
513
533
  // >>> Options
@@ -0,0 +1,4 @@
1
+ import type { SearchConfig } from "../TreeSelect";
2
+ export default function useSearchConfig(showSearch: boolean | SearchConfig, props: SearchConfig & {
3
+ inputValue: string;
4
+ }): [boolean, SearchConfig];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useSearchConfig;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
9
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
10
+ // Convert `showSearch` to unique config
11
+ function useSearchConfig(showSearch, props) {
12
+ const {
13
+ searchValue,
14
+ inputValue,
15
+ onSearch,
16
+ autoClearSearchValue,
17
+ filterTreeNode,
18
+ treeNodeFilterProp
19
+ } = props;
20
+ return React.useMemo(() => {
21
+ const isObject = typeof showSearch === 'object';
22
+ const searchConfig = {
23
+ searchValue: searchValue ?? inputValue,
24
+ onSearch,
25
+ autoClearSearchValue,
26
+ filterTreeNode,
27
+ treeNodeFilterProp,
28
+ ...(isObject ? showSearch : {})
29
+ };
30
+ return [isObject ? true : showSearch, searchConfig];
31
+ }, [showSearch, searchValue, inputValue, onSearch, autoClearSearchValue, filterTreeNode, treeNodeFilterProp]);
32
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/tree-select",
3
- "version": "1.1.3",
3
+ "version": "1.2.1",
4
4
  "description": "tree-select ui component for react",
5
5
  "keywords": [
6
6
  "react",
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "classnames": "2.x",
48
- "@rc-component/select": "~1.0.7",
48
+ "@rc-component/select": "~1.1.0",
49
49
  "@rc-component/tree": "~1.0.1",
50
50
  "@rc-component/util": "^1.2.1"
51
51
  },