UNPKG

terra-consumer-nav

Version:

A responsive container that neatly displays logo, quicklinks, navlinks and profile.

153 lines (118 loc) 4.47 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _bind = require('classnames/bind'); var _bind2 = _interopRequireDefault(_bind); var _NavItem = require('./NavItem.scss'); var _NavItem2 = _interopRequireDefault(_NavItem); var _NavPropShapes = require('../../NavPropShapes'); var _NavPropShapes2 = _interopRequireDefault(_NavPropShapes); var _NavToggler = require('../nav-toggler/NavToggler'); var _NavToggler2 = _interopRequireDefault(_NavToggler); var _SafeHtml = require('../safe-html/SafeHtml'); var _SafeHtml2 = _interopRequireDefault(_SafeHtml); var _SmartLink = require('../smart-link/SmartLink'); var _SmartLink2 = _interopRequireDefault(_SmartLink); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var cx = _bind2.default.bind(_NavItem2.default); var propTypes = _extends({}, _NavPropShapes2.default, { /** * The id of the toggle component to be toggled. */ toggleId: _propTypes2.default.number, /** * Function callback when the toggle component is clicked. */ handleToggle: _propTypes2.default.func, /** * Whether or not the content should be toggled open or not. */ isOpen: _propTypes2.default.bool, /** * Function to be applied to the generated link. */ handleClick: _propTypes2.default.func, /** * Items to be displayed within the toggler. */ children: _propTypes2.default.node }); var defaultProps = { // eslint-disable-next-line react/default-props-match-prop-types isActive: false, // Optional from navItemShape handleToggle: function handleToggle() {} }; var NavItem = function NavItem(_ref) { var url = _ref.url, text = _ref.text, icon = _ref.icon, target = _ref.target, isActive = _ref.isActive, badgeValue = _ref.badgeValue, toggleId = _ref.toggleId, _handleToggle = _ref.handleToggle, isOpen = _ref.isOpen, isExternal = _ref.isExternal, handleClick = _ref.handleClick, children = _ref.children, customProps = _objectWithoutProperties(_ref, ['url', 'text', 'icon', 'target', 'isActive', 'badgeValue', 'toggleId', 'handleToggle', 'isOpen', 'isExternal', 'handleClick', 'children']); var activeClass = cx('active'); var badgeString = '' + badgeValue; var itemLabel = _react2.default.createElement( 'div', null, _react2.default.createElement(_SafeHtml2.default, { text: text }), badgeValue !== undefined && badgeValue !== null && badgeString.trim() && _react2.default.createElement(_SafeHtml2.default, { className: cx('badge'), text: badgeString }) ); var itemText = _react2.default.createElement( 'div', { className: cx('item') }, icon && _react2.default.createElement( 'div', { className: cx('icon') }, icon ), _react2.default.createElement( 'div', { className: cx('label') }, itemLabel ) ); return children && children.length > 0 ? _react2.default.createElement( _NavToggler2.default, _extends({}, customProps, { header: itemText, handleToggle: function handleToggle(open) { return _handleToggle(toggleId, open); }, isOpen: isOpen, className: cx('nested', customProps.className) }), children ) : _react2.default.createElement( 'div', { className: isActive ? activeClass : '' }, _react2.default.createElement( _SmartLink2.default, _extends({}, customProps, { url: url, target: target, isExternal: isExternal, activeClass: activeClass, handleClick: handleClick, className: cx('link', customProps.className) }), itemText ) ); }; NavItem.propTypes = propTypes; NavItem.defaultProps = defaultProps; exports.default = NavItem;