@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 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
@@ -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(data) ? ( /*#__PURE__*/React__default["default"].createElement(DropdownMenu, Object.assign({}, getMenuProps({
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(data))) : null));
139
+ }), dig(transformedData))) : null));
135
140
  });
136
141
  if (env.__DEV__) {
137
142
  Dropdown.displayName = 'Dropdown';
@@ -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,
@@ -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;
@@ -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(data) ? ( /*#__PURE__*/React.createElement(DropdownMenu, Object.assign({}, getMenuProps({
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(data))) : null));
126
+ }), dig(transformedData))) : null));
122
127
  });
123
128
  if (__DEV__) {
124
129
  Dropdown.displayName = 'Dropdown';
@@ -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,
@@ -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
- export { normalizeTrigger };
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 };
@@ -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[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/dropdown",
3
- "version": "4.1.5",
3
+ "version": "4.2.1",
4
4
  "description": "A sub-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HiUI <mi-hiui@xiaomi.com>",