@difizen/mana-react
Version:
93 lines (92 loc) • 4.09 kB
JavaScript
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
import classnames from 'classnames';
import * as React from 'react';
import { useEffect } from 'react';
import * as ReactDom from 'react-dom';
import { MenubarContext } from "./context";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
function stopPropagation(e) {
e.stopPropagation();
}
export var MenubarItem = function MenubarItem(props) {
var context = React.useContext(MenubarContext);
var menubarItemRef = React.useRef(null);
var text = props.text,
children = props.children,
hidden = props.hidden;
var prefixCls = context.prefixCls,
menubarActived = context.menubarActived;
var active = context.activeElementRef && context.activeElementRef.current && context.activeElementRef.current === menubarItemRef.current;
var currentMenuActived = menubarActived && active;
var baseCls = "".concat(prefixCls, "-item");
var popupClassName = "".concat(context.prefixCls, "-item-dropdown");
useEffect(function () {
var element = menubarItemRef.current;
if (element) {
element.addEventListener('mousedown', stopPropagation);
}
return function () {
if (element) {
element.removeEventListener('mousedown', stopPropagation);
}
};
}, []);
var doActive = function doActive() {
context.setActiveElementRef(menubarItemRef);
};
var doDeactive = function doDeactive() {
context.setActiveElementRef();
};
var onToggleActive = function onToggleActive(e) {
e.stopPropagation();
if (!currentMenuActived) {
context.activeMenubar();
doActive();
}
};
var locatable = !!menubarItemRef.current;
var getPortalItemStyle = function getPortalItemStyle() {
var node = menubarItemRef.current;
if (!node) {
return {};
}
var offsetHeight = node.offsetHeight;
var _node$getBoundingClie = node.getBoundingClientRect(),
top = _node$getBoundingClie.top,
left = _node$getBoundingClie.left;
return {
top: top + offsetHeight,
left: left
};
};
return /*#__PURE__*/_jsxs("div", {
ref: menubarItemRef,
className: classnames(baseCls, _defineProperty(_defineProperty(_defineProperty({}, "".concat(baseCls, "-hidden"), hidden), "".concat(baseCls, "-hover"), menubarActived), "".concat(baseCls, "-active"), currentMenuActived)),
onMouseEnter: doActive,
onClick: onToggleActive,
children: [/*#__PURE__*/_jsx("div", {
className: classnames("".concat(baseCls, "-text"), _defineProperty({}, "".concat(baseCls, "-text-active"), currentMenuActived))
// onClick={onClick}
,
children: text
}), currentMenuActived && locatable && /*#__PURE__*/ReactDom.createPortal( /*#__PURE__*/_jsx("div", {
style: {
position: 'absolute',
top: 0,
left: 0,
width: '100%'
},
children: /*#__PURE__*/_jsx("div", {
children: /*#__PURE__*/_jsx("div", {
style: getPortalItemStyle(),
className: popupClassName,
children: children
})
})
}), document.body)]
});
};
// eslint-disable-next-line @typescript-eslint/no-redeclare