UNPKG

backpack-ui

Version:
263 lines (208 loc) 7.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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 _classnames = require("classnames"); var _classnames2 = _interopRequireDefault(_classnames); var _colors = require("../../styles/colors"); var _colors2 = _interopRequireDefault(_colors); var _timing = require("../../styles/timing"); var _timing2 = _interopRequireDefault(_timing); var _zIndex = require("../../styles/zIndex"); var _zIndex2 = _interopRequireDefault(_zIndex); var _icon = require("../../utils/icon"); var _icon2 = _interopRequireDefault(_icon); var _propTypes3 = require("../../utils/propTypes"); var _propTypes4 = _interopRequireDefault(_propTypes3); var _flyout = require("../flyout"); var _flyout2 = _interopRequireDefault(_flyout); var _iconButton = require("../iconButton"); var _iconButton2 = _interopRequireDefault(_iconButton); var _iconRevealButton = require("../iconRevealButton"); var _iconRevealButton2 = _interopRequireDefault(_iconRevealButton); var _clickOutside = require("../../hoc/clickOutside"); var _clickOutside2 = _interopRequireDefault(_clickOutside); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var styles = { container: { display: "inline-block", position: "relative" }, options: { default: { backfaceVisibility: "hidden", color: _colors2.default.textPrimary, display: "inline-block", opacity: 0, position: "absolute", right: 0, top: "38px", transform: "translate(0, 8px)", transition: "opacity " + _timing2.default.default + ",\n transform " + _timing2.default.default + ",\n visibility " + _timing2.default.default, visibility: "hidden", width: "160px", zIndex: _zIndex2.default.default }, visible: { opacity: 1, pointerEvents: "all", transform: "translate(0, 0)", visibility: "visible" } }, flyout: { padding: "12px 16px 10px" } }; var BookmarkListMenu = function (_React$Component) { (0, _inherits3.default)(BookmarkListMenu, _React$Component); function BookmarkListMenu() { (0, _classCallCheck3.default)(this, BookmarkListMenu); var _this = (0, _possibleConstructorReturn3.default)(this, (BookmarkListMenu.__proto__ || (0, _getPrototypeOf2.default)(BookmarkListMenu)).call(this)); _this.state = { menuVisible: false }; _this.toggleOptions = _this.toggleOptions.bind(_this); _this.handleClickOutside = _this.handleClickOutside.bind(_this); _this.handleKeydown = _this.handleKeydown.bind(_this); return _this; } (0, _createClass3.default)(BookmarkListMenu, [{ 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({ menuVisible: !this.state.menuVisible }); } }, { key: "handleClickOutside", value: function handleClickOutside() { this.setState({ menuVisible: false }); } }, { key: "handleKeydown", value: function handleKeydown(event) { if (event.keyCode === 27 && this.state.menuVisible) { this.toggleOptions(); } } }, { key: "render", value: function render() { var _this2 = this; var _props = this.props, innerRef = _props.innerRef, children = _props.children, iconName = _props.iconName, iconLabel = _props.iconLabel, id = _props.id, className = _props.className, reveal = _props.reveal, style = _props.style, button = _props.button; var optionsId = "bookmark-list-menu-options"; return _react2.default.createElement( "div", { id: id, className: (0, _classnames2.default)("BookmarkListMenu", className), style: [styles.container, style], ref: innerRef }, !button && reveal && _react2.default.createElement(_iconRevealButton2.default, { id: id + "-IconRevealButton", icon: (0, _icon2.default)(iconName), label: iconLabel, onClick: this.toggleOptions }), !button && !reveal && _react2.default.createElement(_iconButton2.default, { onClick: this.toggleOptions, iconName: iconName, label: iconLabel, size: 40, owns: optionsId, color: _colors2.default.textPrimary, backgroundColor: _colors2.default.bgPrimary }), button && !reveal && _react2.default.cloneElement(button, { onClick: function onClick() { _this2.toggleOptions(); } }), _react2.default.createElement( "div", { className: "BookmarkListMenu-options", id: optionsId, "aria-hidden": !this.state.menuVisible, style: [styles.options.default, this.state.menuVisible ? styles.options.visible : {}] }, _react2.default.createElement( _flyout2.default, { arrow: "up", arrowPosition: "right", style: styles.flyout, fill: true }, _react2.default.Children.map(children, function (child) { return _react2.default.createElement( "div", { style: styles.item, key: child.props.children }, child ); }) ) ) ); } }]); return BookmarkListMenu; }(_react2.default.Component); BookmarkListMenu.propTypes = { innerRef: _propTypes2.default.func.isRequired, children: _propTypes2.default.element.isRequired, iconName: _propTypes2.default.oneOf(["Ellipsis", "Share"]).isRequired, iconLabel: _propTypes2.default.string.isRequired, id: _propTypes2.default.string, className: _propTypes2.default.string, reveal: _propTypes2.default.bool, style: _propTypes4.default.style, button: _propTypes2.default.element }; BookmarkListMenu.defaultProps = { id: null, className: null, reveal: false, style: null, button: null }; exports.default = (0, _clickOutside2.default)((0, _radium2.default)(BookmarkListMenu));