focus-components-v3
Version:
Focus web components to build applications (based on Material Design)
139 lines (105 loc) • 11.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _dec, _class;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _material = require('../behaviours/material');
var _material2 = _interopRequireDefault(_material);
var _i18next = require('i18next');
var _i18next2 = _interopRequireDefault(_i18next);
var _button = require('../button');
var _button2 = _interopRequireDefault(_button);
var _uniqueId = require('lodash/uniqueId');
var _uniqueId2 = _interopRequireDefault(_uniqueId);
var _map = require('lodash/map');
var _map2 = _interopRequireDefault(_map);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
//TODO : do not render list in DOM when not displayed ?
var Dropdown = (_dec = (0, _material2.default)('dropdown'), _dec(_class = function (_PureComponent) {
_inherits(Dropdown, _PureComponent);
function Dropdown(props) {
_classCallCheck(this, Dropdown);
var _this = _possibleConstructorReturn(this, _PureComponent.call(this, props));
_this._htmlId = (0, _uniqueId2.default)('dropdown-');
_this.state = {
menuVisible: false
};
return _this;
}
Dropdown.prototype._handleAction = function _handleAction(action) {
var _this2 = this;
return function () {
if (_this2.props.operationParam) {
action(_this2.props.operationParam);
} else {
action();
}
};
};
Dropdown.prototype._handleButtonClick = function _handleButtonClick() {
this.setState({ menuVisible: !this.state.menuVisible });
};
Dropdown.prototype.render = function render() {
var _this3 = this;
var menuVisible = this.state.menuVisible;
var _props = this.props,
button = _props.button,
position = _props.position,
operations = _props.operations;
var mdlClasses = 'mdl-menu mdl-menu--' + position.vertical + '-' + position.horizontal + ' mdl-js-menu mdl-js-ripple-effect';
return _react2.default.createElement(
'div',
{ 'data-focus': 'dropdown' },
_react2.default.createElement(_button2.default, _extends({ handleOnClick: this._handleButtonClick.bind(this), id: this._htmlId }, button)),
_react2.default.createElement(
'ul',
{ className: mdlClasses, htmlFor: this._htmlId, ref: 'dropdown' },
(0, _map2.default)(operations, function (operation, idx) {
return _react2.default.createElement(
'li',
{ className: 'mdl-menu__item ' + operation.style, key: idx,
onClick: _this3._handleAction(operation.action) },
_i18next2.default.t(operation.label)
);
})
)
);
};
return Dropdown;
}(_react.PureComponent)) || _class);
;
Dropdown.displayName = 'Dropdown';
Dropdown.defaultProps = {
position: {
vertical: 'bottom',
horizontal: 'left'
},
button: {
icon: 'more_vert',
shape: 'icon'
}
};
Dropdown.propTypes = {
position: _react.PropTypes.shape({
vertical: _react.PropTypes.string.isRequired,
horizontal: _react.PropTypes.string.isRequired
}),
button: _react.PropTypes.shape({
icon: _react.PropTypes.string,
label: _react.PropTypes.string,
shape: _react.PropTypes.string
}),
operations: _react.PropTypes.array.isRequired
};
exports.default = Dropdown;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyLUZSLmpzIl0sIm5hbWVzIjpbIkRyb3Bkb3duIiwicHJvcHMiLCJfaHRtbElkIiwic3RhdGUiLCJtZW51VmlzaWJsZSIsIl9oYW5kbGVBY3Rpb24iLCJhY3Rpb24iLCJvcGVyYXRpb25QYXJhbSIsIl9oYW5kbGVCdXR0b25DbGljayIsInNldFN0YXRlIiwicmVuZGVyIiwiYnV0dG9uIiwicG9zaXRpb24iLCJvcGVyYXRpb25zIiwibWRsQ2xhc3NlcyIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsImJpbmQiLCJvcGVyYXRpb24iLCJpZHgiLCJzdHlsZSIsInQiLCJsYWJlbCIsImRpc3BsYXlOYW1lIiwiZGVmYXVsdFByb3BzIiwiaWNvbiIsInNoYXBlIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsImFycmF5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBRUE7SUFFTUEsUSxXQURMLHdCQUFTLFVBQVQsQztjQUNLQSxROztBQUNGLGFBREVBLFFBQ0YsQ0FBWUMsS0FBWixFQUFtQjtBQUFBLDhCQURqQkQsUUFDaUI7O0FBQUEscURBQ2YsMEJBQU1DLEtBQU4sQ0FEZTs7QUFFZixjQUFLQyxPQUFMLEdBQWUsd0JBQVMsV0FBVCxDQUFmO0FBQ0EsY0FBS0MsS0FBTCxHQUFhO0FBQ1RDLHlCQUFhO0FBREosU0FBYjtBQUhlO0FBTWxCOztBQVBDSixZLFdBU0ZLLGEsMEJBQWNDLE0sRUFBUTtBQUFBOztBQUNsQixlQUFPLFlBQU07QUFDVCxnQkFBSSxPQUFLTCxLQUFMLENBQVdNLGNBQWYsRUFBK0I7QUFDM0JELHVCQUFPLE9BQUtMLEtBQUwsQ0FBV00sY0FBbEI7QUFDSCxhQUZELE1BRU87QUFDSEQ7QUFDSDtBQUNKLFNBTkQ7QUFPSCxLOztBQWpCQ04sWSxXQW1CRlEsa0IsaUNBQXFCO0FBQ2pCLGFBQUtDLFFBQUwsQ0FBYyxFQUFDTCxhQUFhLENBQUMsS0FBS0QsS0FBTCxDQUFXQyxXQUExQixFQUFkO0FBQ0gsSzs7QUFyQkNKLFksV0F1QkZVLE0scUJBQVM7QUFBQTs7QUFBQSxZQUNFTixXQURGLEdBQ2lCLEtBQUtELEtBRHRCLENBQ0VDLFdBREY7QUFBQSxxQkFFa0MsS0FBS0gsS0FGdkM7QUFBQSxZQUVFVSxNQUZGLFVBRUVBLE1BRkY7QUFBQSxZQUVVQyxRQUZWLFVBRVVBLFFBRlY7QUFBQSxZQUVvQkMsVUFGcEIsVUFFb0JBLFVBRnBCOztBQUdMLFlBQU1DLHFDQUFtQ0YsU0FBU0csUUFBNUMsU0FBd0RILFNBQVNJLFVBQWpFLHNDQUFOO0FBQ0EsZUFDSTtBQUFBO0FBQUEsY0FBSyxjQUFXLFVBQWhCO0FBQ0ksdUVBQVEsZUFBZSxLQUFLUixrQkFBTCxDQUF3QlMsSUFBeEIsQ0FBNkIsSUFBN0IsQ0FBdkIsRUFBMkQsSUFBSSxLQUFLZixPQUFwRSxJQUFpRlMsTUFBakYsRUFESjtBQUVJO0FBQUE7QUFBQSxrQkFBSSxXQUFXRyxVQUFmLEVBQTJCLFNBQVMsS0FBS1osT0FBekMsRUFBa0QsS0FBSSxVQUF0RDtBQUNLLG1DQUFJVyxVQUFKLEVBQWdCLFVBQUNLLFNBQUQsRUFBWUMsR0FBWjtBQUFBLDJCQUNiO0FBQUE7QUFBQSwwQkFBSSwrQkFBNkJELFVBQVVFLEtBQTNDLEVBQW9ELEtBQUtELEdBQXpEO0FBQ0kscUNBQVMsT0FBS2QsYUFBTCxDQUFtQmEsVUFBVVosTUFBN0IsQ0FEYjtBQUVLLDBDQUFRZSxDQUFSLENBQVVILFVBQVVJLEtBQXBCO0FBRkwscUJBRGE7QUFBQSxpQkFBaEI7QUFETDtBQUZKLFNBREo7QUFhSCxLOztXQXhDQ3RCLFE7O0FBeUNMOztBQUVEQSxTQUFTdUIsV0FBVCxHQUF1QixVQUF2QjtBQUNBdkIsU0FBU3dCLFlBQVQsR0FBd0I7QUFDcEJaLGNBQVU7QUFDTkcsa0JBQVUsUUFESjtBQUVOQyxvQkFBWTtBQUZOLEtBRFU7QUFLcEJMLFlBQVE7QUFDSmMsY0FBTSxXQURGO0FBRUpDLGVBQU87QUFGSDtBQUxZLENBQXhCO0FBVUExQixTQUFTMkIsU0FBVCxHQUFxQjtBQUNqQmYsY0FBVSxpQkFBVWMsS0FBVixDQUFpQjtBQUN2Qlgsa0JBQVUsaUJBQVVhLE1BQVYsQ0FBaUJDLFVBREo7QUFFdkJiLG9CQUFZLGlCQUFVWSxNQUFWLENBQWlCQztBQUZOLEtBQWpCLENBRE87QUFLakJsQixZQUFRLGlCQUFVZSxLQUFWLENBQWlCO0FBQ3JCRCxjQUFNLGlCQUFVRyxNQURLO0FBRXJCTixlQUFPLGlCQUFVTSxNQUZJO0FBR3JCRixlQUFPLGlCQUFVRTtBQUhJLEtBQWpCLENBTFM7QUFVakJmLGdCQUFZLGlCQUFVaUIsS0FBVixDQUFnQkQ7QUFWWCxDQUFyQjtrQkFZZTdCLFEiLCJmaWxlIjoiZnItRlIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtQcm9wVHlwZXMsIFB1cmVDb21wb25lbnR9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9iZWhhdmlvdXJzL21hdGVyaWFsJztcclxuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XHJcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vYnV0dG9uJztcclxuaW1wb3J0IHVuaXF1ZUlkIGZyb20gJ2xvZGFzaC91bmlxdWVJZCc7XHJcbmltcG9ydCBtYXAgZnJvbSAnbG9kYXNoL21hcCc7XHJcblxyXG4vL1RPRE8gOiBkbyBub3QgcmVuZGVyIGxpc3QgaW4gRE9NIHdoZW4gbm90IGRpc3BsYXllZCA/XHJcbkBNYXRlcmlhbCgnZHJvcGRvd24nKVxyXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIFB1cmVDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5faHRtbElkID0gdW5pcXVlSWQoJ2Ryb3Bkb3duLScpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIG1lbnVWaXNpYmxlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIF9oYW5kbGVBY3Rpb24oYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMub3BlcmF0aW9uUGFyYW0pIHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbih0aGlzLnByb3BzLm9wZXJhdGlvblBhcmFtKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgX2hhbmRsZUJ1dHRvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe21lbnVWaXNpYmxlOiAhdGhpcy5zdGF0ZS5tZW51VmlzaWJsZX0pO1xyXG4gICAgfTtcclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge21lbnVWaXNpYmxlfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgY29uc3Qge2J1dHRvbiwgcG9zaXRpb24sIG9wZXJhdGlvbnN9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBtZGxDbGFzc2VzID0gYG1kbC1tZW51IG1kbC1tZW51LS0ke3Bvc2l0aW9uLnZlcnRpY2FsfS0ke3Bvc2l0aW9uLmhvcml6b250YWx9IG1kbC1qcy1tZW51IG1kbC1qcy1yaXBwbGUtZWZmZWN0YDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtZm9jdXM9J2Ryb3Bkb3duJz5cclxuICAgICAgICAgICAgICAgIDxCdXR0b24gaGFuZGxlT25DbGljaz17dGhpcy5faGFuZGxlQnV0dG9uQ2xpY2suYmluZCh0aGlzKX0gaWQ9e3RoaXMuX2h0bWxJZH0gey4uLmJ1dHRvbn0gLz5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9e21kbENsYXNzZXN9IGh0bWxGb3I9e3RoaXMuX2h0bWxJZH0gcmVmPSdkcm9wZG93bic+XHJcbiAgICAgICAgICAgICAgICAgICAge21hcChvcGVyYXRpb25zLCAob3BlcmF0aW9uLCBpZHgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT17YG1kbC1tZW51X19pdGVtICR7b3BlcmF0aW9uLnN0eWxlfWB9IGtleT17aWR4fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5faGFuZGxlQWN0aW9uKG9wZXJhdGlvbi5hY3Rpb24pfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpMThuZXh0LnQob3BlcmF0aW9uLmxhYmVsKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG59O1xyXG5cclxuRHJvcGRvd24uZGlzcGxheU5hbWUgPSAnRHJvcGRvd24nO1xyXG5Ecm9wZG93bi5kZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcclxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcclxuICAgIH0sXHJcbiAgICBidXR0b246IHtcclxuICAgICAgICBpY29uOiAnbW9yZV92ZXJ0JyxcclxuICAgICAgICBzaGFwZTogJ2ljb24nXHJcbiAgICB9XHJcbn07XHJcbkRyb3Bkb3duLnByb3BUeXBlcyA9IHtcclxuICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMuc2hhcGUgKHtcclxuICAgICAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxyXG4gICAgICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxyXG4gICAgfSksXHJcbiAgICBidXR0b246IFByb3BUeXBlcy5zaGFwZSAoe1xyXG4gICAgICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICAgICAgc2hhcGU6IFByb3BUeXBlcy5zdHJpbmdcclxuICAgIH0pLFxyXG4gICAgb3BlcmF0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWRcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd247XHJcbiJdfQ==
;