@hi-ui/dropdown 4.1.5 → 4.2.1
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 +12 -0
- package/lib/cjs/Dropdown.js +8 -3
- package/lib/cjs/use-dropdown.js +2 -0
- package/lib/cjs/utils/index.js +24 -0
- package/lib/esm/Dropdown.js +9 -4
- package/lib/esm/use-dropdown.js +2 -0
- 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,17 @@
|
|
|
1
1
|
# @hi-ui/dropdown
|
|
2
2
|
|
|
3
|
+
## 4.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#2934](https://github.com/XiaoMi/hiui/pull/2934) [`cafc0a56b`](https://github.com/XiaoMi/hiui/commit/cafc0a56b2630ab145fceeea4838b7914bbd8da1) Thanks [@xiamiao1121](https://github.com/xiamiao1121)! - fix: 修复 overlay={{className: 'xx'}} 不生效问题
|
|
8
|
+
|
|
9
|
+
## 4.2.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [#2889](https://github.com/XiaoMi/hiui/pull/2889) [`dce209cd0`](https://github.com/XiaoMi/hiui/commit/dce209cd0ec0ac7ba405373923eb656d75842085) Thanks [@xiamiao1121](https://github.com/xiamiao1121)! - feat: 支持配置字段别名
|
|
14
|
+
|
|
3
15
|
## 4.1.5
|
|
4
16
|
|
|
5
17
|
### 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/use-dropdown.js
CHANGED
|
@@ -128,12 +128,14 @@ var useDropdown = function useDropdown(props) {
|
|
|
128
128
|
if (ref === void 0) {
|
|
129
129
|
ref = null;
|
|
130
130
|
}
|
|
131
|
+
var _a;
|
|
131
132
|
var menuParents = parents.concat(triggerElementRef);
|
|
132
133
|
var menuProps = Object.assign(Object.assign({}, props), {
|
|
133
134
|
ref: reactUtils.mergeRefs(popperElementRef, ref),
|
|
134
135
|
parents: menuParents,
|
|
135
136
|
style: Object.assign(Object.assign({}, props.style), (_Object$assign = {}, _Object$assign[classname.getPrefixStyleVar('dropdown-menu-width')] = typeAssertion.isNumeric(width) ? width + 'px' : width, _Object$assign)),
|
|
136
137
|
overlay: Object.assign(Object.assign(Object.assign({}, overlay), props.overlay), {
|
|
138
|
+
className: (_a = props.overlay.className) !== null && _a !== void 0 ? _a : overlay === null || overlay === void 0 ? void 0 : overlay.className,
|
|
137
139
|
closeOnOutsideClick: true,
|
|
138
140
|
visible: menuVisible,
|
|
139
141
|
attachEl: triggerElementRef.current,
|
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/use-dropdown.js
CHANGED
|
@@ -123,12 +123,14 @@ var useDropdown = function useDropdown(props) {
|
|
|
123
123
|
if (ref === void 0) {
|
|
124
124
|
ref = null;
|
|
125
125
|
}
|
|
126
|
+
var _a;
|
|
126
127
|
var menuParents = parents.concat(triggerElementRef);
|
|
127
128
|
var menuProps = Object.assign(Object.assign({}, props), {
|
|
128
129
|
ref: mergeRefs(popperElementRef, ref),
|
|
129
130
|
parents: menuParents,
|
|
130
131
|
style: Object.assign(Object.assign({}, props.style), (_Object$assign = {}, _Object$assign[getPrefixStyleVar('dropdown-menu-width')] = isNumeric(width) ? width + 'px' : width, _Object$assign)),
|
|
131
132
|
overlay: Object.assign(Object.assign(Object.assign({}, overlay), props.overlay), {
|
|
133
|
+
className: (_a = props.overlay.className) !== null && _a !== void 0 ? _a : overlay === null || overlay === void 0 ? void 0 : overlay.className,
|
|
132
134
|
closeOnOutsideClick: true,
|
|
133
135
|
visible: menuVisible,
|
|
134
136
|
attachEl: triggerElementRef.current,
|
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[];
|