@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.
@@ -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
- searchPlaceholder = _a.searchPlaceholder,
57
- titleRender = _a.titleRender,
58
- rest = tslib.__rest(_a, ["data", "children", "disabled", "value", "defaultValue", "onChange", "onSelect", "emptyContent", "searchPlaceholder", "titleRender"]);
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 list = useChildren.toArray(children);
63
- var arr = [];
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 && item.type.HiName === 'CheckSelectOption') {
70
- arr.push(item); // @ts-ignore
71
- } else if (item.type && item.type.HiName === 'CheckSelectOptionGroup') {
72
- // @ts-ignore
73
- if (item.props && item.props.children) {
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
- var _list = useChildren.toArray(item.props.children);
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(list);
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
- var _useSearch = useSearch.useSearch(data),
117
- inSearch = _useSearch[0],
118
- matchedItems = _useSearch[1],
119
- inputProps = _useSearch[2],
120
- isEmpty = _useSearch[3],
121
- resetSearch = _useSearch[4];
122
-
123
- var getSearchInputProps = React.useCallback(function () {
124
- return {
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
- getSearchInputProps: getSearchInputProps,
138
- tryChangeValue: tryChangeValue,
139
- isEmpty: isEmpty,
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","searchPlaceholder","titleRender","rest","useMemo","list","toArray","arr","dfs","forEach","item","React","isValidElement","type","HiName","push","props","map","id","title","useUncontrolledState","tryChangeValue","onSelectLatest","useLatestCallback","proxyTryChangeValue","useCallback","shouldChecked","useCheckDefault","checkedIds","onCheck","allowCheck","onOptionCheck","isSelectedId","useSearch","inSearch","matchedItems","inputProps","isEmpty","resetSearch","getSearchInputProps","placeholder","rootProps","option"],"mappings":"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"}
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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"}
@@ -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, useCallback } from 'react';
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 Popper from '@hi-ui/popper';
18
- import { DownOutlined, SearchOutlined } from '@hi-ui/icons';
19
- import { SelectProvider, useSelectContext } from './context.js';
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 { TagInput } from '@hi-ui/tag-input';
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 ? false : _a$clearable,
42
- _a$searchable = _a.searchable,
43
- searchable = _a$searchable === void 0 ? false : _a$searchable,
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
- popper = _a.popper,
48
- rest = __rest(_a, ["prefixCls", "role", "className", "children", "disabled", "clearable", "searchable", "placeholder", "displayRender", "onSelect", "popper"]);
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]); // @ts-ignore
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
- onSelect: onSelectLatest,
73
- children: children
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
- selectData = context.data;
81
- var cls = cx(prefixCls, className);
82
- return /*#__PURE__*/React.createElement(SelectProvider, {
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("div", Object.assign({
174
+ }, /*#__PURE__*/React.createElement(Picker, Object.assign({
85
175
  ref: ref,
86
- role: role,
87
176
  className: cls
88
- }, rootProps), /*#__PURE__*/React.createElement(TagInput, {
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
- onClose: menuVisibleAction.off
103
- }), /*#__PURE__*/React.createElement("div", {
104
- className: prefixCls + "-panel"
105
- }, searchable ? /*#__PURE__*/React.createElement(SelectSearch, null) : null, selectData.map(function (item) {
106
- return /*#__PURE__*/React.createElement(CheckSelectOption, {
107
- key: item.id,
108
- option: item
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 searchPrefix = getPrefixCls('check-select-search');
120
- var SelectSearch = /*#__PURE__*/forwardRef(function (_a, ref) {
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 ? searchPrefix : _a$prefixCls2,
248
+ prefixCls = _a$prefixCls2 === void 0 ? optionPrefix : _a$prefixCls2,
123
249
  className = _a.className,
124
- rest = __rest(_a, ["prefixCls", "className"]);
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 _useSelectContext = useSelectContext(),
127
- isEmpty = _useSelectContext.isEmpty,
128
- emptyContent = _useSelectContext.emptyContent,
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: cx(prefixCls, className)
134
- }, rest), /*#__PURE__*/React.createElement(Input, Object.assign({
135
- appearance: "underline",
136
- prefix: /*#__PURE__*/React.createElement(SearchOutlined, null)
137
- }, getSearchInputProps())), isEmpty ? /*#__PURE__*/React.createElement("span", {
138
- className: prefixCls + "__empty"
139
- }, emptyContent) : null);
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
- SelectSearch.displayName = 'SelectSearch';
295
+ CheckSelectOption.displayName = 'CheckSelectOption';
144
296
  }
145
297
 
146
- var optionPrefix = getPrefixCls('check-select-option');
147
- var CheckSelectOption = /*#__PURE__*/forwardRef(function (_a, ref) {
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 ? optionPrefix : _a$prefixCls3,
305
+ prefixCls = _a$prefixCls3 === void 0 ? optionGroupPrefix : _a$prefixCls3,
150
306
  className = _a.className,
151
- _a$option = _a.option,
152
- option = _a$option === void 0 ? {} : _a$option,
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(Checkbox, {
181
- checked: checked,
182
- onChange: handleOptionCheck
183
- }, option.title));
314
+ }, rest), /*#__PURE__*/React.createElement("span", null, label));
184
315
  }); // @ts-ignore
185
316
 
186
- CheckSelectOption.HiName = 'CheckSelectOption';
317
+ CheckSelectOptionGroup.HiName = 'CheckSelectOptionGroup';
187
318
 
188
319
  if (__DEV__) {
189
- CheckSelectOption.displayName = 'CheckSelectOption';
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, SelectSearch };
340
+ export { CheckSelect, CheckSelectOption, CheckSelectOptionGroup };
193
341
  //# sourceMappingURL=CheckSelect.js.map