@hi-ui/check-select 4.0.0-alpha.11 → 4.0.0-alpha.16

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,16 +54,15 @@ 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
- filter = _a.filter,
58
- titleRender = _a.titleRender,
59
- rest = tslib.__rest(_a, ["data", "children", "disabled", "value", "defaultValue", "onChange", "onSelect", "emptyContent", "searchPlaceholder", "filter", "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"]);
60
60
 
61
61
  var data = React.useMemo(function () {
62
62
  if (children) {
63
63
  var dfs = function dfs(child) {
64
- var list = useChildren.toArray(child);
65
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
 
@@ -84,11 +84,13 @@ var useCheckSelect = function useCheckSelect(_a) {
84
84
  } else if (item.type.HiName === 'CheckSelectOptionGroup') {
85
85
  var _props = item.props;
86
86
 
87
- var label = _props.label,
87
+ var groupId = _props.groupId,
88
+ label = _props.label,
88
89
  _children2 = _props.children,
89
- _rest2 = tslib.__rest(_props, ["label", "children"]);
90
+ _rest2 = tslib.__rest(_props, ["groupId", "label", "children"]);
90
91
 
91
92
  var optGroup = {
93
+ groupId: groupId,
92
94
  groupTitle: label,
93
95
  children: [],
94
96
  rootProps: _rest2
@@ -110,6 +112,35 @@ var useCheckSelect = function useCheckSelect(_a) {
110
112
 
111
113
  return dataProp;
112
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]);
113
144
 
114
145
  var _useUncontrolledState = useUncontrolledState.useUncontrolledState(defaultValue, valueProp, onChangeProp),
115
146
  value = _useUncontrolledState[0],
@@ -128,34 +159,30 @@ var useCheckSelect = function useCheckSelect(_a) {
128
159
  allowCheck: allowCheck
129
160
  }),
130
161
  onOptionCheck = _useCheckDefault[0],
131
- isSelectedId = _useCheckDefault[1];
132
-
133
- var _useSearch = useSearch.useSearch(data, filter),
134
- inSearch = _useSearch[0],
135
- matchedItems = _useSearch[1],
136
- inputProps = _useSearch[2],
137
- isEmpty = _useSearch[3],
138
- resetSearch = _useSearch[4];
139
-
140
- var getSearchInputProps = React.useCallback(function () {
141
- return {
142
- placeholder: searchPlaceholder,
143
- value: inputProps.value,
144
- onChange: inputProps.onChange
145
- };
146
- }, [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
+
147
173
  return {
148
174
  rootProps: rest,
149
- data: inSearch ? matchedItems : data,
175
+ // data: inSearch ? matchedItems : data,
176
+ data: data,
177
+ flattedData: flattedData,
150
178
  value: value,
179
+ tryChangeValue: tryChangeValue,
151
180
  onSelect: onOptionCheck,
152
181
  isSelectedId: isSelectedId,
153
- emptyContent: emptyContent,
154
- getSearchInputProps: getSearchInputProps,
155
- tryChangeValue: tryChangeValue,
156
- isEmpty: isEmpty,
157
- resetSearch: resetSearch,
158
- titleRender: titleRender
182
+ emptyContent: emptyContent // getSearchInputProps,
183
+ // isEmpty,
184
+ // resetSearch,
185
+
159
186
  };
160
187
  };
161
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","filter","titleRender","rest","useMemo","dfs","child","list","toArray","arr","forEach","item","React","isValidElement","type","HiName","props","option","id","title","rootProps","push","label","optGroup","groupTitle","useUncontrolledState","tryChangeValue","onSelectLatest","useLatestCallback","proxyTryChangeValue","useCallback","shouldChecked","useCheckDefault","checkedIds","onCheck","allowCheck","onOptionCheck","isSelectedId","useSearch","inSearch","matchedItems","inputProps","isEmpty","resetSearch","getSearchInputProps","placeholder"],"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,19 +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, useMemo } 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
14
  import { useCheckSelect } from './use-check-select.js';
16
- import Popper from '@hi-ui/popper';
17
- import { DownOutlined, SearchOutlined } from '@hi-ui/icons';
15
+ import { UpOutlined, DownOutlined } from '@hi-ui/icons';
18
16
  import { CheckSelectProvider, useCheckSelectContext } from './context.js';
19
- import { useLatestCallback } from '@hi-ui/use-latest';
17
+ import { useLatestCallback, useLatestRef } from '@hi-ui/use-latest';
20
18
  import Checkbox from '@hi-ui/checkbox';
21
- import { TagInput, TagInputMock } from '@hi-ui/tag-input';
22
- import { isFunction } from './utils/type-assertion/lib/esm/index.js';
19
+ import { TagInputMock } from '@hi-ui/tag-input';
20
+ import { isFunction, isArrayNonEmpty } from '@hi-ui/type-assertion';
23
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';
24
28
  var _role = 'check-select';
25
29
 
26
30
  var _prefix = getPrefixCls(_role);
@@ -32,19 +36,14 @@ var _prefix = getPrefixCls(_role);
32
36
  var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
33
37
  var _a$prefixCls = _a.prefixCls,
34
38
  prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
35
- _a$role = _a.role,
36
- role = _a$role === void 0 ? _role : _a$role,
37
39
  className = _a.className,
38
40
  children = _a.children,
39
41
  _a$disabled = _a.disabled,
40
42
  disabled = _a$disabled === void 0 ? false : _a$disabled,
41
43
  _a$clearable = _a.clearable,
42
- clearable = _a$clearable === void 0 ? false : _a$clearable,
43
- _a$searchable = _a.searchable,
44
- searchable = _a$searchable === void 0 ? false : _a$searchable,
45
- _a$wrap = _a.wrap,
46
- wrap = _a$wrap === void 0 ? true : _a$wrap,
47
- 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,
48
47
  displayRenderProp = _a.displayRender,
49
48
  onSelectProp = _a.onSelect,
50
49
  height = _a.height,
@@ -52,31 +51,19 @@ var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
52
51
  itemHeight = _a$itemHeight === void 0 ? 40 : _a$itemHeight,
53
52
  _a$virtual = _a.virtual,
54
53
  virtual = _a$virtual === void 0 ? true : _a$virtual,
55
- popper = _a.popper,
56
- onOpen = _a.onOpen,
57
- onClose = _a.onClose,
58
- rest = __rest(_a, ["prefixCls", "role", "className", "children", "disabled", "clearable", "searchable", "invalid", "wrap", "placeholder", "displayRender", "onSelect", "height", "itemHeight", "virtual", "popper", "onOpen", "onClose"]);
59
-
60
- var _useState = useState(null),
61
- targetElRef = _useState[0],
62
- setTargetElRef = _useState[1];
63
-
64
- var _useState2 = useState(false),
65
- menuVisible = _useState2[0],
66
- setMenuVisible = _useState2[1];
67
-
68
- var onOpenLatest = useLatestCallback(onOpen);
69
- var onCloseLatest = useLatestCallback(onClose);
70
- var closeMenu = useCallback(function () {
71
- if (disabled) return;
72
- setMenuVisible(false);
73
- onOpenLatest();
74
- }, [disabled, onOpenLatest]);
75
- var openMenu = useCallback(function () {
76
- if (disabled) return;
77
- setMenuVisible(true);
78
- onCloseLatest();
79
- }, [disabled, onCloseLatest]);
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"]);
62
+
63
+ var _useToggle = useToggle(),
64
+ menuVisible = _useToggle[0],
65
+ menuVisibleAction = _useToggle[1];
66
+
80
67
  var displayRender = useCallback(function (item) {
81
68
  if (isFunction(displayRenderProp)) {
82
69
  return displayRenderProp(item);
@@ -84,20 +71,90 @@ var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
84
71
 
85
72
  return item.title;
86
73
  }, [displayRenderProp]);
87
- var onSelectLatest = useLatestCallback(onSelectProp);
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
+ });
88
84
 
89
85
  var _b = useCheckSelect(Object.assign(Object.assign({}, rest), {
90
86
  children: children,
91
- onSelect: onSelectLatest
87
+ onSelect: onSelect
92
88
  })),
93
- rootProps = _b.rootProps,
94
89
  context = __rest(_b, ["rootProps"]);
95
90
 
96
91
  var value = context.value,
97
92
  tryChangeValue = context.tryChangeValue,
98
- selectData = context.data;
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]);
99
156
  var virtualData = useMemo(function () {
100
- return selectData.reduce(function (acc, cur, index) {
157
+ return selectProps.data.reduce(function (acc, cur, index) {
101
158
  if ('groupTitle' in cur) {
102
159
  acc.push({
103
160
  id: "group-" + index,
@@ -110,35 +167,53 @@ var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
110
167
  acc.push(cur);
111
168
  return acc;
112
169
  }, []);
113
- }, [selectData]);
114
- var cls = cx(prefixCls, className, prefixCls + "--" + (menuVisible ? 'open' : 'closed')); // TODO: tagInput 内部支持支持多种模式切换
115
-
116
- var TagInput$1 = wrap ? TagInput : TagInputMock;
170
+ }, [selectProps.data]);
171
+ var cls = cx(prefixCls, className, prefixCls + "--" + (menuVisible ? 'open' : 'closed'));
117
172
  return /*#__PURE__*/React.createElement(CheckSelectProvider, {
118
173
  value: context
119
- }, /*#__PURE__*/React.createElement("div", Object.assign({
174
+ }, /*#__PURE__*/React.createElement(Picker, Object.assign({
120
175
  ref: ref,
121
- role: role,
122
176
  className: cls
123
- }, rootProps), /*#__PURE__*/React.createElement(TagInput$1, {
124
- ref: setTargetElRef,
125
- onClick: openMenu,
126
- disabled: disabled,
127
- clearable: clearable,
128
- placeholder: placeholder,
129
- data: selectData,
130
- value: value,
131
- wrap: wrap,
132
- onChange: tryChangeValue,
133
- displayRender: displayRender,
134
- suffix: /*#__PURE__*/React.createElement(DownOutlined, null)
135
- }), /*#__PURE__*/React.createElement(Popper, Object.assign({}, popper, {
136
- attachEl: targetElRef,
177
+ }, rest, {
137
178
  visible: menuVisible,
138
- onClose: closeMenu
139
- }), /*#__PURE__*/React.createElement("div", {
140
- className: prefixCls + "-panel"
141
- }, searchable ? /*#__PURE__*/React.createElement(CheckSelectSearch, null) : null, /*#__PURE__*/React.createElement(VirtualList, {
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, {
142
217
  itemKey: "id",
143
218
  fullHeight: false,
144
219
  height: height,
@@ -147,12 +222,14 @@ var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
147
222
  data: virtualData
148
223
  }, function (node) {
149
224
  /* 反向 map,搜索删选数据时会对数据进行处理 */
150
- return 'groupTitle' in node ? /*#__PURE__*/React.createElement(CheckSelectOptionGroup, Object.assign({
225
+ return 'groupTitle' in node ? /*#__PURE__*/React.createElement(CheckSelectOptionGroup, {
151
226
  label: node.groupTitle
152
- }, node.rootProps)) : /*#__PURE__*/React.createElement(CheckSelectOption, Object.assign({
153
- option: node
154
- }, node.rootProps));
155
- })))));
227
+ }) : /*#__PURE__*/React.createElement(CheckSelectOption, {
228
+ option: node,
229
+ depth: node.depth,
230
+ titleRender: proxyTitleRender
231
+ });
232
+ }) : null));
156
233
  }); // @ts-ignore
157
234
 
158
235
  CheckSelect.HiName = 'CheckSelect';
@@ -161,77 +238,55 @@ if (__DEV__) {
161
238
  CheckSelect.displayName = 'CheckSelect';
162
239
  }
163
240
 
164
- var searchPrefix = getPrefixCls('check-select-search');
165
- /**
166
- * TODO: What is CheckSelectSearch
167
- */
168
-
169
- var CheckSelectSearch = /*#__PURE__*/forwardRef(function (_a, ref) {
170
- var _a$prefixCls2 = _a.prefixCls,
171
- prefixCls = _a$prefixCls2 === void 0 ? searchPrefix : _a$prefixCls2,
172
- className = _a.className,
173
- rest = __rest(_a, ["prefixCls", "className"]);
174
-
175
- var _useCheckSelectContex = useCheckSelectContext(),
176
- isEmpty = _useCheckSelectContex.isEmpty,
177
- emptyContent = _useCheckSelectContex.emptyContent,
178
- getSearchInputProps = _useCheckSelectContex.getSearchInputProps;
179
-
180
- return /*#__PURE__*/React.createElement("div", Object.assign({
181
- ref: ref,
182
- className: cx(prefixCls, className)
183
- }, rest), /*#__PURE__*/React.createElement(Input, Object.assign({}, getSearchInputProps(), {
184
- appearance: "underline",
185
- prefix: /*#__PURE__*/React.createElement(SearchOutlined, null)
186
- })), isEmpty ? /*#__PURE__*/React.createElement("span", {
187
- className: prefixCls + "__empty"
188
- }, emptyContent) : null);
189
- });
190
-
191
- if (__DEV__) {
192
- CheckSelectSearch.displayName = 'CheckSelectSearch';
193
- }
194
-
195
241
  var optionPrefix = getPrefixCls('check-select-option');
196
242
  /**
197
243
  * TODO: What is CheckSelectOption
198
244
  */
199
245
 
200
246
  var CheckSelectOption = /*#__PURE__*/forwardRef(function (_a, ref) {
201
- var _a$prefixCls3 = _a.prefixCls,
202
- prefixCls = _a$prefixCls3 === void 0 ? optionPrefix : _a$prefixCls3,
247
+ var _a$prefixCls2 = _a.prefixCls,
248
+ prefixCls = _a$prefixCls2 === void 0 ? optionPrefix : _a$prefixCls2,
203
249
  className = _a.className,
204
250
  _a$option = _a.option,
205
251
  option = _a$option === void 0 ? {} : _a$option,
206
252
  onClick = _a.onClick,
207
- rest = __rest(_a, ["prefixCls", "className", "children", "option", "onClick"]);
253
+ titleRender = _a.titleRender,
254
+ depth = _a.depth,
255
+ rest = __rest(_a, ["prefixCls", "className", "children", "option", "onClick", "titleRender", "depth"]);
208
256
 
209
- var _useCheckSelectContex2 = useCheckSelectContext(),
210
- isSelectedId = _useCheckSelectContex2.isSelectedId,
211
- onSelect = _useCheckSelectContex2.onSelect,
212
- titleRender = _useCheckSelectContex2.titleRender;
257
+ var _useCheckSelectContex = useCheckSelectContext(),
258
+ isSelectedId = _useCheckSelectContex.isSelectedId,
259
+ onSelect = _useCheckSelectContex.onSelect;
213
260
 
214
- var checked = isSelectedId(option.id);
215
- var _option$disabled = option.disabled,
261
+ var id = option.id,
262
+ _option$disabled = option.disabled,
216
263
  disabled = _option$disabled === void 0 ? false : _option$disabled;
217
- var cls = cx(prefixCls, className, checked && prefixCls + "--selected", disabled && prefixCls + "--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");
218
270
  var handleOptionCheck = useCallback(function (evt) {
219
- onSelect(option, !checked);
271
+ onSelect(option, !selected);
220
272
  onClick === null || onClick === void 0 ? void 0 : onClick(evt);
221
- }, [onSelect, option, checked, onClick]); // 如果 titleRender 返回 `true`,则使用默认 title
222
-
223
- var title = titleRender ? titleRender(Object.assign(Object.assign({}, option), {
224
- checked: checked
225
- })) : true;
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]);
226
284
  return /*#__PURE__*/React.createElement("div", Object.assign({
227
285
  ref: ref,
228
286
  className: cls
229
287
  }, rest, {
230
288
  onClick: handleOptionCheck
231
- }), title === true ? /*#__PURE__*/React.createElement(Checkbox, {
232
- checked: checked,
233
- disabled: option.disabled
234
- }, option.title) : title);
289
+ }), renderIndent(prefixCls, depth), renderTitle(eventNodeRef.current, titleRender));
235
290
  }); // @ts-ignore
