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