@hi-ui/cascader 4.0.0-alpha.26 → 4.0.0-alpha.30

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.
Files changed (54) hide show
  1. package/README.md +42 -46
  2. package/lib/cjs/Cascader.js +103 -146
  3. package/lib/cjs/Cascader.js.map +1 -1
  4. package/lib/cjs/context.js.map +1 -1
  5. package/lib/cjs/hooks/use-async-switch.js +10 -34
  6. package/lib/cjs/hooks/use-async-switch.js.map +1 -1
  7. package/lib/cjs/hooks/use-select.js +3 -1
  8. package/lib/cjs/hooks/use-select.js.map +1 -1
  9. package/lib/cjs/index.js +0 -4
  10. package/lib/cjs/index.js.map +1 -1
  11. package/lib/cjs/styles/index.scss.js +1 -1
  12. package/lib/cjs/use-cascader.js +31 -72
  13. package/lib/cjs/use-cascader.js.map +1 -1
  14. package/lib/cjs/utils/index.js +35 -27
  15. package/lib/cjs/utils/index.js.map +1 -1
  16. package/lib/esm/Cascader.js +109 -147
  17. package/lib/esm/Cascader.js.map +1 -1
  18. package/lib/esm/context.js.map +1 -1
  19. package/lib/esm/hooks/use-async-switch.js +11 -36
  20. package/lib/esm/hooks/use-async-switch.js.map +1 -1
  21. package/lib/esm/hooks/use-select.js +2 -1
  22. package/lib/esm/hooks/use-select.js.map +1 -1
  23. package/lib/esm/index.js +1 -2
  24. package/lib/esm/index.js.map +1 -1
  25. package/lib/esm/styles/index.scss.js +1 -1
  26. package/lib/esm/use-cascader.js +28 -68
  27. package/lib/esm/use-cascader.js.map +1 -1
  28. package/lib/esm/utils/index.js +33 -25
  29. package/lib/esm/utils/index.js.map +1 -1
  30. package/lib/types/Cascader.d.ts +13 -61
  31. package/lib/types/context.d.ts +27 -588
  32. package/lib/types/hooks/index.d.ts +0 -2
  33. package/lib/types/hooks/use-async-switch.d.ts +1 -1
  34. package/lib/types/hooks/use-select.d.ts +1 -1
  35. package/lib/types/index.d.ts +0 -1
  36. package/lib/types/types.d.ts +11 -7
  37. package/lib/types/use-cascader.d.ts +53 -295
  38. package/lib/types/utils/index.d.ts +3 -6
  39. package/package.json +16 -15
  40. package/lib/cjs/CascaderPanel.js +0 -81
  41. package/lib/cjs/CascaderPanel.js.map +0 -1
  42. package/lib/cjs/hooks/use-cache.js +0 -37
  43. package/lib/cjs/hooks/use-cache.js.map +0 -1
  44. package/lib/cjs/hooks/use-search.js +0 -116
  45. package/lib/cjs/hooks/use-search.js.map +0 -1
  46. package/lib/esm/CascaderPanel.js +0 -58
  47. package/lib/esm/CascaderPanel.js.map +0 -1
  48. package/lib/esm/hooks/use-cache.js +0 -30
  49. package/lib/esm/hooks/use-cache.js.map +0 -1
  50. package/lib/esm/hooks/use-search.js +0 -107
  51. package/lib/esm/hooks/use-search.js.map +0 -1
  52. package/lib/types/CascaderPanel.d.ts +0 -142
  53. package/lib/types/hooks/use-cache.d.ts +0 -8
  54. package/lib/types/hooks/use-search.d.ts +0 -9
package/README.md CHANGED
@@ -16,31 +16,30 @@
16
16
 
17
17
  ## Props
18
18
 
