UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

72 lines (67 loc) β€’ 2.3 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useItems; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _rcMenu = require("rc-menu"); var React = _interopRequireWildcard(require("react")); var _MenuDivider = _interopRequireDefault(require("../MenuDivider")); var _MenuItem = _interopRequireDefault(require("../MenuItem")); var _SubMenu = _interopRequireDefault(require("../SubMenu")); function convertItemsToNodes(list) { return (list || []).map((opt, index) => { if (opt && typeof opt === 'object') { const { label, children, key, type, ...restProps } = opt; const mergedKey = key ?? `tmp-${index}`; // MenuItemGroup & SubMenuItem if (children || type === 'group') { if (type === 'group') { // Group return /*#__PURE__*/React.createElement(_rcMenu.ItemGroup, (0, _extends2.default)({ key: mergedKey }, restProps, { title: label }), convertItemsToNodes(children)); } // Sub Menu return /*#__PURE__*/React.createElement(_SubMenu.default, (0, _extends2.default)({ key: mergedKey }, restProps, { title: label }), convertItemsToNodes(children)); } // MenuItem & Divider if (type === 'divider') { return /*#__PURE__*/React.createElement(_MenuDivider.default, (0, _extends2.default)({ key: mergedKey }, restProps)); } return /*#__PURE__*/React.createElement(_MenuItem.default, (0, _extends2.default)({ key: mergedKey }, restProps), label); } return null; }).filter(opt => opt); } // FIXME: Move logic here in v5 /** * We simply convert `items` to ReactNode for reuse origin component logic. But we need move all the * logic from component into this hooks when in v5 */ function useItems(items) { return React.useMemo(() => { if (!items) { return items; } return convertItemsToNodes(items); }, [items]); }