UNPKG

backpack-ui

Version:
204 lines (156 loc) 5.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _keys = require("babel-runtime/core-js/object/keys"); var _keys2 = _interopRequireDefault(_keys); var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require("babel-runtime/helpers/inherits"); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _propTypes = require("prop-types"); var _propTypes2 = _interopRequireDefault(_propTypes); var _radium = require("radium"); var _radium2 = _interopRequireDefault(_radium); var _styles = require("./styles"); var _styles2 = _interopRequireDefault(_styles); var _iconButton = require("../iconButton"); var _iconButton2 = _interopRequireDefault(_iconButton); var _flyout = require("../flyout"); var _flyout2 = _interopRequireDefault(_flyout); var _item = require("./item"); var _item2 = _interopRequireDefault(_item); var _clickOutside = require("../../hoc/clickOutside"); var _clickOutside2 = _interopRequireDefault(_clickOutside); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var ShareMenu = function (_React$Component) { (0, _inherits3.default)(ShareMenu, _React$Component); function ShareMenu() { (0, _classCallCheck3.default)(this, ShareMenu); var _this = (0, _possibleConstructorReturn3.default)(this, (ShareMenu.__proto__ || (0, _getPrototypeOf2.default)(ShareMenu)).call(this)); _this.state = { optionsHidden: true }; _this.toggleOptions = _this.toggleOptions.bind(_this); _this.handleClickOutside = _this.handleClickOutside.bind(_this); _this.handleKeydown = _this.handleKeydown.bind(_this); return _this; } (0, _createClass3.default)(ShareMenu, [{ key: "componentDidMount", value: function componentDidMount() { document.addEventListener("keydown", this.handleKeydown); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { document.removeEventListener("keydown", this.handleKeydown); } }, { key: "toggleOptions", value: function toggleOptions() { this.setState({ optionsHidden: !this.state.optionsHidden }); } }, { key: "handleClickOutside", value: function handleClickOutside() { this.setState({ optionsHidden: true }); } }, { key: "handleKeydown", value: function handleKeydown(event) { if (event.keyCode === 27 && !this.state.optionsHidden) { this.toggleOptions(); } } }, { key: "render", value: function render() { var _props = this.props, innerRef = _props.innerRef, networks = _props.networks, onClick = _props.onClick, menuPosition = _props.menuPosition; var style = { container: [_styles2.default.container.base], options: [_styles2.default.options.base] }; var position = { up: "below", down: "above", left: "right", right: "left" }; var visibility = { true: "hidden", false: "visible" }; var flyoutArrow = menuPosition === "bottom" ? "up" : "right"; style.options.push(_styles2.default.options.position[position[flyoutArrow]]); style.options.push(_styles2.default.options.state[visibility[this.state.optionsHidden]].base, _styles2.default.options.state[visibility[this.state.optionsHidden]].position[position[flyoutArrow]]); return _react2.default.createElement( "div", { className: "ShareMenu", style: style.container, ref: innerRef }, _react2.default.createElement(_iconButton2.default, { className: "ShareMenu-button", iconName: "share", label: "Share this article on Twitter, Facebook, or email", owns: "share-menu-options", onClick: this.toggleOptions }), _react2.default.createElement( "div", { className: "ShareMenu-options", id: "share-menu-options", style: style.options, "aria-hidden": this.state.optionsHidden }, _react2.default.createElement( _flyout2.default, { arrow: flyoutArrow, fill: true }, (0, _keys2.default)(networks).map(function (network, index) { return _react2.default.createElement(_item2.default, { network: networks[network].name, href: networks[network].href, label: networks[network].label, onClick: onClick, key: index }); }) ) ) ); } }]); return ShareMenu; }(_react2.default.Component); ShareMenu.propTypes = { innerRef: _propTypes2.default.func.isRequired, networks: _propTypes2.default.objectOf(_propTypes2.default.object), onClick: _propTypes2.default.func, menuPosition: _propTypes2.default.oneOf(["", "bottom", "left"]) }; ShareMenu.defaultProps = { networks: null, onClick: null, menuPosition: "bottom" }; ShareMenu.styles = _styles2.default; exports.default = (0, _clickOutside2.default)((0, _radium2.default)(ShareMenu));