19
- | 参数 | 说明 | 类型 | 可选值 | 默认值 |
20
- | ----------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ------------------ | ------------------------------------------------------- |
21
- | disabled | 是否禁止使用 | boolean | true \| false | false |
22
- | placeholder | 输入框占位 | string | - | '请选择' |
23
- | searchPlaceholder | 搜索输入框占位 | string | - | '搜索' |
24
- | emptyContent | 设置选项为空时展示的内容 | ReactNode | - | '无匹配数据' |
25
- | loadingContent | 设置加载中时展示的内容 | ReactNode | - | '数据加载中...' |
26
- | overlayClassName | 下拉根元素的类名称 | string | - | - |
27
- | searchable | 是否可搜索 | boolean | true \| false | false |
28
- | clearable | 是否可清空 | boolean | true \| false | true |
29
- | popper | 自定义控制弹出层 popper 行为 | Omit<PopperProps, 'visible' \| 'attachEl'> | - | - |
30
- | fieldNames | 设置 data 中 label, value, children 对应的 key | object | - | { label: 'label', value: 'value', children: 'children'} |
31
- | data | 设置选择项数据源 | CascaderDataItem[] | - | - |
32
- | value | 设置当前选中值 | ReactText[] | - | [] |
33
- | defaultValue | 设置当前选中值默认值 | ReactText[] | - | [] |
34
- | displayRender | 自定义选择后展示的内容 | (value: string[]) => string | - | - |
35
- | expandTrigger | 次级菜单的展开方式,可选 'click' 和 'hover' | string | 'click' \| 'hover' | 'click' |
36
- | filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean | - | - |
37
- | changeOnSelect | 是否启用选择即改变功能 | boolean | true \| false | false |
38
- | flatted | 将选项拍平展示,不支持 `onLoadChildren` 异步加载交互 | true \| false | false |
39
- | upMatch | 开启全量搜索,默认只对开启对可选的选项进行搜索,不向上查找路径 | true \| false | false |
40
- | titleRender | 自定义渲染节点的 title 内容径 | (item: CascaderItemEventData, flatted: boolean) => React.ReactNode | - |
41
- | filterOption | 自定义搜索过滤器,仅在 searchable 为 true 时有效。第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项 | (keyword: string, item: CascaderItemEventData) => boolean | - |
42
- | dataSource | 异步搜索加载数据 | (key: string) => DataSource \| DataSource \| Promise | - |
43
- | appearance | 设置展现形式 | 'outline' \| 'unset' \| 'filled' | 'outline' |
19
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
20
+ | ----------------- | -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ------------------ | ------------------------------------------------------- |
21
+ | disabled | 是否禁止使用 | boolean | true \| false | false |
22
+ | placeholder | 输入框占位 | string | - | '请选择' |
23
+ | searchPlaceholder | 搜索输入框占位 | string | - | '搜索' |
24
+ | emptyContent | 设置选项为空时展示的内容 | ReactNode | - | '无匹配数据' |
25
+ | loadingContent | 设置加载中时展示的内容 | ReactNode | - | '数据加载中...' |
26
+ | overlayClassName | 下拉根元素的类名称 | string | - | - |
27
+ | searchable | 是否可搜索 | boolean | true \| false | false |
28
+ | clearable | 是否可清空 | boolean | true \| false | true |
29
+ | overlay | 自定义控制弹出层 popper 行为 | PopperOverlayProps | - | - |
30
+ | fieldNames | 设置 data 中 label, value, children 对应的 key | object | - | { label: 'label', value: 'value', children: 'children'} |
31
+ | data | 设置选择项数据源 | CascaderDataItem[] | - | - |
32
+ | value | 设置当前选中值 | ReactText[] | - | [] |
33
+ | defaultValue | 设置当前选中值默认值 | ReactText[] | - | [] |
34
+ | displayRender | 自定义选择后展示的内容 | (value: string[]) => string | - | - |
35
+ | expandTrigger | 次级菜单的展开方式,可选 'click' 和 'hover' | string | 'click' \| 'hover' | 'click' |
36
+ | filterOption | 第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项。仅在 searchable 为 true 时有效 | (keyword: string, item: DataItem) => boolean | - | - |
37
+ | changeOnSelect | 是否启用选择即改变功能 | boolean | true \| false | false |
38
+ | flatted | 将选项拍平展示,不支持 `onLoadChildren` 异步加载交互 | true \| false | false |
39
+ | upMatch | 开启全量搜索,默认只对开启对可选的选项进行搜索,不向上查找路径 | true \| false | false |
40
+ | render | 自定义渲染节点的 title 内容径 | (item: CascaderItemEventData) => React.ReactNode | - |
41
+ | filterOption | 自定义搜索过滤器,仅在 searchable 为 true 时有效。第一个参数为输入的关键字,第二个为数据项,返回值为 true 时将出现在结果项 | (keyword: string, item: CascaderItemEventData) => boolean | - |
42
+ | appearance | 设置展现形式 | 'line' \| 'unset' \| 'filled' | 'line' |
44
43
 
45
44
  ## Events
46
45
 
@@ -75,7 +74,6 @@
75
74
  | children | 选项的孩子节点列表数据 | object[] | - | - |
76
75
  | selected | 节点是否被选中 | boolean | true \| false | - |
77
76
  | loading | 节点是否在异步加载子项数据中 | boolean | true \| false | - |
78
- | focused | 节点是否被聚焦 | boolean | true \| false | - |
79
77
 
