nodeUtil.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import _extends from "@babel/runtime/helpers/esm/extends";
  3. import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
  4. import _typeof from "@babel/runtime/helpers/esm/typeof";
  5. var _excluded = ["label", "children", "key", "type", "extra"];
  6. import * as React from 'react';
  7. import Divider from "../Divider";
  8. import MenuItem from "../MenuItem";
  9. import MenuItemGroup from "../MenuItemGroup";
  10. import SubMenu from "../SubMenu";
  11. import { parseChildren } from "./commonUtil";
  12. function convertItemsToNodes(list, components, prefixCls) {
  13. var MergedMenuItem = components.item,
  14. MergedMenuItemGroup = components.group,
  15. MergedSubMenu = components.submenu,
  16. MergedDivider = components.divider;
  17. return (list || []).map(function (opt, index) {
  18. if (opt && _typeof(opt) === 'object') {
  19. var _ref = opt,
  20. label = _ref.label,
  21. children = _ref.children,
  22. key = _ref.key,
  23. type = _ref.type,
  24. extra = _ref.extra,
  25. restProps = _objectWithoutProperties(_ref, _excluded);
  26. var mergedKey = key !== null && key !== void 0 ? key : "tmp-".concat(index);
  27. // MenuItemGroup & SubMenuItem
  28. if (children || type === 'group') {
  29. if (type === 'group') {
  30. // Group
  31. return /*#__PURE__*/React.createElement(MergedMenuItemGroup, _extends({
  32. key: mergedKey
  33. }, restProps, {
  34. title: label
  35. }), convertItemsToNodes(children, components, prefixCls));
  36. }
  37. // Sub Menu
  38. return /*#__PURE__*/React.createElement(MergedSubMenu, _extends({
  39. key: mergedKey
  40. }, restProps, {
  41. title: label
  42. }), convertItemsToNodes(children, components, prefixCls));
  43. }
  44. // MenuItem & Divider
  45. if (type === 'divider') {
  46. return /*#__PURE__*/React.createElement(MergedDivider, _extends({
  47. key: mergedKey
  48. }, restProps));
  49. }
  50. return /*#__PURE__*/React.createElement(MergedMenuItem, _extends({
  51. key: mergedKey
  52. }, restProps, {
  53. extra: extra
  54. }), label, (!!extra || extra === 0) && /*#__PURE__*/React.createElement("span", {
  55. className: "".concat(prefixCls, "-item-extra")
  56. }, extra));
  57. }
  58. return null;
  59. }).filter(function (opt) {
  60. return opt;
  61. });
  62. }
  63. export function parseItems(children, items, keyPath, components, prefixCls) {
  64. var childNodes = children;
  65. var mergedComponents = _objectSpread({
  66. divider: Divider,
  67. item: MenuItem,
  68. group: MenuItemGroup,
  69. submenu: SubMenu
  70. }, components);
  71. if (items) {
  72. childNodes = convertItemsToNodes(items, mergedComponents, prefixCls);
  73. }
  74. return parseChildren(childNodes, keyPath);
  75. }