@xo-union/tk-component-header-nav
Version:
97 lines (96 loc) • 3.8 kB
JavaScript
"use strict";
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.TopLevelLink = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _tkComponentIcons = _interopRequireDefault(require("@xo-union/tk-component-icons"));
var _componentBlankButton = _interopRequireDefault(require("@xo-union/component-blank-button"));
var _constantKeyCodes = require("@xo-union/constant-key-codes");
var _tkUiTypography = require("@xo-union/tk-ui-typography");
var _componentStandardElements = require("@xo-union/component-standard-elements");
var _ContextCjs = require("../Context.cjs.js");
const deviceForEventType = {
click: 'mouse',
keydown: 'keyboard'
};
const onReturnOrSpaceKey = callback => event => {
if (event.keyCode === _constantKeyCodes.RETURN || event.keyCode === _constantKeyCodes.SPACE) {
callback(event);
}
};
const TopLevelButton = props => {
const {
classes,
navMenuRefs,
navMenuActions,
navMenuSelectors,
activeProduct,
fetchAppData
} = (0, _ContextCjs.useHeaderNavContext)();
const {
menuID,
children,
...remainingProps
} = props;
const isActive = navMenuSelectors.isMenuActive(menuID) || activeProduct === menuID;
const handleInteraction = event => {
fetchAppData(menuID);
return navMenuSelectors.isMenuActive(menuID) ? navMenuActions.closeMenu() : navMenuActions.openMenu(menuID, {
returnFocusElement: event.currentTarget,
device: deviceForEventType[event.type]
});
};
const menuIDClassName = `${menuID}-top-level-button`;
return /*#__PURE__*/_react.default.createElement(_tkUiTypography.Body1, (0, _extends2.default)({
ref: navMenuRefs.getButtonRef(menuID),
as: _componentBlankButton.default,
className: (0, _classnames.default)(classes['top-level-menu-button'], isActive && classes['is-active'], menuIDClassName in classes && classes[menuIDClassName]),
onKeyDown: onReturnOrSpaceKey(event => {
event.preventDefault();
handleInteraction(event);
}),
onClick: handleInteraction,
"aria-haspopup": "true",
"aria-expanded": navMenuSelectors.isMenuActive(menuID),
"aria-controls": `header-${menuID}-mega-menu-popup`,
type: "button"
}, remainingProps), /*#__PURE__*/_react.default.createElement("span", null, children), /*#__PURE__*/_react.default.createElement(_tkComponentIcons.default, {
className: classes['menu-button-caret'],
size: "md",
name: "caret_right",
"aria-hidden": "true"
}));
};
process.env.NODE_ENV !== "production" ? TopLevelButton.propTypes = {
children: _propTypes.default.node,
menuID: _propTypes.default.string
} : void 0;
const TopLevelLink = _ref => {
let {
href,
children,
...props
} = _ref;
const {
classes
} = (0, _ContextCjs.useHeaderNavContext)();
return /*#__PURE__*/_react.default.createElement(_tkUiTypography.Body1, (0, _extends2.default)({
as: _componentStandardElements.NewWindowAnchor,
href: href,
className: classes['top-level-menu-link'],
"data-trackable": ""
}, props), /*#__PURE__*/_react.default.createElement("span", null, children));
};
exports.TopLevelLink = TopLevelLink;
process.env.NODE_ENV !== "production" ? TopLevelLink.propTypes = {
children: _propTypes.default.node,
href: _propTypes.default.string
} : void 0;
var _default = TopLevelButton;
exports.default = _default;