80
78
  ### DataSource
81
79
 
@@ -94,23 +92,21 @@
94
92
 
95
93
  ## CHANGELOG
96
94
 
97
- | 参数 | 变更类型 | 变更内容 | 解决的问题 |
98
- | ------------------ | ------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------ |
99
- | propName | feature \| deprecated \| update | 变更了什么 | 之前是什么样子,解决什么问题 |
100
- | ---- | ---- | ---- | ---- |
101
- | value | update | 类型 string[] => string[] \| number[] | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
102
- | defaultValue | update | 类型 string[] => string[] \| number[] | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
103
- | id | update | 类型 string => string \| number | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
104
- | bordered | deprecated | 字段 `bordered` => `appearance` | 对于 Picker 类型的组件,统一使用 appearance 设置外形(线\面\无边框)值 |
105
- | content | deprecated | 字段 `content` => `title` | 对于 DataItem 模型数据,统一使用 title |
106
- | searchPlaceholder | feature | - | Picker 类型组件统一支持 |
107
- | loadingContent | feature | - | Picker 类型组件统一支持,适配新 UI |
108
- | popper | feature | - | Picker 类型组件统一支持,聚合管理。比如: placement,之前有的加了有的没加 |
109
- | onLoadChildren | feature | - | 树形数据懒加载统一方案,并强化返回值 Promise 功能,保持一致,替代 onActiveItemChange |
110
- | onActiveItemChange | deprecated | - | 使用 onLoadChildren 替代 |
111
- | flatted | feature | - | 支持级联数据扁平模式展示,只展示可选的选项 |
112
- | upMatch | feature | - | 支持向上查找路径 |
113
- | titleRender | feature | - | 统一支持自定义渲染每一项 |
114
- | filterOption | feature | - | 统一支持自定义过滤 |
115
- | dataSource | feature | - | 统一支持异步数据加载 |
116
- | appearance | feature | - | 统一支持:线性\面性\无边框 |
95
+ | 参数 | 变更类型 | 变更内容 | 解决的问题 |
96
+ | ------------------ | ------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
97
+ | propName | feature \| deprecated \| update | 变更了什么 | 之前是什么样子,解决什么问题 |
98
+ | ---- | ---- | ---- | ---- |
99
+ | value | update | 类型 string[] => string[] \| number[] | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
100
+ | defaultValue | update | 类型 string[] => string[] \| number[] | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
101
+ | id | update | 类型 string => string \| number | 对于表单控件 id 值的控制,均使用 React.ReactText(即 string 和 number 都支持) |
102
+ | bordered | deprecated | 字段 `bordered` => `appearance` | 对于 Picker 类型的组件,统一使用 appearance 设置外形(线\面\无边框)值 |
103
+ | content | deprecated | 字段 `content` => `title` | 对于 DataItem 模型数据,统一使用 title |
104
+ | searchPlaceholder | feature | - | Picker 类型组件统一支持 |
105
+ | loadingContent | feature | - | Picker 类型组件统一支持,适配新 UI |
106
+ | overlay | feature | - | Picker 类型组件统一支持,聚合管理。比如: placement,之前有的加了有的没加 |
107
+ | onLoadChildren | feature | - | 树形数据懒加载统一方案,并强化返回值 Promise 功能,保持一致,替代 onActiveItemChange |
108
+ | onActiveItemChange | deprecated | - | 使用 onLoadChildren 替代 |
109
+ | render | feature | (item: CascaderItemEventData) => React.ReactNode | 统一支持自定义渲染每一项 |
110
+ | filterOption | feature | (keyword: string, item: CascaderItemEventData) => boolean | 统一支持自定义过滤 |
111
+ | appearance | feature | 'line' \| 'unset' \| 'filled' | 统一支持:线性\面性\无边框 |
112
+ | displayRender | feature | (value: string[]) => string -> (item: CascaderItemEventData, items: CascaderItemEventData[]) => React.ReactNode | 支持自定义节点渲染 |
@@ -27,7 +27,7 @@ var useToggle = require('@hi-ui/use-toggle');
27
27
 
28
28
  var useCascader = require('./use-cascader.js');
29
29
 
30
- var Input = require('@hi-ui/input');
30
+ var input = require('@hi-ui/input');
31
31
 
32
32
  var icons = require('@hi-ui/icons');
33
33
 
@@ -37,8 +37,6 @@ var index$1 = require('./utils/index.js');
37
37
 
38
38
  var context = require('./context.js');
39
39
 
40
- var useLatest = require('@hi-ui/use-latest');
41
-
42
40
  var treeUtils = require('@hi-ui/tree-utils');
