"use strict"; var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _elementType = _interopRequireDefault(require("prop-types-extra/lib/elementType")); var _createChainedFunction = _interopRequireDefault(require("./utils/createChainedFunction")); var propTypes = { href: _propTypes.default.string, onClick: _propTypes.default.func, onKeyDown: _propTypes.default.func, disabled: _propTypes.default.bool, role: _propTypes.default.string, tabIndex: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), /** * this is sort of silly but needed for Button */ componentClass: _elementType.default }; var defaultProps = { componentClass: 'a' }; function isTrivialHref(href) { return !href || href.trim() === '#'; } /** * There are situations due to browser quirks or Bootstrap CSS where * an anchor tag is needed, when semantically a button tag is the * better choice. SafeAnchor ensures that when an anchor is used like a * button its accessible. It also emulates input `disabled` behavior for * links, which is usually desirable for Buttons, NavItems, MenuItems, etc. */ var SafeAnchor = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(SafeAnchor, _React$Component); function SafeAnchor(props, context) { var _this; _this = _React$Component.call(this, props, context) || this; _this.handleClick = _this.handleClick.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleKeyDown = _this.handleKeyDown.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); return _this; } var _proto = SafeAnchor.prototype; _proto.handleClick = function handleClick(event) { var _this$props = this.props, disabled = _this$props.disabled, href = _this$props.href, onClick = _this$props.onClick; if (disabled || isTrivialHref(href)) { event.preventDefault(); } if (disabled) { event.stopPropagation(); return; } if (onClick) { onClick(event); } }; _proto.handleKeyDown = function handleKeyDown(event) { if (event.key === ' ') { event.preventDefault(); this.handleClick(event); } }; _proto.render = function render() { var _this$props2 = this.props, Component = _this$props2.componentClass, disabled = _this$props2.disabled, onKeyDown = _this$props2.onKeyDown, props = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["componentClass", "disabled", "onKeyDown"]); if (isTrivialHref(props.href)) { props.role = props.role || 'button'; // we want to make sure there is a href attribute on the node // otherwise, the cursor incorrectly styled (except with role='button') props.href = props.href || '#'; } if (disabled) { props.tabIndex = -1; props.style = (0, _extends2.default)({ pointerEvents: 'none' }, props.style); } return _react.default.createElement(Component, (0, _extends2.default)({}, props, { onClick: this.handleClick, onKeyDown: (0, _createChainedFunction.default)(this.handleKeyDown, onKeyDown) })); }; return SafeAnchor; }(_react.default.Component); SafeAnchor.propTypes = propTypes; SafeAnchor.defaultProps = defaultProps; var _default = SafeAnchor; exports.default = _default; module.exports = exports["default"];