236
291
 
237
292
  CheckSelectOption.HiName = 'CheckSelectOption';
@@ -239,14 +294,15 @@ CheckSelectOption.HiName = 'CheckSelectOption';
239
294
  if (__DEV__) {
240
295
  CheckSelectOption.displayName = 'CheckSelectOption';
241
296
  }
297
+
298
+ var optionGroupPrefix = getPrefixCls('select-option-group');
242
299
  /**
243
300
  * TODO: What is CheckSelectOptionGroup
244
301
  */
245
302
 
246
-
247
303
  var CheckSelectOptionGroup = /*#__PURE__*/forwardRef(function (_a, ref) {
248
- var _a$prefixCls4 = _a.prefixCls,
249
- prefixCls = _a$prefixCls4 === void 0 ? optionPrefix : _a$prefixCls4,
304
+ var _a$prefixCls3 = _a.prefixCls,
305
+ prefixCls = _a$prefixCls3 === void 0 ? optionGroupPrefix : _a$prefixCls3,
250
306
  className = _a.className,
251
307
  label = _a.label,
252
308
  rest = __rest(_a, ["prefixCls", "className", "children", "label", "onClick"]);
@@ -263,6 +319,23 @@ CheckSelectOptionGroup.HiName = 'CheckSelectOptionGroup';
263
319
  if (__DEV__) {
264
320
  CheckSelectOptionGroup.displayName = 'CheckSelectOptionGroup';
265
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
+ };
266
339
 
267
- export { CheckSelect, CheckSelectOption, CheckSelectOptionGroup, CheckSelectSearch };
340
+ export { CheckSelect, CheckSelectOption, CheckSelectOptionGroup };
268
341
  //# sourceMappingURL=CheckSelect.js.map