backpack-ui
Version:
Lonely Planet's Components
263 lines (208 loc) • 7.46 kB
JavaScript
"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));