UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

216 lines (171 loc) 6.11 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.mapStateToProps = exports.DropdownTrigger = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _getValidProps = _interopRequireDefault(require("@helpscout/react-utils/dist/getValidProps")); var _wedux = require("@helpscout/wedux"); var _Dropdown = require("./Dropdown.actions"); var _DropdownCss = require("./Dropdown.css.js"); var _Keys = _interopRequireDefault(require("../../constants/Keys")); var _classnames = _interopRequireDefault(require("classnames")); var _Dropdown2 = require("./Dropdown.utils"); var _jsxRuntime = require("react/jsx-runtime"); // Deprecated /* istanbul ignore file */ function noop() {} var DropdownTrigger = /*#__PURE__*/function (_React$PureComponent) { (0, _inheritsLoose2.default)(DropdownTrigger, _React$PureComponent); function DropdownTrigger() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this; _this.state = { isHovered: false }; _this.handleOnClick = function (event) { _this.props.onClick(event); _this.props.toggleOpen(); }; _this.handleOnKeyDown = function (event) { switch (event.keyCode) { case _Keys.default.DOWN_ARROW: _this.openDropdown(event); break; case _Keys.default.ENTER: _this.openDropdown(event); break; case _Keys.default.TAB: if (event.shiftKey) { _this.closeDropdown(); } break; default: break; } _this.props.onKeyDown(event); }; return _this; } var _proto = DropdownTrigger.prototype; _proto.openDropdown = function openDropdown(event) { var _this$props = this.props, isOpen = _this$props.isOpen, openDropdown = _this$props.openDropdown; if (!isOpen) { event.preventDefault(); return openDropdown(); } }; _proto.closeDropdown = function closeDropdown() { var _this$props2 = this.props, isOpen = _this$props2.isOpen, closeDropdown = _this$props2.closeDropdown; if (isOpen) { return closeDropdown(); } }; _proto.renderChildren = function renderChildren() { var children = this.props.children; var isHovered = this.state.isHovered; var renderedChildren = (0, _Dropdown2.renderRenderPropComponent)(children, { isHovered: isHovered }); return renderedChildren ? renderedChildren : children; }; _proto.render = function render() { var _this2 = this; var _this$props3 = this.props, className = _this$props3.className, disabled = _this$props3.disabled, onBlur = _this$props3.onBlur, onFocus = _this$props3.onFocus, triggerRef = _this$props3.triggerRef, isOpen = _this$props3.isOpen, rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props3, ["className", "disabled", "onBlur", "onFocus", "triggerRef", "isOpen"]); var componentClassName = (0, _classnames.default)(className, isOpen && 'is-open', disabled && 'is-disabled', 'c-DropdownTrigger'); return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DropdownCss.TriggerUI, (0, _extends2.default)({ role: "button" }, (0, _getValidProps.default)(rest), { "aria-haspopup": "listbox", "aria-expanded": isOpen, className: componentClassName, disabled: disabled, ref: triggerRef, onBlur: onBlur, onFocus: onFocus, onClick: this.handleOnClick, onKeyDown: this.handleOnKeyDown, onMouseOver: function onMouseOver() { return _this2.setState({ isHovered: true }); }, onMouseLeave: function onMouseLeave() { return _this2.setState({ isHovered: false }); }, children: this.renderChildren() })); }; return DropdownTrigger; }(_react.default.PureComponent); exports.DropdownTrigger = DropdownTrigger; DropdownTrigger.propTypes = { className: _propTypes.default.string, closeDropdown: _propTypes.default.func, /** Data attr for Cypress tests. */ 'data-cy': _propTypes.default.string, disabled: _propTypes.default.bool, triggerRef: _propTypes.default.func, id: _propTypes.default.string, isOpen: _propTypes.default.bool, onBlur: _propTypes.default.func, onFocus: _propTypes.default.func, onKeyDown: _propTypes.default.func, onClick: _propTypes.default.func, openDropdown: _propTypes.default.func, style: _propTypes.default.object, toggleOpen: _propTypes.default.func }; DropdownTrigger.defaultProps = { 'data-cy': 'DropdownTrigger', disabled: false, triggerRef: noop, isOpen: false, onBlur: noop, onFocus: noop, onKeyDown: noop, onClick: noop, openDropdown: noop, closeDropdown: noop, style: {}, toggleOpen: noop }; var mapStateToProps = function mapStateToProps(state) { var isOpen = state.isOpen, triggerId = state.triggerId, triggerProps = state.triggerProps, triggerStyle = state.triggerStyle; return (0, _extends2.default)({}, triggerProps, { isOpen: isOpen, id: triggerId, style: triggerStyle }); }; exports.mapStateToProps = mapStateToProps; var ConnectedTrigger = (0, _wedux.connect)(mapStateToProps, // mapDispatchToProps { toggleOpen: _Dropdown.toggleOpen, openDropdown: _Dropdown.openDropdown, closeDropdown: _Dropdown.closeDropdown })(DropdownTrigger); var _default = ConnectedTrigger; exports.default = _default;