@hi-ui/check-select 4.0.0-alpha.6 → 4.0.0-beta.0

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 (39) hide show
  1. package/README.md +116 -7
  2. package/lib/cjs/CheckSelect.js +290 -144
  3. package/lib/cjs/CheckSelect.js.map +1 -1
  4. package/lib/cjs/hooks/use-data.js +104 -0
  5. package/lib/cjs/hooks/use-data.js.map +1 -0
  6. package/lib/cjs/hooks/use-flatten-data.js +78 -0
  7. package/lib/cjs/hooks/use-flatten-data.js.map +1 -0
  8. package/lib/cjs/index.js +0 -1
  9. package/lib/cjs/index.js.map +1 -1
  10. package/lib/cjs/styles/index.scss.js +1 -1
  11. package/lib/cjs/use-check-select.js +50 -96
  12. package/lib/cjs/use-check-select.js.map +1 -1
  13. package/lib/esm/CheckSelect.js +284 -141
  14. package/lib/esm/CheckSelect.js.map +1 -1
  15. package/lib/esm/hooks/use-data.js +94 -0
  16. package/lib/esm/hooks/use-data.js.map +1 -0
  17. package/lib/esm/hooks/use-flatten-data.js +69 -0
  18. package/lib/esm/hooks/use-flatten-data.js.map +1 -0
  19. package/lib/esm/index.js +1 -1
  20. package/lib/esm/styles/index.scss.js +1 -1
  21. package/lib/esm/use-check-select.js +49 -88
  22. package/lib/esm/use-check-select.js.map +1 -1
  23. package/lib/types/CheckSelect.d.ts +57 -21
  24. package/lib/types/context.d.ts +8 -30
  25. package/lib/types/hooks/index.d.ts +2 -0
  26. package/lib/types/hooks/use-data.d.ts +4 -0
  27. package/lib/types/hooks/use-flatten-data.d.ts +2 -0
  28. package/lib/types/hooks/use-search.d.ts +2 -2
  29. package/lib/types/types.d.ts +29 -5
  30. package/lib/types/use-check-select.d.ts +20 -52
  31. package/package.json +29 -19
  32. package/lib/cjs/hooks/use-search.js +0 -154
  33. package/lib/cjs/hooks/use-search.js.map +0 -1
  34. package/lib/cjs/utils/type-assertion/lib/esm/index.js +0 -42
  35. package/lib/cjs/utils/type-assertion/lib/esm/index.js.map +0 -1
  36. package/lib/esm/hooks/use-search.js +0 -144
  37. package/lib/esm/hooks/use-search.js.map +0 -1
  38. package/lib/esm/utils/type-assertion/lib/esm/index.js +0 -33
  39. package/lib/esm/utils/type-assertion/lib/esm/index.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- export interface CheckSelectOptionItem {
2
+ export interface CheckSelectDataItem {
3
3
  /**
4
4
  * 节点唯一 id
5
5
  */
6
- id: React.ReactText;
6
+ id?: React.ReactText;
7
7
  /**
8
8
  * 节点标题
9
9
  */
@@ -13,7 +13,7 @@ export interface CheckSelectOptionItem {
13
13
  */
14
14
  disabled?: boolean;
15
15
  }
16
- export interface CheckSelectOptionGroupItem {
16
+ export interface CheckSelectGroupDataItem {
17
17
  /**
18
18
  * 节点组标题
19
19
  */
@@ -21,6 +21,30 @@ export interface CheckSelectOptionGroupItem {
21
21
  /**
22
22
  * 是否禁用该节点
23
23
  */
24
- children?: CheckSelectOptionItem[];
24
+ children?: CheckSelectDataItem[];
25
+ }
26
+ export declare type CheckSelectMergedItem = CheckSelectDataItem & CheckSelectGroupDataItem;
27
+ export interface CheckSelectRequiredProps {
28
+ checked: boolean;
29
+ focused: boolean;
30
+ }
31
+ export interface FlattedCheckSelectDataItem extends CheckSelectDataItem {
32
+ /**
33
+ * 该节点的子节点列表
34
+ */
35
+ children?: FlattedCheckSelectDataItem[];
36
+ /**
37
+ * 关联用户传入的原始节点
38
+ */
39
+ raw: CheckSelectDataItem;
40
+ /**
41
+ * 该节点的层级,从 0(顶层)开始
42
+ */
43
+ depth: number;
44
+ /**
45
+ * 该节点的父节点
46
+ */
47
+ parent?: FlattedCheckSelectDataItem;
48
+ }
49
+ export interface CheckSelectEventData extends FlattedCheckSelectDataItem, CheckSelectRequiredProps {
25
50
  }
26
- export declare type CheckSelectOptionOrOptionGroupItem = CheckSelectOptionItem & CheckSelectOptionGroupItem;
@@ -1,32 +1,16 @@
1
1
  import React from 'react';
2
- import { CheckSelectOptionItem, CheckSelectOptionOrOptionGroupItem } from './types';
3
- export declare const useCheckSelect: ({ data: dataProp, children, disabled, value: valueProp, defaultValue, onChange: onChangeProp, onSelect, emptyContent, searchPlaceholder, filter, titleRender, ...rest }: UseSelectProps) => {
4
- rootProps: {
5
- /**
6
- * 自定义选择后触发器所展示的内容,只在 title 为字符串时有效
7
- */
8
- displayRender?: ((option: CheckSelectOptionItem) => React.ReactNode) | undefined;
9
- /**
10
- * 触发器输入框占位符
11
- */
12
- placeholder?: string | undefined;
13
- };
2
+ import { CheckSelectDataItem, CheckSelectEventData } from './types';
3
+ import { HiBaseFieldNames } from '@hi-ui/core';
4
+ export declare const useCheckSelect: ({ data: dataProp, children, disabled, value: valueProp, defaultValue, onChange: onChangeProp, onSelect, fieldNames, ...rest }: UseCheckSelectProps) => {
5
+ rootProps: {};
14
6
  data: any[];
7
+ flattedData: import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
15
8
  value: React.ReactText[];
9
+ tryChangeValue: (value: React.ReactText[], item: CheckSelectEventData | CheckSelectEventData[], shouldChecked: boolean) => void;
16
10
  onSelect: (targetItem: import("@hi-ui/use-check").UseCheckItem, shouldChecked: boolean) => void;
17
- isSelectedId: (id: React.ReactText) => boolean;
18
- emptyContent: boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null;
19
- getSearchInputProps: () => {
20
- placeholder: string | undefined;
21
- value: string;
22
- onChange: (evt: React.ChangeEvent<HTMLInputElement>) => void;
23
- };
24
- tryChangeValue: (newState: React.ReactText[], ...args: any[]) => void;
25
- isEmpty: boolean;
26
- resetSearch: () => void;
27
- titleRender: ((item: CheckSelectOptionItem) => React.ReactNode) | undefined;
11
+ isCheckedId: (id: React.ReactText) => boolean;
28
12
  };
29
- export interface UseSelectProps {
13
+ export interface UseCheckSelectProps {
30
14
  /**
31
15
  * 设置当前选中值
32
16
  */
@@ -37,47 +21,31 @@ export interface UseSelectProps {
37
21
  defaultValue?: React.ReactText[];
38
22
  /**
39
23
  * 选中值改变时的回调
24
+ * value: 所有选中项的 id 集合
25
+ * changedItems: 变更的选项集合
26
+ * checkedItems:所有选中项的选项集合
40
27
  */
41
- onChange?: (value: React.ReactText[], targetOption?: CheckSelectOptionItem, shouldChecked?: boolean) => void;
28
+ onChange?: (value: React.ReactText[], changedItems?: CheckSelectDataItem[], checkedItems?: CheckSelectDataItem[]) => void;
42
29
  /**
43
- * 选中值时回调
30
+ * 选中值时回调。暂不对外暴露
31
+ * @private
44
32
  */
45
- onSelect?: (value: React.ReactText[], targetOption?: CheckSelectOptionItem, shouldChecked?: boolean) => void;
33
+ onSelect?: (value: React.ReactText[], targetOption: CheckSelectEventData, shouldChecked: boolean) => void;
46
34
  /**
47
35
  * 是否禁止使用
48
36
  */
49
37
  disabled?: boolean;
50
- /**
51
- * 设置选项为空时展示的内容
52
- */
53
- emptyContent?: React.ReactNode;
54
- /**
55
- * 自定义渲染节点的 title 内容
56
- */
57
- titleRender?: (item: CheckSelectOptionItem) => React.ReactNode;
58
- /**
59
- * 自定义选择后触发器所展示的内容,只在 title 为字符串时有效
60
- */
61
- displayRender?: (option: CheckSelectOptionItem) => React.ReactNode;
62
- /**
63
- * 触发器输入框占位符
64
- */
65
- placeholder?: string;
66
- /**
67
- * 搜索输入框占位符
68
- */
69
- searchPlaceholder?: string;
70
- /**
71
- * 启用自定义过滤函数实现根据搜索框内容,自定义搜索
72
- */
73
- filter?: (keyword: string, option: CheckSelectOptionOrOptionGroupItem) => boolean;
74
38
  /**
75
39
  * 选项数据
76
40
  */
77
- data?: CheckSelectOptionItem[];
41
+ data?: CheckSelectDataItem[];
78
42
  /**
79
43
  * JSX 子节点
80
44
  */
81
45
  children?: React.ReactNode;
46
+ /**
47
+ * 设置 data 中 id, title, disabled, children 对应的 key
48
+ */
49
+ fieldNames?: HiBaseFieldNames;
82
50
  }
83
51
  export declare type UseSelectReturn = ReturnType<typeof useCheckSelect>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/check-select",
3
- "version": "4.0.0-alpha.6",
3
+ "version": "4.0.0-beta.0",
4
4
  "description": "A sub-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HIUI <mi-hiui@xiaomi.com>",
@@ -43,30 +43,40 @@
43
43
  "url": "https://github.com/XiaoMi/hiui/issues"
44
44
  },
45
45
  "dependencies": {
46
- "@hi-ui/checkbox": "^4.0.0-alpha.10",
47
- "@hi-ui/classname": "^4.0.0-alpha.0",
48
- "@hi-ui/core": "^4.0.0-alpha.3",
49
- "@hi-ui/core-css": "^4.0.0-alpha.0",
50
- "@hi-ui/env": "^4.0.0-alpha.0",
51
- "@hi-ui/icons": "^4.0.0-alpha.8",
52
- "@hi-ui/input": "^4.0.0-alpha.11",
53
- "@hi-ui/popper": "^4.0.0-alpha.5",
54
- "@hi-ui/tag-input": "^4.0.0-alpha.2",
55
- "@hi-ui/use-check": "^4.0.0-alpha.6",
56
- "@hi-ui/use-children": "^4.0.0-alpha.1",
57
- "@hi-ui/use-latest": "^4.0.0-alpha.2",
58
- "@hi-ui/use-toggle": "^4.0.0-alpha.4",
59
- "@hi-ui/use-uncontrolled-state": "^4.0.0-alpha.5",
46
+ "@hi-ui/checkbox": "^4.0.0-beta.0",
47
+ "@hi-ui/classname": "^4.0.0-beta.0",
48
+ "@hi-ui/core": "^4.0.0-beta.0",
49
+ "@hi-ui/core-css": "^4.0.0-beta.0",
50
+ "@hi-ui/env": "^4.0.0-beta.0",
51
+ "@hi-ui/func-utils": "^4.0.0-beta.0",
52
+ "@hi-ui/highlighter": "^4.0.0-beta.0",
53
+ "@hi-ui/icons": "^4.0.0-beta.0",
54
+ "@hi-ui/input": "^4.0.0-beta.0",
55
+ "@hi-ui/locale-context": "^4.0.0-beta.0",
56
+ "@hi-ui/picker": "^4.0.0-beta.0",
57
+ "@hi-ui/popper": "^4.0.0-beta.0",
58
+ "@hi-ui/tag-input": "^4.0.0-beta.0",
59
+ "@hi-ui/times": "^4.0.0-beta.0",
60
+ "@hi-ui/tree-utils": "^4.0.0-beta.0",
61
+ "@hi-ui/type-assertion": "^4.0.0-beta.0",
62
+ "@hi-ui/use-check": "^4.0.0-beta.0",
63
+ "@hi-ui/use-children": "^4.0.0-beta.0",
64
+ "@hi-ui/use-data-source": "^4.0.0-beta.0",
65
+ "@hi-ui/use-latest": "^4.0.0-beta.0",
66
+ "@hi-ui/use-search-mode": "^4.0.0-beta.0",
67
+ "@hi-ui/use-toggle": "^4.0.0-beta.0",
68
+ "@hi-ui/use-uncontrolled-state": "^4.0.0-beta.0",
69
+ "lodash": "^4.17.21",
60
70
  "rc-virtual-list": "^3.4.1"
61
71
  },
62
72
  "peerDependencies": {
63
- "react": "^17.0.1",
64
- "react-dom": "^17.0.1"
73
+ "react": ">=16.8.6",
74
+ "react-dom": ">=16.8.6"
65
75
  },
66
76
  "devDependencies": {
67
- "@hi-ui/hi-build": "^4.0.0-alpha.0",
77
+ "@hi-ui/hi-build": "^4.0.0-beta.0",
68
78
  "react": "^17.0.1",
69
79
  "react-dom": "^17.0.1"
70
80
  },
71
- "gitHead": "af5356d38c7f47aaa6963d2e3d4fac43a74e8a10"
81
+ "gitHead": "be106782f3ff72208ec6d4a2ec8acfe2a41fa1fe"
72
82
  }
@@ -1,154 +0,0 @@
1
- /** @LICENSE
2
- * @hi-ui/check-select
3
- * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-select#readme
4
- *
5
- * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */
10
- 'use strict';
11
-
12
- Object.defineProperty(exports, '__esModule', {
13
- value: true
14
- });
15
-
16
- var React = require('react');
17
-
18
- var useLatest = require('@hi-ui/use-latest');
19
-
20
- var env = require('@hi-ui/env');
21
-
22
- var index = require('../utils/type-assertion/lib/esm/index.js');
23
- /**
24
- * 支持搜索功能的 hook
25
- */
26
-
27
-
28
- var useSearch = function useSearch(flattedData, filter) {
29
- var _useState = React.useState(''),
30
- searchValue = _useState[0],
31
- setSearchValue = _useState[1];
32
-
33
- var _useState2 = React.useState([]),
34
- matchedNodes = _useState2[0],
35
- setMatchedNodes = _useState2[1];
36
-
37
- var flattedDataRef = useLatest.useLatestRef(flattedData);
38
- var handleChange = React.useCallback(function (evt) {
39
- var nextSearchValue = evt.target.value;
40
- setSearchValue(nextSearchValue); // 匹配到搜索的节点,将这些节点进行展开显示,其它均隐藏
41
-
42
- var matchedNodes = getMatchedNodes(flattedDataRef.current, nextSearchValue, filter);
43
- setMatchedNodes(matchedNodes);
44
- }, [flattedDataRef, filter]);
45
- var inputProps = React.useMemo(function () {
46
- return {
47
- value: searchValue,
48
- onChange: handleChange
49
- };
50
- }, [searchValue, handleChange]);
51
- var resetSearch = React.useCallback(function () {
52
- setSearchValue('');
53
- }, []);
54
- var isSearch = !!searchValue;
55
- var isEmpty = isSearch && matchedNodes.length === 0;
56
- return [isSearch, matchedNodes, inputProps, isEmpty, resetSearch];
57
- };
58
- /**
59
- * 从 value 中 找到指定的 options(逐层查找)
60
- */
61
-
62
-
63
- var getMatchedNodes = function getMatchedNodes(flattedData, searchValue, filter) {
64
- if (!searchValue) return [];
65
- var matchedResult = [];
66
- var shouldFilter = index.isFunction(filter); // 1. 先对于 groupTitle 匹配
67
- // 2. 若未匹配到。再对其 children 进行 title 匹配
68
-
69
- var _loop = function _loop(i) {
70
- var optionOrGroup = flattedData[i];
71
-
72
- if ('groupTitle' in optionOrGroup) {
73
- // search for OptionGroup
74
- // @ts-ignore
75
- var shouldReserved = shouldFilter && filter(searchValue, optionOrGroup) === true;
76
-
77
- if (shouldReserved) {
78
- matchedResult.push(optionOrGroup);
79
- return "continue";
80
- }
81
-
82
- if (typeof optionOrGroup.groupTitle === 'string') {
83
- // 匹配策略:`String.include`
84
- if (optionOrGroup.groupTitle.includes(searchValue)) {
85
- matchedResult.push(optionOrGroup);
86
- return "continue";
87
- }
88
- } else {
89
- if (env.__DEV__) {
90
- console.info('WARNING: The `optionGroup.groupTitle` should be `string` when searchable is enabled.');
91
- }
92
- }
93
-
94
- if (index.isArrayNonEmpty(optionOrGroup.children)) {
95
- var matchedChildren = optionOrGroup.children.filter(function (node) {
96
- var _a, _b;
97
-
98
- if (shouldFilter) {
99
- // @ts-ignore
100
- return filter(searchValue, optionOrGroup);
101
- }
102
-
103
- if (typeof node.title !== 'string') {
104
- if (env.__DEV__) {
105
- console.info('WARNING: The `option.title` should be `string` when searchable is enabled.');
106
- }
107
-
108
- return false;
109
- }
110
-
111
- return (_b = (_a = node.title).includes) === null || _b === void 0 ? void 0 : _b.call(_a, searchValue);
112
- });
113
-
114
- if (index.isArrayNonEmpty(matchedChildren)) {
115
- var matchedOptionOrGroup = Object.assign(Object.assign({}, optionOrGroup), {
116
- children: matchedChildren
117
- });
118
- matchedResult.push(matchedOptionOrGroup);
119
- }
120
- }
121
- } else {
122
- // search for Option
123
- // @ts-ignore
124
- var _shouldReserved = shouldFilter && filter(searchValue, optionOrGroup) === true;
125
-
126
- if (_shouldReserved) {
127
- matchedResult.push(optionOrGroup);
128
- return "continue";
129
- }
130
-
131
- if (typeof optionOrGroup.title === 'string') {
132
- // 匹配策略:`String.include`
133
- if (optionOrGroup.title.includes(searchValue)) {
134
- matchedResult.push(optionOrGroup);
135
- }
136
- } else {
137
- if (env.__DEV__) {
138
- console.info('WARNING: The `option.title` should be `string` when searchable is enabled.');
139
- }
140
- }
141
- }
142
- };
143
-
144
- for (var i = 0; i < flattedData.length; i++) {
145
- var _ret = _loop(i);
146
-
147
- if (_ret === "continue") continue;
148
- }
149
-
150
- return matchedResult;
151
- };
152
-
153
- exports.useSearch = useSearch;
154
- //# sourceMappingURL=use-search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-search.js","sources":["../../../src/hooks/use-search.ts"],"sourcesContent":[null],"names":["useSearch","flattedData","filter","useState","searchValue","setSearchValue","matchedNodes","setMatchedNodes","flattedDataRef","useLatestRef","handleChange","useCallback","evt","nextSearchValue","target","value","getMatchedNodes","current","inputProps","useMemo","onChange","resetSearch","isSearch","isEmpty","length","matchedResult","shouldFilter","isFunction","i","optionOrGroup","shouldReserved","push","groupTitle","includes","__DEV__","console","info","isArrayNonEmpty","children","matchedChildren","node","title","matchedOptionOrGroup"],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /** @LICENSE
2
- * @hi-ui/check-select
3
- * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-select#readme
4
- *
5
- * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */
10
- 'use strict';
11
-
12
- Object.defineProperty(exports, '__esModule', {
13
- value: true
14
- });
15
-
16
- require('@babel/runtime/helpers/esm/typeof');
17
- /**
18
- * Assert is an array
19
- */
20
-
21
-
22
- var isArray = Array.isArray;
23
- /**
24
- * Assert is an array and `array.length > 0`
25
- */
26
-
27
- var isArrayNonEmpty = function isArrayNonEmpty(arg) {
28
- return isArray(arg) && arg.length > 0;
29
- };
30
- /**
31
- * Assert is function
32
- */
33
-
34
-
35
- var isFunction = function isFunction(arg) {
36
- return typeof arg === 'function';
37
- };
38
-
39
- exports.isArray = isArray;
40
- exports.isArrayNonEmpty = isArrayNonEmpty;
41
- exports.isFunction = isFunction;
42
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../../../utils/type-assertion/lib/esm/index.js"],"sourcesContent":["import _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\n/** @LICENSE\n * @hi-ui/type-assertion\n * https://github.com/XiaoMi/hiui/tree/master/packages/utils/type-assertion#readme\n *\n * Copyright (c) HIUI <mi-hiui@xiaomi.com>.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Assert is an objectLike\n * TODO: Assert the return type\n */\nvar isObjectLike = function isObjectLike(arg) {\n return !!arg && _typeof(arg) === 'object';\n};\n/**\n * Assert is an object\n */\n\n\nvar isObject = function isObject(arg) {\n return isObjectLike(arg) && arg.constructor === Object;\n};\n/**\n * Assert is an Promise\n */\n\n\nvar isPromise = function isPromise(arg) {\n return (isObjectLike(arg) || typeof arg === 'function') && typeof arg.then === 'function';\n};\n/**\n * Assert is an array\n */\n\n\nvar isArray = Array.isArray;\n/**\n * Assert is an array and `array.length > 0`\n */\n\nvar isArrayNonEmpty = function isArrayNonEmpty(arg) {\n return isArray(arg) && arg.length > 0;\n};\n/**\n * Assert is numeric\n */\n\n\nvar isNumeric = function isNumeric(arg) {\n return !Number.isNaN(Number(arg));\n};\n/**\n * Assert is function\n */\n\n\nvar isFunction = function isFunction(arg) {\n return typeof arg === 'function';\n};\n\nexport { isArray, isArrayNonEmpty, isFunction, isNumeric, isObject, isPromise };\n//# sourceMappingURL=index.js.map\n"],"names":["isArray","Array","isArrayNonEmpty","arg","isFunction"],"mappings":";;;;;;;;;;;;;;;;AAoBA;;;;;IAGaA,OAAO,GAAoCC,KAAK,CAACD;AAE9D;;;;IAGaE,eAAe,GAAG,SAAlBA,eAAkB,CAAAC,GAAA,EAAA;SAC7BH,OAAO,CAAPA,GAAO,CAAPA,IAAgBG,GAAG,CAAHA,MAAAA,GAAa;;AAO/B;;;;;IAGaC,UAAU,GAAG,SAAbA,UAAa,CAAAD,GAAA,EAAA;SACxB,OAAAA,GAAA,KAAe;;;;;"}
@@ -1,144 +0,0 @@
1
- /** @LICENSE
2
- * @hi-ui/check-select
3
- * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-select#readme
4
- *
5
- * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */
10
- import { useState, useCallback, useMemo } from 'react';
11
- import { useLatestRef } from '@hi-ui/use-latest';
12
- import { __DEV__ } from '@hi-ui/env';
13
- import { isArrayNonEmpty, isFunction } from '../utils/type-assertion/lib/esm/index.js';
14
- /**
15
- * 支持搜索功能的 hook
16
- */
17
-
18
- var useSearch = function useSearch(flattedData, filter) {
19
- var _useState = useState(''),
20
- searchValue = _useState[0],
21
- setSearchValue = _useState[1];
22
-
23
- var _useState2 = useState([]),
24
- matchedNodes = _useState2[0],
25
- setMatchedNodes = _useState2[1];
26
-
27
- var flattedDataRef = useLatestRef(flattedData);
28
- var handleChange = useCallback(function (evt) {
29
- var nextSearchValue = evt.target.value;
30
- setSearchValue(nextSearchValue); // 匹配到搜索的节点,将这些节点进行展开显示,其它均隐藏
31
-
32
- var matchedNodes = getMatchedNodes(flattedDataRef.current, nextSearchValue, filter);
33
- setMatchedNodes(matchedNodes);
34
- }, [flattedDataRef, filter]);
35
- var inputProps = useMemo(function () {
36
- return {
37
- value: searchValue,
38
- onChange: handleChange
39
- };
40
- }, [searchValue, handleChange]);
41
- var resetSearch = useCallback(function () {
42
- setSearchValue('');
43
- }, []);
44
- var isSearch = !!searchValue;
45
- var isEmpty = isSearch && matchedNodes.length === 0;
46
- return [isSearch, matchedNodes, inputProps, isEmpty, resetSearch];
47
- };
48
- /**
49
- * 从 value 中 找到指定的 options(逐层查找)
50
- */
51
-
52
-
53
- var getMatchedNodes = function getMatchedNodes(flattedData, searchValue, filter) {
54
- if (!searchValue) return [];
55
- var matchedResult = [];
56
- var shouldFilter = isFunction(filter); // 1. 先对于 groupTitle 匹配
57
- // 2. 若未匹配到。再对其 children 进行 title 匹配
58
-
59
- var _loop = function _loop(i) {
60
- var optionOrGroup = flattedData[i];
61
-
62
- if ('groupTitle' in optionOrGroup) {
63
- // search for OptionGroup
64
- // @ts-ignore
65
- var shouldReserved = shouldFilter && filter(searchValue, optionOrGroup) === true;
66
-
67
- if (shouldReserved) {
68
- matchedResult.push(optionOrGroup);
69
- return "continue";
70
- }
71
-
72
- if (typeof optionOrGroup.groupTitle === 'string') {
73
- // 匹配策略:`String.include`
74
- if (optionOrGroup.groupTitle.includes(searchValue)) {
75
- matchedResult.push(optionOrGroup);
76
- return "continue";
77
- }
78
- } else {
79
- if (__DEV__) {
80
- console.info('WARNING: The `optionGroup.groupTitle` should be `string` when searchable is enabled.');
81
- }
82
- }
83
-
84
- if (isArrayNonEmpty(optionOrGroup.children)) {
85
- var matchedChildren = optionOrGroup.children.filter(function (node) {
86
- var _a, _b;
87
-
88
- if (shouldFilter) {
89
- // @ts-ignore
90
- return filter(searchValue, optionOrGroup);
91
- }
92
-
93
- if (typeof node.title !== 'string') {
94
- if (__DEV__) {
95
- console.info('WARNING: The `option.title` should be `string` when searchable is enabled.');
96
- }
97
-
98
- return false;
99
- }
100
-
101
- return (_b = (_a = node.title).includes) === null || _b === void 0 ? void 0 : _b.call(_a, searchValue);
102
- });
103
-
104
- if (isArrayNonEmpty(matchedChildren)) {
105
- var matchedOptionOrGroup = Object.assign(Object.assign({}, optionOrGroup), {
106
- children: matchedChildren
107
- });
108
- matchedResult.push(matchedOptionOrGroup);
109
- }
110
- }
111
- } else {
112
- // search for Option
113
- // @ts-ignore
114
- var _shouldReserved = shouldFilter && filter(searchValue, optionOrGroup) === true;
115
-
116
- if (_shouldReserved) {
117
- matchedResult.push(optionOrGroup);
118
- return "continue";
119
- }
120
-
121
- if (typeof optionOrGroup.title === 'string') {
122
- // 匹配策略:`String.include`
123
- if (optionOrGroup.title.includes(searchValue)) {
124
- matchedResult.push(optionOrGroup);
125
- }
126
- } else {
127
- if (__DEV__) {
128
- console.info('WARNING: The `option.title` should be `string` when searchable is enabled.');
129
- }
130
- }
131
- }
132
- };
133
-
134
- for (var i = 0; i < flattedData.length; i++) {
135
- var _ret = _loop(i);
136
-
137
- if (_ret === "continue") continue;
138
- }
139
-
140
- return matchedResult;
141
- };
142
-
143
- export { useSearch };
144
- //# sourceMappingURL=use-search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-search.js","sources":["../../../src/hooks/use-search.ts"],"sourcesContent":[null],"names":["useSearch","flattedData","filter","useState","searchValue","setSearchValue","matchedNodes","setMatchedNodes","flattedDataRef","useLatestRef","handleChange","useCallback","evt","nextSearchValue","target","value","getMatchedNodes","current","inputProps","useMemo","onChange","resetSearch","isSearch","isEmpty","length","matchedResult","shouldFilter","isFunction","i","optionOrGroup","shouldReserved","push","groupTitle","includes","__DEV__","console","info","isArrayNonEmpty","children","matchedChildren","node","title","matchedOptionOrGroup"],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- /** @LICENSE
2
- * @hi-ui/check-select
3
- * https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-select#readme
4
- *
5
- * Copyright (c) HIUI <mi-hiui@xiaomi.com>.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */
10
- import '@babel/runtime/helpers/esm/typeof';
11
- /**
12
- * Assert is an array
13
- */
14
-
15
- var isArray = Array.isArray;
16
- /**
17
- * Assert is an array and `array.length > 0`
18
- */
19
-
20
- var isArrayNonEmpty = function isArrayNonEmpty(arg) {
21
- return isArray(arg) && arg.length > 0;
22
- };
23
- /**
24
- * Assert is function
25
- */
26
-
27
-
28
- var isFunction = function isFunction(arg) {
29
- return typeof arg === 'function';
30
- };
31
-
32
- export { isArray, isArrayNonEmpty, isFunction };
33
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../../../utils/type-assertion/lib/esm/index.js"],"sourcesContent":["import _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\n/** @LICENSE\n * @hi-ui/type-assertion\n * https://github.com/XiaoMi/hiui/tree/master/packages/utils/type-assertion#readme\n *\n * Copyright (c) HIUI <mi-hiui@xiaomi.com>.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Assert is an objectLike\n * TODO: Assert the return type\n */\nvar isObjectLike = function isObjectLike(arg) {\n return !!arg && _typeof(arg) === 'object';\n};\n/**\n * Assert is an object\n */\n\n\nvar isObject = function isObject(arg) {\n return isObjectLike(arg) && arg.constructor === Object;\n};\n/**\n * Assert is an Promise\n */\n\n\nvar isPromise = function isPromise(arg) {\n return (isObjectLike(arg) || typeof arg === 'function') && typeof arg.then === 'function';\n};\n/**\n * Assert is an array\n */\n\n\nvar isArray = Array.isArray;\n/**\n * Assert is an array and `array.length > 0`\n */\n\nvar isArrayNonEmpty = function isArrayNonEmpty(arg) {\n return isArray(arg) && arg.length > 0;\n};\n/**\n * Assert is numeric\n */\n\n\nvar isNumeric = function isNumeric(arg) {\n return !Number.isNaN(Number(arg));\n};\n/**\n * Assert is function\n */\n\n\nvar isFunction = function isFunction(arg) {\n return typeof arg === 'function';\n};\n\nexport { isArray, isArrayNonEmpty, isFunction, isNumeric, isObject, isPromise };\n//# sourceMappingURL=index.js.map\n"],"names":["isArray","Array","isArrayNonEmpty","arg","isFunction"],"mappings":";;;;;;;;;;AAoBA;;;;IAGaA,OAAO,GAAoCC,KAAK,CAACD;AAE9D;;;;IAGaE,eAAe,GAAG,SAAlBA,eAAkB,CAAAC,GAAA,EAAA;SAC7BH,OAAO,CAAPA,GAAO,CAAPA,IAAgBG,GAAG,CAAHA,MAAAA,GAAa;;AAO/B;;;;;IAGaC,UAAU,GAAG,SAAbA,UAAa,CAAAD,GAAA,EAAA;SACxB,OAAAA,GAAA,KAAe;;;"}