@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.
- package/es/TreeSelect.d.ts +15 -2
- package/es/TreeSelect.js +27 -7
- package/es/hooks/useSearchConfig.d.ts +4 -0
- package/es/hooks/useSearchConfig.js +25 -0
- package/lib/TreeSelect.d.ts +15 -2
- package/lib/TreeSelect.js +27 -7
- package/lib/hooks/useSearchConfig.d.ts +4 -0
- package/lib/hooks/useSearchConfig.js +32 -0
- package/package.json +2 -2
package/es/TreeSelect.d.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
|
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,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
|
+
}
|
package/lib/TreeSelect.d.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
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,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
|
+
"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
|
|
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
|
},
|