@hi-ui/check-select 4.0.0-alpha.2 → 4.0.0-alpha.20
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/lib/cjs/CheckSelect.js +263 -112
- package/lib/cjs/CheckSelect.js.map +1 -1
- package/lib/cjs/context.js +7 -7
- package/lib/cjs/context.js.map +1 -1
- package/lib/cjs/index.js +1 -1
- package/lib/cjs/styles/index.scss.js +1 -1
- package/lib/cjs/use-check-select.js +93 -49
- package/lib/cjs/use-check-select.js.map +1 -1
- package/lib/esm/CheckSelect.js +256 -108
- package/lib/esm/CheckSelect.js.map +1 -1
- package/lib/esm/context.js +6 -6
- package/lib/esm/context.js.map +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/styles/index.scss.js +1 -1
- package/lib/esm/use-check-select.js +92 -48
- package/lib/esm/use-check-select.js.map +1 -1
- package/lib/types/CheckSelect.d.ts +62 -27
- package/lib/types/context.d.ts +10 -546
- package/lib/types/hooks/index.d.ts +0 -1
- package/lib/types/hooks/use-search.d.ts +1 -1
- package/lib/types/types.d.ts +40 -5
- package/lib/types/use-check-select.d.ts +65 -276
- package/package.json +26 -17
- package/lib/cjs/hooks/use-search.js +0 -81
- package/lib/cjs/hooks/use-search.js.map +0 -1
- package/lib/esm/hooks/use-search.js +0 -72
- package/lib/esm/hooks/use-search.js.map +0 -1
- package/lib/types/hooks/use-cache.d.ts +0 -8
@@ -21,14 +21,14 @@ var React = require('react');
|
|
21
21
|
|
22
22
|
var useUncontrolledState = require('@hi-ui/use-uncontrolled-state');
|
23
23
|
|
24
|
-
var useSearch = require('./hooks/use-search.js');
|
25
|
-
|
26
24
|
var useCheck = require('@hi-ui/use-check');
|
27
25
|
|
28
26
|
var useLatest = require('@hi-ui/use-latest');
|
29
27
|
|
30
28
|
var useChildren = require('@hi-ui/use-children');
|
31
29
|
|
30
|
+
var treeUtils = require('@hi-ui/tree-utils');
|
31
|
+
|
32
32
|
function _interopDefaultLegacy(e) {
|
33
33
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
34
34
|
'default': e
|
@@ -39,6 +39,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
39
39
|
|
40
40
|
var NOOP_ARRAY = [];
|
41
41
|
var NOOP_VALUE = [];
|
42
|
+
var DEFAULT_FIELD_NAMES = {};
|
42
43
|
|
43
44
|
var useCheckSelect = function useCheckSelect(_a) {
|
44
45
|
var _a$data = _a.data,
|
@@ -53,46 +54,93 @@ var useCheckSelect = function useCheckSelect(_a) {
|
|
53
54
|
onSelect = _a.onSelect,
|
54
55
|
_a$emptyContent = _a.emptyContent,
|
55
56
|
emptyContent = _a$emptyContent === void 0 ? '无匹配选项' : _a$emptyContent,
|
56
|
-
|
57
|
-
|
58
|
-
rest = tslib.__rest(_a, ["data", "children", "disabled", "value", "defaultValue", "onChange", "onSelect", "emptyContent", "searchPlaceholder", "
|
57
|
+
_a$fieldNames = _a.fieldNames,
|
58
|
+
fieldNames = _a$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _a$fieldNames,
|
59
|
+
rest = tslib.__rest(_a, ["data", "children", "disabled", "value", "defaultValue", "onChange", "onSelect", "emptyContent", "searchPlaceholder", "filter", "fieldNames"]);
|
59
60
|
|
60
61
|
var data = React.useMemo(function () {
|
61
62
|
if (children) {
|
62
|
-
var
|
63
|
-
|
64
|
-
|
65
|
-
var dfs = function dfs(list) {
|
63
|
+
var dfs = function dfs(child) {
|
64
|
+
var arr = [];
|
65
|
+
var list = useChildren.toArray(child);
|
66
66
|
list.forEach(function (item) {
|
67
67
|
if (! /*#__PURE__*/React__default['default'].isValidElement(item)) return; // @ts-ignore
|
68
68
|
|
69
|
-
if (item.type
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
69
|
+
if (item.type.HiName === 'CheckSelectOption') {
|
70
|
+
var props = item.props;
|
71
|
+
|
72
|
+
var _value = props.value,
|
73
|
+
_children = props.children,
|
74
|
+
_disabled = props.disabled,
|
75
|
+
_rest = tslib.__rest(props, ["value", "children", "disabled", "groupTitle"]);
|
76
|
+
|
77
|
+
var option = {
|
78
|
+
id: _value,
|
79
|
+
title: _children,
|
80
|
+
disabled: _disabled,
|
81
|
+
rootProps: _rest
|
82
|
+
};
|
83
|
+
arr.push(option); // @ts-ignore
|
84
|
+
} else if (item.type.HiName === 'CheckSelectOptionGroup') {
|
85
|
+
var _props = item.props;
|
86
|
+
|
87
|
+
var groupId = _props.groupId,
|
88
|
+
label = _props.label,
|
89
|
+
_children2 = _props.children,
|
90
|
+
_rest2 = tslib.__rest(_props, ["groupId", "label", "children"]);
|
91
|
+
|
92
|
+
var optGroup = {
|
93
|
+
groupId: groupId,
|
94
|
+
groupTitle: label,
|
95
|
+
children: [],
|
96
|
+
rootProps: _rest2
|
97
|
+
}; // @ts-ignore
|
98
|
+
|
99
|
+
if (_children2) {
|
74
100
|
// @ts-ignore
|
75
|
-
|
76
|
-
|
77
|
-
dfs(_list);
|
101
|
+
optGroup.children = dfs(_children2);
|
78
102
|
}
|
103
|
+
|
104
|
+
arr.push(optGroup);
|
79
105
|
}
|
80
106
|
});
|
107
|
+
return arr;
|
81
108
|
};
|
82
109
|
|
83
|
-
dfs(
|
84
|
-
return arr.map(function (_ref) {
|
85
|
-
var props = _ref.props;
|
86
|
-
return {
|
87
|
-
id: props.value,
|
88
|
-
title: props.children,
|
89
|
-
disabled: props.disabled || false
|
90
|
-
};
|
91
|
-
});
|
110
|
+
return dfs(children);
|
92
111
|
}
|
93
112
|
|
94
113
|
return dataProp;
|
95
114
|
}, [children, dataProp]);
|
115
|
+
/**
|
116
|
+
* 转换对象
|
117
|
+
*/
|
118
|
+
|
119
|
+
var getKeyFields = React.useCallback(function (node, key) {
|
120
|
+
return node[fieldNames[key] || key];
|
121
|
+
}, [fieldNames]);
|
122
|
+
var flattedData = React.useMemo(function () {
|
123
|
+
// @ts-ignore
|
124
|
+
return treeUtils.flattenTree(data, function (node) {
|
125
|
+
if ('groupId' in node.raw) {
|
126
|
+
// @ts-ignore
|
127
|
+
node.id = node.raw.groupId; // @ts-ignore
|
128
|
+
|
129
|
+
node.groupTitle = node.raw.groupTitle; // @ts-ignore
|
130
|
+
|
131
|
+
node.groupId = node.raw.groupId;
|
132
|
+
} else {
|
133
|
+
// TODO:support children field map
|
134
|
+
node.id = getKeyFields(node.raw, 'id'); // @ts-ignore
|
135
|
+
|
136
|
+
node.title = getKeyFields(node.raw, 'title'); // @ts-ignore
|
137
|
+
|
138
|
+
node.disabled = getKeyFields(node.raw, 'disabled');
|
139
|
+
}
|
140
|
+
|
141
|
+
return node;
|
142
|
+
});
|
143
|
+
}, [data, getKeyFields]);
|
96
144
|
|
97
145
|
var _useUncontrolledState = useUncontrolledState.useUncontrolledState(defaultValue, valueProp, onChangeProp),
|
98
146
|
value = _useUncontrolledState[0],
|
@@ -111,34 +159,30 @@ var useCheckSelect = function useCheckSelect(_a) {
|
|
111
159
|
allowCheck: allowCheck
|
112
160
|
}),
|
113
161
|
onOptionCheck = _useCheckDefault[0],
|
114
|
-
isSelectedId = _useCheckDefault[1];
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
placeholder: searchPlaceholder,
|
126
|
-
value: inputProps.value,
|
127
|
-
onChange: inputProps.onChange
|
128
|
-
};
|
129
|
-
}, [searchPlaceholder, inputProps]);
|
162
|
+
isSelectedId = _useCheckDefault[1]; // const [inSearch, matchedItems, inputProps, isEmpty, resetSearch] = useSearch(data, filter)
|
163
|
+
// const getSearchInputProps = useCallback(
|
164
|
+
// () => ({
|
165
|
+
// placeholder: searchPlaceholder,
|
166
|
+
// value: inputProps.value,
|
167
|
+
// onChange: inputProps.onChange,
|
168
|
+
// }),
|
169
|
+
// [searchPlaceholder, inputProps]
|
170
|
+
// )
|
171
|
+
|
172
|
+
|
130
173
|
return {
|
131
174
|
rootProps: rest,
|
132
|
-
data: inSearch ? matchedItems : data,
|
175
|
+
// data: inSearch ? matchedItems : data,
|
176
|
+
data: data,
|
177
|
+
flattedData: flattedData,
|
133
178
|
value: value,
|
179
|
+
tryChangeValue: tryChangeValue,
|
134
180
|
onSelect: onOptionCheck,
|
135
181
|
isSelectedId: isSelectedId,
|
136
|
-
emptyContent: emptyContent,
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
resetSearch: resetSearch,
|
141
|
-
titleRender: titleRender
|
182
|
+
emptyContent: emptyContent // getSearchInputProps,
|
183
|
+
// isEmpty,
|
184
|
+
// resetSearch,
|
185
|
+
|
142
186
|
};
|
143
187
|
};
|
144
188
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-check-select.js","sources":["../../src/use-check-select.ts"],"sourcesContent":[null],"names":["NOOP_ARRAY","NOOP_VALUE","useCheckSelect","_a","data","dataProp","children","disabled","valueProp","value","defaultValue","onChangeProp","onChange","onSelect","emptyContent","
|
1
|
+
{"version":3,"file":"use-check-select.js","sources":["../../src/use-check-select.ts"],"sourcesContent":[null],"names":["NOOP_ARRAY","NOOP_VALUE","DEFAULT_FIELD_NAMES","useCheckSelect","_a","data","dataProp","children","disabled","valueProp","value","defaultValue","onChangeProp","onChange","onSelect","emptyContent","fieldNames","rest","useMemo","dfs","child","arr","list","toArray","forEach","item","React","isValidElement","type","HiName","props","option","id","title","rootProps","push","groupId","label","optGroup","groupTitle","getKeyFields","useCallback","node","key","flattedData","flattenTree","raw","useUncontrolledState","tryChangeValue","onSelectLatest","useLatestCallback","proxyTryChangeValue","shouldChecked","useCheckDefault","checkedIds","onCheck","allowCheck","onOptionCheck","isSelectedId"],"mappings":"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"}
|
package/lib/esm/CheckSelect.js
CHANGED
@@ -8,18 +8,23 @@
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
9
9
|
*/
|
10
10
|
import { __rest } from 'tslib';
|
11
|
-
import React, { forwardRef, useState,
|
11
|
+
import React, { forwardRef, useCallback, useState, useMemo } from 'react';
|
12
12
|
import { getPrefixCls, cx } from '@hi-ui/classname';
|
13
13
|
import { __DEV__ } from '@hi-ui/env';
|
14
|
-
import Input from '@hi-ui/input';
|
15
|
-
import { useToggle } from '@hi-ui/use-toggle';
|
16
14
|
import { useCheckSelect } from './use-check-select.js';
|
17
|
-
import
|
18
|
-
import {
|
19
|
-
import {
|
20
|
-
import { useLatestCallback } from '@hi-ui/use-latest';
|
15
|
+
import { UpOutlined, DownOutlined } from '@hi-ui/icons';
|
16
|
+
import { CheckSelectProvider, useCheckSelectContext } from './context.js';
|
17
|
+
import { useLatestCallback, useLatestRef } from '@hi-ui/use-latest';
|
21
18
|
import Checkbox from '@hi-ui/checkbox';
|
22
|
-
import {
|
19
|
+
import { TagInputMock } from '@hi-ui/tag-input';
|
20
|
+
import { isFunction, isArrayNonEmpty } from '@hi-ui/type-assertion';
|
21
|
+
import VirtualList from 'rc-virtual-list';
|
22
|
+
import { Picker } from '@hi-ui/picker';
|
23
|
+
import { uniqBy } from 'lodash';
|
24
|
+
import { Highlighter } from '@hi-ui/highlighter';
|
25
|
+
import { useToggle } from '@hi-ui/use-toggle';
|
26
|
+
import { times } from '@hi-ui/times';
|
27
|
+
import { useAsyncSearch, useTreeCustomSearch, useFilterSearch, useSearchMode } from '@hi-ui/use-search-mode';
|
23
28
|
var _role = 'check-select';
|
24
29
|
|
25
30
|
var _prefix = getPrefixCls(_role);
|
@@ -31,83 +36,200 @@ var _prefix = getPrefixCls(_role);
|
|
31
36
|
var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
32
37
|
var _a$prefixCls = _a.prefixCls,
|
33
38
|
prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
|
34
|
-
_a$role = _a.role,
|
35
|
-
role = _a$role === void 0 ? _role : _a$role,
|
36
39
|
className = _a.className,
|
37
40
|
children = _a.children,
|
38
41
|
_a$disabled = _a.disabled,
|
39
42
|
disabled = _a$disabled === void 0 ? false : _a$disabled,
|
40
43
|
_a$clearable = _a.clearable,
|
41
|
-
clearable = _a$clearable === void 0 ?
|
42
|
-
_a$
|
43
|
-
|
44
|
-
placeholder = _a.placeholder,
|
44
|
+
clearable = _a$clearable === void 0 ? true : _a$clearable,
|
45
|
+
_a$placeholder = _a.placeholder,
|
46
|
+
placeholder = _a$placeholder === void 0 ? '请选择' : _a$placeholder,
|
45
47
|
displayRenderProp = _a.displayRender,
|
46
48
|
onSelectProp = _a.onSelect,
|
47
|
-
|
48
|
-
|
49
|
+
height = _a.height,
|
50
|
+
_a$itemHeight = _a.itemHeight,
|
51
|
+
itemHeight = _a$itemHeight === void 0 ? 40 : _a$itemHeight,
|
52
|
+
_a$virtual = _a.virtual,
|
53
|
+
virtual = _a$virtual === void 0 ? true : _a$virtual,
|
54
|
+
appearance = _a.appearance,
|
55
|
+
invalid = _a.invalid,
|
56
|
+
dataSource = _a.dataSource,
|
57
|
+
filterOption = _a.filterOption,
|
58
|
+
searchableProp = _a.searchable,
|
59
|
+
titleRender = _a.titleRender,
|
60
|
+
renderExtraFooter = _a.renderExtraFooter,
|
61
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "children", "disabled", "clearable", "wrap", "placeholder", "displayRender", "onSelect", "popper", "height", "itemHeight", "virtual", "onOpen", "onClose", "appearance", "invalid", "dataSource", "filterOption", "searchable", "titleRender", "renderExtraFooter"]);
|
49
62
|
|
50
63
|
var _useToggle = useToggle(),
|
51
64
|
menuVisible = _useToggle[0],
|
52
65
|
menuVisibleAction = _useToggle[1];
|
53
66
|
|
54
|
-
var _useState = useState(null),
|
55
|
-
targetElRef = _useState[0],
|
56
|
-
setTargetElRef = _useState[1];
|
57
|
-
|
58
|
-
var openMenu = useCallback(function () {
|
59
|
-
if (disabled) return;
|
60
|
-
menuVisibleAction.on();
|
61
|
-
}, [disabled, menuVisibleAction]);
|
62
|
-
var onSelectLatest = useLatestCallback(onSelectProp);
|
63
67
|
var displayRender = useCallback(function (item) {
|
64
|
-
if (displayRenderProp) {
|
68
|
+
if (isFunction(displayRenderProp)) {
|
65
69
|
return displayRenderProp(item);
|
66
70
|
}
|
67
71
|
|
68
72
|
return item.title;
|
69
|
-
}, [displayRenderProp]);
|
73
|
+
}, [displayRenderProp]);
|
74
|
+
var onSelect = useLatestCallback(function (value, item, shouldChecked) {
|
75
|
+
onSelectProp === null || onSelectProp === void 0 ? void 0 : onSelectProp(value, item, shouldChecked);
|
76
|
+
|
77
|
+
if (shouldChecked) {
|
78
|
+
// TODO:as useCheckList
|
79
|
+
setSelectedItems(function (prev) {
|
80
|
+
return [].concat(prev, [item]);
|
81
|
+
});
|
82
|
+
}
|
83
|
+
});
|
70
84
|
|
71
85
|
var _b = useCheckSelect(Object.assign(Object.assign({}, rest), {
|
72
|
-
|
73
|
-
|
86
|
+
children: children,
|
87
|
+
onSelect: onSelect
|
74
88
|
})),
|
75
|
-
rootProps = _b.rootProps,
|
76
89
|
context = __rest(_b, ["rootProps"]);
|
77
90
|
|
78
91
|
var value = context.value,
|
79
92
|
tryChangeValue = context.tryChangeValue,
|
80
|
-
|
81
|
-
|
82
|
-
|
93
|
+
flattedData = context.flattedData; // ************************** 异步搜索 ************************* //
|
94
|
+
// TODO: 支持对 Item 传入 状态
|
95
|
+
|
96
|
+
var _c = useAsyncSearch({
|
97
|
+
dataSource: dataSource
|
98
|
+
}),
|
99
|
+
loading = _c.loading,
|
100
|
+
hasError = _c.hasError,
|
101
|
+
dataSourceStrategy = __rest(_c, ["loading", "hasError"]);
|
102
|
+
|
103
|
+
var customSearchStrategy = useTreeCustomSearch({
|
104
|
+
data: flattedData,
|
105
|
+
filterOption: filterOption
|
106
|
+
});
|
107
|
+
var filterSearchStrategy = useFilterSearch({
|
108
|
+
data: flattedData,
|
109
|
+
flattedData: flattedData,
|
110
|
+
searchMode: searchableProp ? 'filter' : undefined
|
111
|
+
});
|
112
|
+
|
113
|
+
var _useSearchMode = useSearchMode({
|
114
|
+
searchable: searchableProp,
|
115
|
+
strategies: [dataSourceStrategy, customSearchStrategy, filterSearchStrategy]
|
116
|
+
}),
|
117
|
+
stateInSearch = _useSearchMode.state,
|
118
|
+
searchable = _useSearchMode.searchable,
|
119
|
+
searchMode = _useSearchMode.searchMode,
|
120
|
+
onSearch = _useSearchMode.onSearch,
|
121
|
+
searchValue = _useSearchMode.keyword; // 拦截 titleRender,自定义高亮展示
|
122
|
+
|
123
|
+
|
124
|
+
var proxyTitleRender = useCallback(function (node) {
|
125
|
+
if (titleRender) {
|
126
|
+
var _ret = titleRender(node);
|
127
|
+
|
128
|
+
if (_ret && _ret !== true) return _ret;
|
129
|
+
} // 本地搜索执行默认高亮规则
|
130
|
+
|
131
|
+
|
132
|
+
var highlight = !!searchValue && (searchMode === 'highlight' || searchMode === 'filter');
|
133
|
+
var ret = highlight ? /*#__PURE__*/React.createElement(Checkbox, {
|
134
|
+
checked: node.checked,
|
135
|
+
disabled: node.disabled
|
136
|
+
}, /*#__PURE__*/React.createElement(Highlighter, {
|
137
|
+
keyword: searchValue
|
138
|
+
}, node.title)) : true;
|
139
|
+
return ret;
|
140
|
+
}, [titleRender, searchValue, searchMode]);
|
141
|
+
var shouldUseSearch = !!searchValue && !hasError;
|
142
|
+
var selectProps = {
|
143
|
+
data: shouldUseSearch ? stateInSearch.data : flattedData,
|
144
|
+
titleRender: proxyTitleRender
|
145
|
+
}; // 搜索时临时选中缓存数据
|
146
|
+
|
147
|
+
var _useState = useState([]),
|
148
|
+
selectedItems = _useState[0],
|
149
|
+
setSelectedItems = _useState[1]; // 下拉菜单不能合并(因为树形数据,不知道是第几级)
|
150
|
+
|
151
|
+
|
152
|
+
var mergedData = useMemo(function () {
|
153
|
+
var nextData = selectedItems.concat(flattedData);
|
154
|
+
return uniqBy(nextData, 'id');
|
155
|
+
}, [selectedItems, flattedData]);
|
156
|
+
var virtualData = useMemo(function () {
|
157
|
+
return selectProps.data.reduce(function (acc, cur, index) {
|
158
|
+
if ('groupTitle' in cur) {
|
159
|
+
acc.push({
|
160
|
+
id: "group-" + index,
|
161
|
+
groupTitle: cur.groupTitle,
|
162
|
+
rootProps: cur.rootProps
|
163
|
+
});
|
164
|
+
return acc.concat(cur.children);
|
165
|
+
}
|
166
|
+
|
167
|
+
acc.push(cur);
|
168
|
+
return acc;
|
169
|
+
}, []);
|
170
|
+
}, [selectProps.data]);
|
171
|
+
var cls = cx(prefixCls, className, prefixCls + "--" + (menuVisible ? 'open' : 'closed'));
|
172
|
+
return /*#__PURE__*/React.createElement(CheckSelectProvider, {
|
83
173
|
value: context
|
84
|
-
}, /*#__PURE__*/React.createElement(
|
174
|
+
}, /*#__PURE__*/React.createElement(Picker, Object.assign({
|
85
175
|
ref: ref,
|
86
|
-
role: role,
|
87
176
|
className: cls
|
88
|
-
},
|
89
|
-
ref: setTargetElRef,
|
90
|
-
onClick: openMenu,
|
91
|
-
disabled: disabled,
|
92
|
-
clearable: clearable,
|
93
|
-
placeholder: placeholder,
|
94
|
-
data: selectData,
|
95
|
-
value: value,
|
96
|
-
onChange: tryChangeValue,
|
97
|
-
displayRender: displayRender,
|
98
|
-
suffix: /*#__PURE__*/React.createElement(DownOutlined, null)
|
99
|
-
}), /*#__PURE__*/React.createElement(Popper, Object.assign({}, popper, {
|
100
|
-
attachEl: targetElRef,
|
177
|
+
}, rest, {
|
101
178
|
visible: menuVisible,
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
179
|
+
onOpen: function onOpen() {
|
180
|
+
// setViewSelected(false)
|
181
|
+
menuVisibleAction.on();
|
182
|
+
},
|
183
|
+
disabled: disabled,
|
184
|
+
onClose: menuVisibleAction.off,
|
185
|
+
// value={value}
|
186
|
+
// onChange={tryChangeValue}
|
187
|
+
// data={mergedData}
|
188
|
+
searchable: searchable,
|
189
|
+
onSearch: onSearch,
|
190
|
+
loading: loading,
|
191
|
+
footer: renderExtraFooter ? renderExtraFooter() : null,
|
192
|
+
trigger: /*#__PURE__*/React.createElement(TagInputMock // ref={targetElementRef}
|
193
|
+
// onClick={openMenu}
|
194
|
+
// disabled={disabled}
|
195
|
+
, {
|
196
|
+
// ref={targetElementRef}
|
197
|
+
// onClick={openMenu}
|
198
|
+
// disabled={disabled}
|
199
|
+
clearable: clearable,
|
200
|
+
placeholder: placeholder,
|
201
|
+
// @ts-ignore
|
202
|
+
displayRender: displayRender,
|
203
|
+
suffix: menuVisible ? /*#__PURE__*/React.createElement(UpOutlined, null) : /*#__PURE__*/React.createElement(DownOutlined, null),
|
204
|
+
focused: menuVisible,
|
205
|
+
appearance: appearance,
|
206
|
+
value: value,
|
207
|
+
onChange: tryChangeValue,
|
208
|
+
data: mergedData,
|
209
|
+
// @ts-ignore
|
210
|
+
invalid: invalid,
|
211
|
+
onExpand: function onExpand() {
|
212
|
+
// setViewSelected(true)
|
213
|
+
menuVisibleAction.on();
|
214
|
+
}
|
215
|
+
})
|
216
|
+
}), isArrayNonEmpty(virtualData) ? /*#__PURE__*/React.createElement(VirtualList, {
|
217
|
+
itemKey: "id",
|
218
|
+
fullHeight: false,
|
219
|
+
height: height,
|
220
|
+
itemHeight: itemHeight,
|
221
|
+
virtual: virtual,
|
222
|
+
data: virtualData
|
223
|
+
}, function (node) {
|
224
|
+
/* 反向 map,搜索删选数据时会对数据进行处理 */
|
225
|
+
return 'groupTitle' in node ? /*#__PURE__*/React.createElement(CheckSelectOptionGroup, {
|
226
|
+
label: node.groupTitle
|
227
|
+
}) : /*#__PURE__*/React.createElement(CheckSelectOption, {
|
228
|
+
option: node,
|
229
|
+
depth: node.depth,
|
230
|
+
titleRender: proxyTitleRender
|
109
231
|
});
|
110
|
-
})))
|
232
|
+
}) : null));
|
111
233
|
}); // @ts-ignore
|
112
234
|
|
113
235
|
CheckSelect.HiName = 'CheckSelect';
|
@@ -116,78 +238,104 @@ if (__DEV__) {
|
|
116
238
|
CheckSelect.displayName = 'CheckSelect';
|
117
239
|
}
|
118
240
|
|
119
|
-
var
|
120
|
-
|
241
|
+
var optionPrefix = getPrefixCls('check-select-option');
|
242
|
+
/**
|
243
|
+
* TODO: What is CheckSelectOption
|
244
|
+
*/
|
245
|
+
|
246
|
+
var CheckSelectOption = /*#__PURE__*/forwardRef(function (_a, ref) {
|
121
247
|
var _a$prefixCls2 = _a.prefixCls,
|
122
|
-
prefixCls = _a$prefixCls2 === void 0 ?
|
248
|
+
prefixCls = _a$prefixCls2 === void 0 ? optionPrefix : _a$prefixCls2,
|
123
249
|
className = _a.className,
|
124
|
-
|
250
|
+
_a$option = _a.option,
|
251
|
+
option = _a$option === void 0 ? {} : _a$option,
|
252
|
+
onClick = _a.onClick,
|
253
|
+
titleRender = _a.titleRender,
|
254
|
+
depth = _a.depth,
|
255
|
+
rest = __rest(_a, ["prefixCls", "className", "children", "option", "onClick", "titleRender", "depth"]);
|
125
256
|
|
126
|
-
var
|
127
|
-
|
128
|
-
|
129
|
-
getSearchInputProps = _useSelectContext.getSearchInputProps;
|
257
|
+
var _useCheckSelectContex = useCheckSelectContext(),
|
258
|
+
isSelectedId = _useCheckSelectContex.isSelectedId,
|
259
|
+
onSelect = _useCheckSelectContex.onSelect;
|
130
260
|
|
261
|
+
var id = option.id,
|
262
|
+
_option$disabled = option.disabled,
|
263
|
+
disabled = _option$disabled === void 0 ? false : _option$disabled;
|
264
|
+
var selected = isSelectedId(id);
|
265
|
+
var eventNodeRef = useLatestRef(Object.assign({}, option, {
|
266
|
+
disabled: disabled,
|
267
|
+
checked: selected
|
268
|
+
}));
|
269
|
+
var cls = cx(prefixCls, className, selected && prefixCls + "--selected", disabled && prefixCls + "--disabled");
|
270
|
+
var handleOptionCheck = useCallback(function (evt) {
|
271
|
+
onSelect(option, !selected);
|
272
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(evt);
|
273
|
+
}, [onSelect, option, selected, onClick]);
|
274
|
+
var renderTitle = useCallback(function (node, titleRender) {
|
275
|
+
// 如果 titleRender 返回 `true`,则使用默认 title
|
276
|
+
var title = titleRender ? titleRender(node) : true;
|
277
|
+
return /*#__PURE__*/React.createElement("div", {
|
278
|
+
className: prefixCls + "__title"
|
279
|
+
}, title === true ? /*#__PURE__*/React.createElement(Checkbox, {
|
280
|
+
checked: node.checked,
|
281
|
+
disabled: node.disabled
|
282
|
+
}, node.title) : title);
|
283
|
+
}, [prefixCls]);
|
131
284
|
return /*#__PURE__*/React.createElement("div", Object.assign({
|
132
285
|
ref: ref,
|
133
|
-
className:
|
134
|
-
}, rest
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
});
|
286
|
+
className: cls
|
287
|
+
}, rest, {
|
288
|
+
onClick: handleOptionCheck
|
289
|
+
}), renderIndent(prefixCls, depth), renderTitle(eventNodeRef.current, titleRender));
|
290
|
+
}); // @ts-ignore
|
291
|
+
|
292
|
+
CheckSelectOption.HiName = 'CheckSelectOption';
|
141
293
|
|
142
294
|
if (__DEV__) {
|
143
|
-
|
295
|
+
CheckSelectOption.displayName = 'CheckSelectOption';
|
144
296
|
}
|
145
297
|
|
146
|
-
var
|
147
|
-
|
298
|
+
var optionGroupPrefix = getPrefixCls('select-option-group');
|
299
|
+
/**
|
300
|
+
* TODO: What is CheckSelectOptionGroup
|
301
|
+
*/
|
302
|
+
|
303
|
+
var CheckSelectOptionGroup = /*#__PURE__*/forwardRef(function (_a, ref) {
|
148
304
|
var _a$prefixCls3 = _a.prefixCls,
|
149
|
-
prefixCls = _a$prefixCls3 === void 0 ?
|
305
|
+
prefixCls = _a$prefixCls3 === void 0 ? optionGroupPrefix : _a$prefixCls3,
|
150
306
|
className = _a.className,
|
151
|
-
|
152
|
-
|
153
|
-
rest = __rest(_a, ["prefixCls", "className", "children", "option"]);
|
154
|
-
|
155
|
-
var _useSelectContext2 = useSelectContext(),
|
156
|
-
isSelectedId = _useSelectContext2.isSelectedId,
|
157
|
-
onSelect = _useSelectContext2.onSelect,
|
158
|
-
titleRender = _useSelectContext2.titleRender;
|
159
|
-
|
160
|
-
var checked = !!isSelectedId(option.id);
|
161
|
-
var cls = cx(prefixCls, className, checked && prefixCls + "--selected");
|
162
|
-
var handleOptionCheck = useCallback(function (evt) {
|
163
|
-
onSelect(option, !checked);
|
164
|
-
}, [onSelect, option, checked]); // 如果 titleRender 返回 `true`,则使用默认 title
|
165
|
-
|
166
|
-
var title = titleRender ? titleRender(Object.assign(Object.assign({}, option), {
|
167
|
-
checked: checked
|
168
|
-
})) : true;
|
169
|
-
|
170
|
-
if (title !== true) {
|
171
|
-
return /*#__PURE__*/React.createElement("div", Object.assign({
|
172
|
-
ref: ref,
|
173
|
-
className: cls
|
174
|
-
}, rest), title);
|
175
|
-
}
|
307
|
+
label = _a.label,
|
308
|
+
rest = __rest(_a, ["prefixCls", "className", "children", "label", "onClick"]);
|
176
309
|
|
310
|
+
var cls = cx(prefixCls, className);
|
177
311
|
return /*#__PURE__*/React.createElement("div", Object.assign({
|
178
312
|
ref: ref,
|
179
313
|
className: cls
|
180
|
-
}, rest), /*#__PURE__*/React.createElement(
|
181
|
-
checked: checked,
|
182
|
-
onChange: handleOptionCheck
|
183
|
-
}, option.title));
|
314
|
+
}, rest), /*#__PURE__*/React.createElement("span", null, label));
|
184
315
|
}); // @ts-ignore
|
185
316
|
|
186
|
-
|
317
|
+
CheckSelectOptionGroup.HiName = 'CheckSelectOptionGroup';
|
187
318
|
|
188
319
|
if (__DEV__) {
|
189
|
-
|
320
|
+
CheckSelectOptionGroup.displayName = 'CheckSelectOptionGroup';
|
190
321
|
}
|
322
|
+
/**
|
323
|
+
* 渲染空白占位
|
324
|
+
*/
|
325
|
+
|
326
|
+
|
327
|
+
var renderIndent = function renderIndent(prefixCls, depth) {
|
328
|
+
return times(depth, function (index) {
|
329
|
+
return /*#__PURE__*/React.createElement("span", {
|
330
|
+
key: index,
|
331
|
+
style: {
|
332
|
+
alignSelf: 'stretch'
|
333
|
+
}
|
334
|
+
}, /*#__PURE__*/React.createElement("span", {
|
335
|
+
className: cx(prefixCls + "__indent")
|
336
|
+
}));
|
337
|
+
});
|
338
|
+
};
|
191
339
|
|
192
|
-
export { CheckSelect, CheckSelectOption,
|
340
|
+
export { CheckSelect, CheckSelectOption, CheckSelectOptionGroup };
|
193
341
|
//# sourceMappingURL=CheckSelect.js.map
|