@hi-ui/dropdown 4.1.5 → 4.2.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.
- package/CHANGELOG.md +6 -0
- package/lib/cjs/Dropdown.js +8 -3
- package/lib/cjs/utils/index.js +24 -0
- package/lib/esm/Dropdown.js +9 -4
- package/lib/esm/utils/index.js +24 -1
- package/lib/types/Dropdown.d.ts +5 -1
- package/lib/types/utils/index.d.ts +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @hi-ui/dropdown
|
|
2
2
|
|
|
3
|
+
## 4.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#2889](https://github.com/XiaoMi/hiui/pull/2889) [`dce209cd0`](https://github.com/XiaoMi/hiui/commit/dce209cd0ec0ac7ba405373923eb656d75842085) Thanks [@xiamiao1121](https://github.com/xiamiao1121)! - feat: 支持配置字段别名
|
|
8
|
+
|
|
3
9
|
## 4.1.5
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/lib/cjs/Dropdown.js
CHANGED
|
@@ -23,6 +23,7 @@ var useDropdown = require('./use-dropdown.js');
|
|
|
23
23
|
var typeAssertion = require('@hi-ui/type-assertion');
|
|
24
24
|
var Button = require('@hi-ui/button');
|
|
25
25
|
var icons = require('@hi-ui/icons');
|
|
26
|
+
var index = require('./utils/index.js');
|
|
26
27
|
function _interopDefaultCompat(e) {
|
|
27
28
|
return e && _typeof(e) === 'object' && 'default' in e ? e : {
|
|
28
29
|
'default': e
|
|
@@ -45,6 +46,7 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
45
46
|
triggerButton = _a.children,
|
|
46
47
|
_a$data = _a.data,
|
|
47
48
|
data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
|
|
49
|
+
fieldNames = _a.fieldNames,
|
|
48
50
|
title = _a.title,
|
|
49
51
|
_a$type = _a.type,
|
|
50
52
|
type = _a$type === void 0 ? 'text' : _a$type,
|
|
@@ -53,7 +55,10 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
53
55
|
overlayClassName = _a.overlayClassName,
|
|
54
56
|
_a$size = _a.size,
|
|
55
57
|
size = _a$size === void 0 ? 'md' : _a$size,
|
|
56
|
-
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "data", "title", "type", "onClick", "onButtonClick", "overlayClassName", "size"]);
|
|
58
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "data", "fieldNames", "title", "type", "onClick", "onButtonClick", "overlayClassName", "size"]);
|
|
59
|
+
var transformedData = React.useMemo(function () {
|
|
60
|
+
return index.transformData(data, fieldNames);
|
|
61
|
+
}, [data, fieldNames]);
|
|
57
62
|
var _b = useDropdown.useDropdown(rest),
|
|
58
63
|
rootProps = _b.rootProps,
|
|
59
64
|
providedValue = tslib.__rest(_b, ["rootProps"]);
|
|
@@ -124,14 +129,14 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
124
129
|
ref: ref,
|
|
125
130
|
role: role,
|
|
126
131
|
className: cls
|
|
127
|
-
}, rootProps), renderButton(), typeAssertion.isArrayNonEmpty(
|
|
132
|
+
}, rootProps), renderButton(), typeAssertion.isArrayNonEmpty(transformedData) ? ( /*#__PURE__*/React__default["default"].createElement(DropdownMenu, Object.assign({}, getMenuProps({
|
|
128
133
|
overlay: {
|
|
129
134
|
disabledPortal: false,
|
|
130
135
|
className: overlayClassName
|
|
131
136
|
}
|
|
132
137
|
}), {
|
|
133
138
|
size: size
|
|
134
|
-
}), dig(
|
|
139
|
+
}), dig(transformedData))) : null));
|
|
135
140
|
});
|
|
136
141
|
if (env.__DEV__) {
|
|
137
142
|
Dropdown.displayName = 'Dropdown';
|
package/lib/cjs/utils/index.js
CHANGED
|
@@ -23,4 +23,28 @@ var typeAssertion = require('@hi-ui/type-assertion');
|
|
|
23
23
|
var normalizeTrigger = function normalizeTrigger(trigger) {
|
|
24
24
|
return typeAssertion.isArray(trigger) ? Array.from(new Set(trigger)) : [trigger];
|
|
25
25
|
};
|
|
26
|
+
var transformData = function transformData(data, fieldNames) {
|
|
27
|
+
/**
|
|
28
|
+
* 转换对象
|
|
29
|
+
*/
|
|
30
|
+
var getKeyFields = function getKeyFields(node, key) {
|
|
31
|
+
if (fieldNames) {
|
|
32
|
+
return node[fieldNames[key] || key];
|
|
33
|
+
}
|
|
34
|
+
return node[key];
|
|
35
|
+
};
|
|
36
|
+
var traverseNode = function traverseNode(node) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
var newNode = Object.assign({}, node);
|
|
39
|
+
newNode.id = getKeyFields(newNode, 'id');
|
|
40
|
+
newNode.title = getKeyFields(newNode, 'title');
|
|
41
|
+
newNode.href = getKeyFields(newNode, 'href');
|
|
42
|
+
newNode.disabled = (_a = getKeyFields(newNode, 'disabled')) !== null && _a !== void 0 ? _a : false;
|
|
43
|
+
newNode.split = (_b = getKeyFields(newNode, 'split')) !== null && _b !== void 0 ? _b : false;
|
|
44
|
+
newNode.target = getKeyFields(newNode, 'target');
|
|
45
|
+
return newNode;
|
|
46
|
+
};
|
|
47
|
+
return data.map(traverseNode);
|
|
48
|
+
};
|
|
26
49
|
exports.normalizeTrigger = normalizeTrigger;
|
|
50
|
+
exports.transformData = transformData;
|
package/lib/esm/Dropdown.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
9
|
*/
|
|
10
10
|
import { __rest } from 'tslib';
|
|
11
|
-
import React, { forwardRef, cloneElement } from 'react';
|
|
11
|
+
import React, { forwardRef, useMemo, cloneElement } from 'react';
|
|
12
12
|
import { getPrefixCls, cx } from '@hi-ui/classname';
|
|
13
13
|
import { __DEV__ } from '@hi-ui/env';
|
|
14
14
|
import { Popper } from '@hi-ui/popper';
|
|
@@ -17,6 +17,7 @@ import { useDropdown } from './use-dropdown.js';
|
|
|
17
17
|
import { isArrayNonEmpty, isArray } from '@hi-ui/type-assertion';
|
|
18
18
|
import Button, { ButtonGroup } from '@hi-ui/button';
|
|
19
19
|
import { DownOutlined } from '@hi-ui/icons';
|
|
20
|
+
import { transformData } from './utils/index.js';
|
|
20
21
|
var _role = 'dropdown';
|
|
21
22
|
var _prefix = getPrefixCls(_role);
|
|
22
23
|
var DEFAULT_DATA = [];
|
|
@@ -32,6 +33,7 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
32
33
|
triggerButton = _a.children,
|
|
33
34
|
_a$data = _a.data,
|
|
34
35
|
data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
|
|
36
|
+
fieldNames = _a.fieldNames,
|
|
35
37
|
title = _a.title,
|
|
36
38
|
_a$type = _a.type,
|
|
37
39
|
type = _a$type === void 0 ? 'text' : _a$type,
|
|
@@ -40,7 +42,10 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
40
42
|
overlayClassName = _a.overlayClassName,
|
|
41
43
|
_a$size = _a.size,
|
|
42
44
|
size = _a$size === void 0 ? 'md' : _a$size,
|
|
43
|
-
rest = __rest(_a, ["prefixCls", "role", "className", "children", "data", "title", "type", "onClick", "onButtonClick", "overlayClassName", "size"]);
|
|
45
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "children", "data", "fieldNames", "title", "type", "onClick", "onButtonClick", "overlayClassName", "size"]);
|
|
46
|
+
var transformedData = useMemo(function () {
|
|
47
|
+
return transformData(data, fieldNames);
|
|
48
|
+
}, [data, fieldNames]);
|
|
44
49
|
var _b = useDropdown(rest),
|
|
45
50
|
rootProps = _b.rootProps,
|
|
46
51
|
providedValue = __rest(_b, ["rootProps"]);
|
|
@@ -111,14 +116,14 @@ var Dropdown = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
111
116
|
ref: ref,
|
|
112
117
|
role: role,
|
|
113
118
|
className: cls
|
|
114
|
-
}, rootProps), renderButton(), isArrayNonEmpty(
|
|
119
|
+
}, rootProps), renderButton(), isArrayNonEmpty(transformedData) ? ( /*#__PURE__*/React.createElement(DropdownMenu, Object.assign({}, getMenuProps({
|
|
115
120
|
overlay: {
|
|
116
121
|
disabledPortal: false,
|
|
117
122
|
className: overlayClassName
|
|
118
123
|
}
|
|
119
124
|
}), {
|
|
120
125
|
size: size
|
|
121
|
-
}), dig(
|
|
126
|
+
}), dig(transformedData))) : null));
|
|
122
127
|
});
|
|
123
128
|
if (__DEV__) {
|
|
124
129
|
Dropdown.displayName = 'Dropdown';
|
package/lib/esm/utils/index.js
CHANGED
|
@@ -18,4 +18,27 @@ import { isArray } from '@hi-ui/type-assertion';
|
|
|
18
18
|
var normalizeTrigger = function normalizeTrigger(trigger) {
|
|
19
19
|
return isArray(trigger) ? Array.from(new Set(trigger)) : [trigger];
|
|
20
20
|
};
|
|
21
|
-
|
|
21
|
+
var transformData = function transformData(data, fieldNames) {
|
|
22
|
+
/**
|
|
23
|
+
* 转换对象
|
|
24
|
+
*/
|
|
25
|
+
var getKeyFields = function getKeyFields(node, key) {
|
|
26
|
+
if (fieldNames) {
|
|
27
|
+
return node[fieldNames[key] || key];
|
|
28
|
+
}
|
|
29
|
+
return node[key];
|
|
30
|
+
};
|
|
31
|
+
var traverseNode = function traverseNode(node) {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
var newNode = Object.assign({}, node);
|
|
34
|
+
newNode.id = getKeyFields(newNode, 'id');
|
|
35
|
+
newNode.title = getKeyFields(newNode, 'title');
|
|
36
|
+
newNode.href = getKeyFields(newNode, 'href');
|
|
37
|
+
newNode.disabled = (_a = getKeyFields(newNode, 'disabled')) !== null && _a !== void 0 ? _a : false;
|
|
38
|
+
newNode.split = (_b = getKeyFields(newNode, 'split')) !== null && _b !== void 0 ? _b : false;
|
|
39
|
+
newNode.target = getKeyFields(newNode, 'target');
|
|
40
|
+
return newNode;
|
|
41
|
+
};
|
|
42
|
+
return data.map(traverseNode);
|
|
43
|
+
};
|
|
44
|
+
export { normalizeTrigger, transformData };
|
package/lib/types/Dropdown.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { HiBaseHTMLProps, HiBaseSizeEnum } from '@hi-ui/core';
|
|
2
|
+
import { HiBaseFieldNames, HiBaseHTMLProps, HiBaseSizeEnum } from '@hi-ui/core';
|
|
3
3
|
import { PopperOverlayProps } from '@hi-ui/popper';
|
|
4
4
|
import { UseDropdownProps } from './use-dropdown';
|
|
5
5
|
import { DropdownDataItem } from './types';
|
|
@@ -16,6 +16,10 @@ export interface DropdownProps extends Omit<HiBaseHTMLProps<'div'>, 'onClick'>,
|
|
|
16
16
|
* 下拉菜单数据项
|
|
17
17
|
*/
|
|
18
18
|
data?: DropdownDataItem[];
|
|
19
|
+
/**
|
|
20
|
+
* 设置data 中id, title, href, target, disabled, split 等属性对应的 key
|
|
21
|
+
*/
|
|
22
|
+
fieldNames?: HiBaseFieldNames;
|
|
19
23
|
/**
|
|
20
24
|
* 设置下拉面板宽度
|
|
21
25
|
*/
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { DropdownTriggerActionEnum } from '../types';
|
|
1
|
+
import { DropdownTriggerActionEnum, DropdownDataItem } from '../types';
|
|
2
|
+
import { HiBaseFieldNames } from '@hi-ui/core';
|
|
2
3
|
/**
|
|
3
4
|
* 抹平 trigger 结构为数组
|
|
4
5
|
*
|
|
@@ -6,3 +7,4 @@ import { DropdownTriggerActionEnum } from '../types';
|
|
|
6
7
|
* @returns
|
|
7
8
|
*/
|
|
8
9
|
export declare const normalizeTrigger: (trigger: DropdownTriggerActionEnum | DropdownTriggerActionEnum[]) => DropdownTriggerActionEnum[];
|
|
10
|
+
export declare const transformData: (data: DropdownDataItem[], fieldNames?: HiBaseFieldNames | undefined) => DropdownDataItem[];
|