43
41
 
44
42
  var typeAssertion = require('@hi-ui/type-assertion');
@@ -59,11 +57,7 @@ function _interopDefaultLegacy(e) {
59
57
 
60
58
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
61
59
 
62
- var Input__default = /*#__PURE__*/_interopDefaultLegacy(Input);
63
-
64
- var _role = 'cascader';
65
-
66
- var _prefix = classname.getPrefixCls(_role);
60
+ var _prefix = classname.getPrefixCls('cascader');
67
61
 
68
62
  var NOOP_ARRAY = [];
69
63
  /**
@@ -76,42 +70,50 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
76
70
  prefixCls = _props$prefixCls === void 0 ? _prefix : _props$prefixCls,
77
71
  className = props.className,
78
72
  placeholder = props.placeholder,
73
+ _props$disabled = props.disabled,
74
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
79
75
  _props$clearable = props.clearable,
80
76
  clearable = _props$clearable === void 0 ? true : _props$clearable,
81
77
  _props$flatted = props.flatted,
82
78
  flatted = _props$flatted === void 0 ? false : _props$flatted,
83
- _props$upMatch = props.upMatch,
84
- upMatch = _props$upMatch === void 0 ? false : _props$upMatch,
79
+ fieldNames = props.fieldNames,
80
+ _props$expandTrigger = props.expandTrigger,
81
+ expandTrigger = _props$expandTrigger === void 0 ? 'click' : _props$expandTrigger,
85
82
  displayRenderProp = props.displayRender,
86
83
  onSelectProp = props.onSelect,
87
84
  onLoadChildren = props.onLoadChildren,
88
85
  appearance = props.appearance,
89
86
  invalid = props.invalid,
90
- dataSource = props.dataSource,
91
87
  filterOption = props.filterOption,
92
88
  searchableProp = props.searchable,
93
- titleRender = props.titleRender,
89
+ titleRender = props.render,
94
90
  overlayClassName = props.overlayClassName,
95
91
  _props$data = props.data,
96
92
  data = _props$data === void 0 ? NOOP_ARRAY : _props$data,
97
- rest = tslib.__rest(props, ["prefixCls", "className", "placeholder", "clearable", "flatted", "upMatch", "displayRender", "onSelect", "onLoadChildren", "appearance", "invalid", "dataSource", "filterOption", "searchable", "titleRender", "overlayClassName", "data"]);
93
+ onOpen = props.onOpen,
94
+ onClose = props.onClose,
95
+ rest = tslib.__rest(props, ["prefixCls", "className", "placeholder", "disabled", "clearable", "flatted", "fieldNames", "expandTrigger", "displayRender", "onSelect", "onLoadChildren", "appearance", "invalid", "filterOption", "searchable", "render", "overlayClassName", "data", "onOpen", "onClose"]);
98
96
 
99
- var _useToggle = useToggle.useToggle(),
100
- menuVisible = _useToggle[0],
101
- menuVisibleAction = _useToggle[1]; // 搜索时临时选中缓存数据
97
+ var _useUncontrolledToggl = useToggle.useUncontrolledToggle({
98
+ disabled: disabled,
99
+ onOpen: onOpen,
100
+ onClose: onClose
101
+ }),
102
+ menuVisible = _useUncontrolledToggl[0],
103
+ menuVisibleAction = _useUncontrolledToggl[1]; // 搜索时临时选中缓存数据
102
104
 
103
105
 
104
106
  var _useState = React.useState(null),
105
107
  selectedItem = _useState[0],
106
108
  setSelectedItem = _useState[1];
107
109
 
108
- var onSelectLatest = useLatest.useLatestCallback(onSelectProp);
109
- var onSelect = React.useCallback(function (value, item, itemPaths) {
110
- onSelectLatest(value, item, itemPaths);
110
+ var onSelect = function onSelect(value, item, itemPaths) {
111
+ onSelectProp === null || onSelectProp === void 0 ? void 0 : onSelectProp(value, item, itemPaths);
111
112
  setSelectedItem(item); // 关闭弹窗
112
113
 
113
114
  menuVisibleAction.off();
114
- }, [menuVisibleAction, onSelectLatest]); // 拦截 titleRender,自定义高亮展示
115
+ }; // 拦截 titleRender,自定义高亮展示
116
+
115
117
 
116
118
  var proxyTitleRender = function proxyTitleRender(node) {
117
119
  // 本地搜索执行默认高亮规则
@@ -121,7 +123,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
121
123
  return renderHighlightTitle(searchValue, node, titleRender);
122
124
  }
123
125
 
124
- return true;
126
+ return typeAssertion.isFunction(titleRender) ? titleRender(node) : true;
125
127
  };
126
128
 
127
129
  var _useCache = index.useCache(data),
@@ -129,32 +131,18 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
129
131
  setCascaderData = _useCache[1];
130
132
 
131
133
  var flattedData = React.useMemo(function () {
132
- return index$1.flattenTreeData(cascaderData);
133
- }, [cascaderData]); // ************************** 异步搜索 ************************* //
134
+ return index$1.flattenTreeData(cascaderData, fieldNames);
135
+ }, [cascaderData, fieldNames]); // ************************** 异步搜索 ************************* //
134
136
  // TODO: 支持对 Item 传入 状态
135
137
 
136
- var _a = useSearchMode.useAsyncSearch({
137
- dataSource: dataSource
138
- }),
139
- loading = _a.loading,
140
- hasError = _a.hasError,
141
- dataSourceStrategy = tslib.__rest(_a, ["loading", "hasError"]);
142
-
143
138
  var customSearchStrategy = useSearchMode.useTreeCustomSearch({
144
139
  data: flattedData,
145
140
  filterOption: filterOption
146
141
  });
147
- var filterSearchStrategy = useSearchMode.useNormalFilterSearch({
148
- flattedData: flattedData,
149
- searchMode: searchableProp && !upMatch ? 'filter' : undefined,
150
- exclude: function exclude(option) {
151
- return index$1.checkCanLoadChildren(option, onLoadChildren);
152
- }
153
- });
154
142
  var upMatchSearchStrategy = useSearchMode.useTreeUpMatchSearch({
155
143
  data: cascaderData,
156
144
  flattedData: flattedData,
157
- enabled: upMatch,
145
+ enabled: searchableProp,
158
146
  exclude: function exclude(option) {
159
147
  return index$1.checkCanLoadChildren(option, onLoadChildren);
160
148
  }
@@ -162,7 +150,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
162
150
 
163
151
  var _useSearchMode = useSearchMode.useSearchMode({
164
152
  searchable: searchableProp,
165
- strategies: [dataSourceStrategy, customSearchStrategy, filterSearchStrategy, upMatchSearchStrategy]
153
+ strategies: [customSearchStrategy, upMatchSearchStrategy]
166
154
  }),
167
155
  stateInSearch = _useSearchMode.state,
168
156
  searchable = _useSearchMode.searchable,
@@ -170,17 +158,21 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
170
158
  onSearch = _useSearchMode.onSearch,
171
159
  searchValue = _useSearchMode.keyword;
172
160
 
173
- var displayRender = React.useCallback(function (item) {
174
- var itemPaths = index$1.getTopDownAncestors(item);
161
+ var displayRender = function displayRender(item) {
162
+ var itemPaths = treeUtils.getTopDownAncestors(item);
175
163
 
176
164
  if (displayRenderProp) {
177
- return displayRenderProp(item, itemPaths);
165
+ var eventOption = index$1.getItemEventData(item, getItemRequiredProps(item));
166
+ return displayRenderProp(eventOption, itemPaths.map(function (item) {
167
+ return index$1.getItemEventData(item, getItemRequiredProps(item));
168
+ }));
178
169
  }
179
170
 
180
- var mergedTitle = itemPaths.reduce(function (acc, item, index) {
171
+ var mergedTitle = itemPaths.reduce(function (acc, item, index, _ref) {
172
+ var length = _ref.length;
181
173
  acc.push(item.title);
182
174
 
183
- if (itemPaths.length - 1 !== index) {
175
+ if (length - 1 !== index) {
184
176
  acc.push('/');
185
177
  }
186
178
 
@@ -188,36 +180,40 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
188
180
  }, []);
189
181
  return /*#__PURE__*/React__default['default'].createElement("span", {
190
182
  className: "title__text"
191
- }, mergedTitle); // return itemPaths.map((item) => item.title as string).join(' / ')
192
- }, [displayRenderProp]);
193
- var shouldUseSearch = !!searchValue && !hasError;
194
- var selectProps = {
195
- data: shouldUseSearch ? stateInSearch.data : flattedData,
196
- titleRender: proxyTitleRender
183
+ }, mergedTitle);
197
184
  };
198
185
 
199
- var _b = useCascader.useCascader(Object.assign(Object.assign({}, rest), {
186
+ var _a = useCascader.useCascader(Object.assign(Object.assign({}, rest), {
187
+ disabled: disabled,
188
+ fieldNames: fieldNames,
189
+ // 搜索的结果列表也采用 flatted 模式进行展示
190
+ flatted: flatted || !!searchValue,
200
191
  onSelect: onSelect,
201
- titleRender: proxyTitleRender,
192
+ onLoadChildren: onLoadChildren,
193
+ data: data,
202
194
  // @ts-ignore
203
195
  cascaderData: cascaderData,
204
196
  setCascaderData: setCascaderData,
205
- flattedData: flattedData,
206
- matchedItems: selectProps.data,
207
- inSearch: !!searchValue,
208
- flatted: flatted || !!searchValue,
209
- onLoadChildren: onLoadChildren,
210
- data: data
197
+ flattedData: flattedData
211
198
  })),
212
- rootProps = _b.rootProps,
213
- context$1 = tslib.__rest(_b, ["rootProps"]);
199
+ rootProps = _a.rootProps,
200
+ context$1 = tslib.__rest(_a, ["rootProps"]);
214
201
 
215
- var disabled = context$1.disabled,
216
- value = context$1.value,
202
+ var value = context$1.value,
217
203
  tryChangeValue = context$1.tryChangeValue,
218
- reset = context$1.reset;
204
+ reset = context$1.reset,
205
+ menuList = context$1.menuList,
206
+ getItemRequiredProps = context$1.getItemRequiredProps;
207
+ var shouldUseSearch = !!searchValue;
208
+ var showData = React.useMemo(function () {
209
+ if (shouldUseSearch) {
210
+ return typeAssertion.isArrayNonEmpty(stateInSearch.data) ? [stateInSearch.data] : [];
211
+ }
212
+
213
+ return menuList;
214
+ }, [shouldUseSearch, stateInSearch.data, menuList]);
219
215
  React.useEffect(function () {
220
- // 关闭展示时,重置搜索值和展开选项
216
+ // 关闭展示后,重置展开要高亮的选项
221
217
  if (!menuVisible) {
222
218
  reset();
223
219
  }
@@ -233,96 +229,59 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
233
229
  }, [selectedItem, flattedData]);
234
230
  var cls = classname.cx(prefixCls, className, prefixCls + "--" + (menuVisible ? 'open' : 'closed'));
235
231
  return /*#__PURE__*/React__default['default'].createElement(context.CascaderProvider, {
236
- value: context$1
232
+ value: Object.assign(Object.assign({}, context$1), {
233
+ expandTrigger: expandTrigger,
234
+ titleRender: proxyTitleRender,
235
+ menuList: showData
236
+ })
237
237
  }, /*#__PURE__*/React__default['default'].createElement(picker.Picker, Object.assign({
238
238
  ref: ref,
239
239
  className: cls,
240
240
  overlayClassName: classname.cx(prefixCls + "__popper", overlayClassName)
241
241
  }, rootProps, {
242
242
  // 这种展现形式宽度是不固定的,关掉宽度匹配策略
243
- popper: Object.assign({
243
+ overlay: Object.assign({
244
244
  matchWidth: false
245
- }, rest.popper),
245
+ }, rest.overlay),
246
246
  visible: menuVisible,
247
247
  disabled: disabled,
248
248
  onOpen: menuVisibleAction.on,
249
249
  onClose: menuVisibleAction.off,
250
- // value={value}
251
- // onChange={tryChangeValue}
252
- // data={mergedData}
253
250
  searchable: searchable,
254
251
  onSearch: onSearch,
255
- loading: loading,
256
- trigger: /*#__PURE__*/React__default['default'].createElement(Input.MockInput // ref={targetElementRef}
257
- // onClick={openMenu}
258
- // disabled={disabled}
259
- , {
260
- // ref={targetElementRef}
261
- // onClick={openMenu}
262
- // disabled={disabled}
252
+ trigger: /*#__PURE__*/React__default['default'].createElement(input.MockInput, {
263
253
  clearable: clearable,
264
254
  placeholder: placeholder,
265
- // @ts-ignore
266
255
  displayRender: displayRender,
267
256
  suffix: menuVisible ? /*#__PURE__*/React__default['default'].createElement(icons.UpOutlined, null) : /*#__PURE__*/React__default['default'].createElement(icons.DownOutlined, null),
268
257
  focused: menuVisible,
269
- value: value,
270
- onChange: tryChangeValue,
271
- // @ts-ignore
272
- data: mergedData.filter(function (item) {
273
- return !('groupTitle' in item);
274
- }),
275
- // @ts-ignore
258
+ value: value[value.length - 1],
259
+ onChange: function onChange() {
260
+ tryChangeValue([]);
261
+ },
262
+ data: mergedData,
276
263
  invalid: invalid,
277
264
  appearance: appearance
278
265
  })
279
- }), typeAssertion.isArrayNonEmpty(selectProps.data) ? /*#__PURE__*/React__default['default'].createElement(CascaderMenuList, null) : null));
266
+ }), typeAssertion.isArrayNonEmpty(showData) ? /*#__PURE__*/React__default['default'].createElement(CascaderMenuList, null) : null));
280
267
  });
281
268
 
282
269
  if (env.__DEV__) {
283
270
  Cascader.displayName = 'Cascader';
284
271
  }
285
272
 
286
- var searchPrefix = classname.getPrefixCls('cascader-search');
287
- var CascaderSearch = /*#__PURE__*/React.forwardRef(function (_a, ref) {
288
- var _a$prefixCls = _a.prefixCls,
289
- prefixCls = _a$prefixCls === void 0 ? searchPrefix : _a$prefixCls,
290
- className = _a.className,
291
- rest = tslib.__rest(_a, ["prefixCls", "className"]);
292
-
293
- var _useCascaderContext = context.useCascaderContext(),
294
- isEmpty = _useCascaderContext.isEmpty,
295
- emptyContent = _useCascaderContext.emptyContent,
296
- getSearchInputProps = _useCascaderContext.getSearchInputProps;
297
-
298
- return /*#__PURE__*/React__default['default'].createElement("div", Object.assign({
299
- ref: ref,
300
- className: classname.cx(prefixCls, className)
301
- }, rest), /*#__PURE__*/React__default['default'].createElement(Input__default['default'], Object.assign({
302
- appearance: "underline",
303
- prefix: /*#__PURE__*/React__default['default'].createElement(icons.SearchOutlined, null)
304
- }, getSearchInputProps())), isEmpty ? /*#__PURE__*/React__default['default'].createElement("span", {
305
- className: prefixCls + "__empty"
306
- }, emptyContent) : null);
307
- });
308
-
309
- if (env.__DEV__) {
310
- CascaderSearch.displayName = 'CascaderSearch';
311
- }
312
-
313
273
  var menuListPrefix = classname.getPrefixCls('cascader-menu-list');
314
274
  var CascaderMenuList = /*#__PURE__*/React.forwardRef(function (_a, ref) {
315
- var _a$prefixCls2 = _a.prefixCls,
316
- prefixCls = _a$prefixCls2 === void 0 ? menuListPrefix : _a$prefixCls2,
275
+ var _a$prefixCls = _a.prefixCls,
276
+ prefixCls = _a$prefixCls === void 0 ? menuListPrefix : _a$prefixCls,
317
277
  className = _a.className,
318
278
  rest = tslib.__rest(_a, ["prefixCls", "className"]);
319
279
 
320
- var _useCascaderContext2 = context.useCascaderContext(),
321
- flatted = _useCascaderContext2.flatted,
322
- menuList = _useCascaderContext2.menuList,
323
- changeOnSelect = _useCascaderContext2.changeOnSelect;
280
+ var _useCascaderContext = context.useCascaderContext(),
281
+ flatted = _useCascaderContext.flatted,
282
+ menuList = _useCascaderContext.menuList;
324
283
 
325
- var cls = classname.cx(prefixCls, className, flatted && prefixCls + "--flatted", changeOnSelect && prefixCls + "--selectchange");
284
+ var cls = classname.cx(prefixCls, className, flatted && prefixCls + "--flatted");
326
285
  return /*#__PURE__*/React__default['default'].createElement("div", Object.assign({
327
286
  ref: ref,
328
287
  className: cls
@@ -341,31 +300,30 @@ if (env.__DEV__) {
341
300
 
342
301
  var menuPrefix = classname.getPrefixCls('cascader-menu');
343
302
 
344
- var CascaderMenu = function CascaderMenu(_ref) {
345
- var _ref$prefixCls = _ref.prefixCls,
346
- prefixCls = _ref$prefixCls === void 0 ? menuPrefix : _ref$prefixCls,
347
- _ref$role = _ref.role,
348
- role = _ref$role === void 0 ? 'menu' : _ref$role,
349
- className = _ref.className,
350
- menu = _ref.data;
351
-
352
- var _useCascaderContext3 = context.useCascaderContext(),
353
- flatted = _useCascaderContext3.flatted,
354
- disabledContext = _useCascaderContext3.disabled,
355
- expandTrigger = _useCascaderContext3.expandTrigger,
356
- onItemClick = _useCascaderContext3.onItemClick,
357
- onItemHover = _useCascaderContext3.onItemHover,
358
- titleRender = _useCascaderContext3.titleRender,
359
- onLoadChildren = _useCascaderContext3.onLoadChildren,
360
- getCascaderItemRequiredProps = _useCascaderContext3.getCascaderItemRequiredProps,
361
- keyword = _useCascaderContext3.keyword;
303
+ var CascaderMenu = function CascaderMenu(_ref2) {
304
+ var _ref2$prefixCls = _ref2.prefixCls,
305
+ prefixCls = _ref2$prefixCls === void 0 ? menuPrefix : _ref2$prefixCls,
306
+ _ref2$role = _ref2.role,
307
+ role = _ref2$role === void 0 ? 'menu' : _ref2$role,
308
+ className = _ref2.className,
309
+ menu = _ref2.data;
310
+
311
+ var _useCascaderContext2 = context.useCascaderContext(),
312
+ flatted = _useCascaderContext2.flatted,
313
+ disabledContext = _useCascaderContext2.disabled,
314
+ expandTrigger = _useCascaderContext2.expandTrigger,
315
+ onItemClick = _useCascaderContext2.onItemClick,
316
+ onItemHover = _useCascaderContext2.onItemHover,
317
+ titleRender = _useCascaderContext2.titleRender,
318
+ onLoadChildren = _useCascaderContext2.onLoadChildren,
319
+ getItemRequiredProps = _useCascaderContext2.getItemRequiredProps;
362
320
 
363
321
  var cls = classname.cx(prefixCls, className);
364
322
  return /*#__PURE__*/React__default['default'].createElement("ul", {
365
323
  className: cls,
366
324
  role: role
367
325
  }, menu.map(function (option) {
368
- var eventOption = index$1.getCascaderItemEventData(option, getCascaderItemRequiredProps(option));
326
+ var eventOption = index$1.getItemEventData(option, getItemRequiredProps(option));
369
327
  var selected = eventOption.selected,
370
328
  loading = eventOption.loading;
371
329
  var disabled = disabledContext || option.disabled;
@@ -387,7 +345,7 @@ var CascaderMenu = function CascaderMenu(_ref) {
387
345
  onItemHover(eventOption);
388
346
  }
389
347
  }
390
- }, keyword ? renderHighlightTitle(keyword, eventOption, titleRender) : flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
348
+ }, flatted ? renderFlattedTitle(eventOption, titleRender) : /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, renderDefaultTitle(eventOption, titleRender), renderSuffix(prefixCls, option, loading, onLoadChildren))));
391
349
  }));
392
350
  };
393
351
  /**
@@ -417,11 +375,11 @@ var renderSuffix = function renderSuffix(prefixCls, item, loading, onLoadChildre
417
375
 
418
376
  var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
419
377
  // 如果 titleRender 返回 `true`,则使用默认 title
420
- var title = titleRender ? titleRender(option, true) : true;
378
+ var title = titleRender ? titleRender(option) : true;
421
379
  if (title !== true) return title;
422
380
  return /*#__PURE__*/React__default['default'].createElement("span", {
423
381
  className: "title__text title__text--cols"
424
- }, index$1.getTopDownAncestors(option).map(function (item) {
382
+ }, treeUtils.getTopDownAncestors(option).map(function (item) {
425
383
  return /*#__PURE__*/React__default['default'].createElement("span", {
426
384
  key: item.id,
427
385
  className: "title__text--col"
@@ -431,7 +389,7 @@ var renderFlattedTitle = function renderFlattedTitle(option, titleRender) {
431
389
 
432
390
  var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
433
391
  // 如果 titleRender 返回 `true`,则使用默认 title
434
- var title = titleRender ? titleRender(option, false) : true;
392
+ var title = titleRender ? titleRender(option) : true;
435
393
  if (title !== true) return title;
436
394
  return /*#__PURE__*/React__default['default'].createElement("span", {
437
395
  className: "title__text"
@@ -440,7 +398,7 @@ var renderDefaultTitle = function renderDefaultTitle(option, titleRender) {
440
398
 
441
399
  var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleRender) {
442
400
  // 如果 titleRender 返回 `true`,则使用默认 title
443
- var title = titleRender ? titleRender(option, true) : true;
401
+ var title = titleRender ? titleRender(option, keyword) : true;
444
402
  if (title !== true) return title;
445
403
 
446
404
  if (typeof option.title !== 'string') {
@@ -477,5 +435,4 @@ var renderHighlightTitle = function renderHighlightTitle(keyword, option, titleR
477
435
  exports.Cascader = Cascader;
478
436
  exports.CascaderMenu = CascaderMenu;
479
437
  exports.CascaderMenuList = CascaderMenuList;
480
- exports.CascaderSearch = CascaderSearch;
481
438
  //# sourceMappingURL=Cascader.js.map