UNPKG

apeman-react-toast

Version:
215 lines (172 loc) 14.4 kB
/** * Toast group. * @class ApToastGroup */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _asobj = require('asobj'); var _ap_toast = require('./ap_toast'); var _ap_toast2 = _interopRequireDefault(_ap_toast); var _ap_info_toast = require('./ap_info_toast'); var _ap_info_toast2 = _interopRequireDefault(_ap_info_toast); var _ap_warn_toast = require('./ap_warn_toast'); var _ap_warn_toast2 = _interopRequireDefault(_ap_warn_toast); var _ap_error_toast = require('./ap_error_toast'); var _ap_error_toast2 = _interopRequireDefault(_ap_error_toast); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var levels = ['default', 'info', 'error', 'warn']; /** @lends ApToastGroup */ var ApToastGroup = _react2.default.createClass({ displayName: 'ApToastGroup', // -------------------- // Specs // -------------------- propTypes: { /** Default messages */ default: _react.PropTypes.arrayOf(_react.PropTypes.string), /** Info messages */ info: _react.PropTypes.arrayOf(_react.PropTypes.string), /** Error messages */ error: _react.PropTypes.arrayOf(_react.PropTypes.string), /** Warn messages */ warn: _react.PropTypes.arrayOf(_react.PropTypes.string), /** Dismiss message */ dismiss: _react.PropTypes.func }, mixins: [], statics: { levels: levels }, getInitialState: function getInitialState() { return {}; }, getDefaultProps: function getDefaultProps() { return { info: [], error: [], warn: [] }; }, render: function render() { var s = this; var state = s.state; var props = s.props; var default_ = props.default; var className = props.className; var info = props.info; var error = props.error; var warn = props.warn; var _dismiss = props.dismiss; return _react2.default.createElement( 'div', { className: (0, _classnames2.default)('ap-toast-group', {}, className) }, _react2.default.createElement(_ap_toast2.default, { messages: default_, dismiss: function dismiss(message) { return _dismiss(message, 'default'); } }), _react2.default.createElement(_ap_info_toast2.default, { messages: info, dismiss: function dismiss(message) { return _dismiss(message, 'info'); } }), _react2.default.createElement(_ap_warn_toast2.default, { messages: warn, dismiss: function dismiss(message) { return _dismiss(message, 'warn'); } }), _react2.default.createElement(_ap_error_toast2.default, { messages: error, dismiss: function dismiss(message) { return _dismiss(message, 'error'); } }), props.children ); }, // -------------------- // Lifecycle // -------------------- componentDidMount: function componentDidMount() { var s = this; var props = s.props; }, componentWillReceiveProps: function componentWillReceiveProps(nextProps) { var s = this; var props = s.props; }, componentWillUnmount: function componentWillUnmount() { var s = this; var props = s.props; }, shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) { var s = this; var props = s.props; var state = s.state; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = levels[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var level = _step.value; var messageChanged = (0, _asobj.deepEqual)(props[level], nextProps[level]); if (messageChanged) { return true; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return !(0, _asobj.shallowEqual)(props, nextProps) || (0, _asobj.shallowEqual)(state, nextState); }, // -------------------- // Custom // -------------------- handleDismiss: function handleDismiss(e) { var s = this; var state = s.state; var name = e.name; var dismissed = e.dismissed; if (state[name] === dismissed) { s.setState({ name: null }); } }, /** * Bind toaster events. * @param toaster */ bindToaster: function bindToaster(toaster) { var s = this; toaster.addListener('toast', s.handleToast); }, /** * Unbind toaster events. * @param toaster */ unbindToaster: function unbindToaster(toaster) { var s = this; toaster.removeListener('toast', s.handleToast); }, /** * Handle toaster events. * @param data */ handleToast: function handleToast(data) { var s = this; var state = { _date: new Date() }; Toaster.levels.forEach(function (level) { state[level] = data.level === level ? data.message : null; }); s.setState(state); } }); exports.default = ApToastGroup; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX3RvYXN0X2dyb3VwLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFLQTs7Ozs7O0FBRUE7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFJLFNBQVMsQ0FDWCxTQURXLEVBQ0EsTUFEQSxFQUNRLE9BRFIsRUFDaUIsTUFEakIsQ0FBYjs7QUFJQTtBQUNBLElBQU0sZUFBZSxnQkFBTSxXQUFOLENBQWtCO0FBQUE7OztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsYUFBVztBQUNUO0FBQ0EsYUFBUyxpQkFBTSxPQUFOLENBQWMsaUJBQU0sTUFBcEIsQ0FGQTtBQUdUO0FBQ0EsVUFBTSxpQkFBTSxPQUFOLENBQWMsaUJBQU0sTUFBcEIsQ0FKRztBQUtUO0FBQ0EsV0FBTyxpQkFBTSxPQUFOLENBQWMsaUJBQU0sTUFBcEIsQ0FORTtBQU9UO0FBQ0EsVUFBTSxpQkFBTSxPQUFOLENBQWMsaUJBQU0sTUFBcEIsQ0FSRztBQVNUO0FBQ0EsYUFBUyxpQkFBTTtBQVZOLEdBTjBCOztBQW1CckMsVUFBUSxFQW5CNkI7O0FBcUJyQyxXQUFTO0FBQ1A7QUFETyxHQXJCNEI7O0FBeUJyQyxpQkF6QnFDLDZCQXlCbEI7QUFDakIsV0FBTyxFQUFQO0FBQ0QsR0EzQm9DO0FBNkJyQyxpQkE3QnFDLDZCQTZCbEI7QUFDakIsV0FBTztBQUNMLFlBQU0sRUFERDtBQUVMLGFBQU8sRUFGRjtBQUdMLFlBQU07QUFIRCxLQUFQO0FBS0QsR0FuQ29DO0FBcUNyQyxRQXJDcUMsb0JBcUMzQjtBQUNSLFFBQU0sSUFBSSxJQUFWO0FBRFEsUUFFRixLQUZFLEdBRWUsQ0FGZixDQUVGLEtBRkU7QUFBQSxRQUVLLEtBRkwsR0FFZSxDQUZmLENBRUssS0FGTDtBQUFBLFFBSUcsUUFKSCxHQU1KLEtBTkksQ0FJTixPQUpNO0FBQUEsUUFLTixTQUxNLEdBTUosS0FOSSxDQUtOLFNBTE07QUFBQSxRQUtLLElBTEwsR0FN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QW9CLE9BQXBCLEVBQTZCLEVBQUUsV0FBL0I7QUFDRCxHQTNHb0M7OztBQTZHckM7Ozs7QUFJQSxlQWpIcUMseUJBaUh0QixPQWpIc0IsRUFpSGI7QUFDdEIsUUFBTSxJQUFJLElBQVY7QUFDQSxZQUFRLGNBQVIsQ0FBdUIsT0FBdkIsRUFBZ0MsRUFBRSxXQUFsQztBQUNELEdBcEhvQzs7O0FBc0hyQzs7OztBQUlBLGFBMUhxQyx1QkEwSHhCLElBMUh3QixFQTBIbEI7QUFDakIsUUFBTSxJQUFJLElBQVY7QUFDQSxRQUFJLFFBQVEsRUFBRSxPQUFPLElBQUksSUFBSixFQUFULEVBQVo7QUFDQSxZQUFRLE1BQVIsQ0FBZSxPQUFmLENBQXVCLFVBQUMsS0FBRCxFQUFXO0FBQ2hDLFlBQU8sS0FBUCxJQUFpQixLQUFLLEtBQUwsS0FBZSxLQUFmLEdBQXVCLEtBQUssT0FBNUIsR0FBc0MsSUFBdkQ7QUFDRCxLQUZEO0FBR0EsTUFBRSxRQUFGLENBQVcsS0FBWDtBQUNEO0FBaklvQyxDQUFsQixDQUFyQjs7a0JBb0llLFkiLCJmaWxlIjoiYXBfdG9hc3RfZ3JvdXAuanN4Iiwic291cmNlUm9vdCI6Ii9Vc2Vycy9va3VuaXNoaW5pc2hpL1Byb2plY3RzL2FwZW1hbi1wcm9qZWN0cy9hcGVtYW4tcmVhY3QtdG9hc3QvY2kvLi4vbGliIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUb2FzdCBncm91cC5cbiAqIEBjbGFzcyBBcFRvYXN0R3JvdXBcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7c2hhbGxvd0VxdWFsLCBkZWVwRXF1YWx9IGZyb20gJ2Fzb2JqJ1xuaW1wb3J0IEFwVG9hc3QgZnJvbSAnLi9hcF90b2FzdCdcbmltcG9ydCBBcEluZm9Ub2FzdCBmcm9tICcuL2FwX2luZm9fdG9hc3QnXG5pbXBvcnQgQXBXYXJuVG9hc3QgZnJvbSAnLi9hcF93YXJuX3RvYXN0J1xuaW1wb3J0IEFwRXJyb3JUb2FzdCBmcm9tICcuL2FwX2Vycm9yX3RvYXN0J1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcblxubGV0IGxldmVscyA9IFtcbiAgJ2RlZmF1bHQnLCAnaW5mbycsICdlcnJvcicsICd3YXJuJ1xuXVxuXG4vKiogQGxlbmRzIEFwVG9hc3RHcm91cCAqL1xuY29uc3QgQXBUb2FzdEdyb3VwID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNwZWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgLyoqIERlZmF1bHQgbWVzc2FnZXMgKi9cbiAgICBkZWZhdWx0OiB0eXBlcy5hcnJheU9mKHR5cGVzLnN0cmluZyksXG4gICAgLyoqIEluZm8gbWVzc2FnZXMgKi9cbiAgICBpbmZvOiB0eXBlcy5hcnJheU9mKHR5cGVzLnN0cmluZyksXG4gICAgLyoqIEVycm9yIG1lc3NhZ2VzICovXG4gICAgZXJyb3I6IHR5cGVzLmFycmF5T2YodHlwZXMuc3RyaW5nKSxcbiAgICAvKiogV2FybiBtZXNzYWdlcyAqL1xuICAgIHdhcm46IHR5cGVzLmFycmF5T2YodHlwZXMuc3RyaW5nKSxcbiAgICAvKiogRGlzbWlzcyBtZXNzYWdlICovXG4gICAgZGlzbWlzczogdHlwZXMuZnVuY1xuICB9LFxuXG4gIG1peGluczogW10sXG5cbiAgc3RhdGljczoge1xuICAgIGxldmVsc1xuICB9LFxuXG4gIGdldEluaXRpYWxTdGF0ZSAoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH0sXG5cbiAgZ2V0RGVmYXVsdFByb3BzICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5mbzogW10sXG4gICAgICBlcnJvcjogW10sXG4gICAgICB3YXJuOiBbXVxuICAgIH1cbiAgfSxcblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgc3RhdGUsIHByb3BzIH0gPSBzXG4gICAgbGV0IHtcbiAgICAgIGRlZmF1bHQ6IGRlZmF1bHRfLFxuICAgICAgY2xhc3NOYW1lLCBpbmZvLCBlcnJvciwgd2FybiwgZGlzbWlzc1xuICAgIH0gPSBwcm9wc1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsgY2xhc3NuYW1lcygnYXAtdG9hc3QtZ3JvdXAnLCB7fSwgY2xhc3NOYW1lKSB9PlxuICAgICAgICA8QXBUb2FzdCBtZXNzYWdlcz17IGRlZmF1bHRfIH0gZGlzbWlzcz17IChtZXNzYWdlKSA9PiBkaXNtaXNzKG1lc3NhZ2UsICdkZWZhdWx0JykgfS8+XG4gICAgICAgIDxBcEluZm9Ub2FzdCBtZXNzYWdlcz17IGluZm8gfSBkaXNtaXNzPXsgKG1lc3NhZ2UpID0+IGRpc21pc3MobWVzc2FnZSwgJ2luZm8nKSB9Lz5cbiAgICAgICAgPEFwV2FyblRvYXN0IG1lc3NhZ2VzPXsgd2FybiB9IGRpc21pc3M9eyAobWVzc2FnZSkgPT4gZGlzbWlzcyhtZXNzYWdlLCAnd2FybicpIH0vPlxuICAgICAgICA8QXBFcnJvclRvYXN0IG1lc3NhZ2VzPXsgZXJyb3IgfSBkaXNtaXNzPXsgKG1lc3NhZ2UpID0+IGRpc21pc3MobWVzc2FnZSwgJ2Vycm9yJykgfS8+XG4gICAgICAgIHsgcHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIExpZmVjeWNsZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAobmV4dFByb3BzKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBwcm9wcyB9ID0gc1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG4gIH0sXG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlIChuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgcHJvcHMsIHN0YXRlIH0gPSBzXG4gICAgZm9yIChsZXQgbGV2ZWwgb2YgbGV2ZWxzKSB7XG4gICAgICBsZXQgbWVzc2FnZUNoYW5nZWQgPSBkZWVwRXF1YWwocHJvcHNbIGxldmVsIF0sIG5leHRQcm9wc1sgbGV2ZWwgXSlcbiAgICAgIGlmIChtZXNzYWdlQ2hhbmdlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChwcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RXF1YWwoc3RhdGUsIG5leHRTdGF0ZSlcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBDdXN0b21cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBoYW5kbGVEaXNtaXNzIChlKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQgeyBzdGF0ZSB9ID0gc1xuICAgIGxldCB7IG5hbWUsIGRpc21pc3NlZCB9ID0gZVxuICAgIGlmIChzdGF0ZVsgbmFtZSBdID09PSBkaXNtaXNzZWQpIHtcbiAgICAgIHMuc2V0U3RhdGUoeyBuYW1lOiBudWxsIH0pXG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBCaW5kIHRvYXN0ZXIgZXZlbnRzLlxuICAgKiBAcGFyYW0gdG9hc3RlclxuICAgKi9cbiAgYmluZFRvYXN0ZXIgKHRvYXN0ZXIpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIHRvYXN0ZXIuYWRkTGlzdGVuZXIoJ3RvYXN0Jywgcy5oYW5kbGVUb2FzdClcbiAgfSxcblxuICAvKipcbiAgICogVW5iaW5kIHRvYXN0ZXIgZXZlbnRzLlxuICAgKiBAcGFyYW0gdG9hc3RlclxuICAgKi9cbiAgdW5iaW5kVG9hc3RlciAodG9hc3Rlcikge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgdG9hc3Rlci5yZW1vdmVMaXN0ZW5lcigndG9hc3QnLCBzLmhhbmRsZVRvYXN0KVxuICB9LFxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdG9hc3RlciBldmVudHMuXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBoYW5kbGVUb2FzdCAoZGF0YSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHN0YXRlID0geyBfZGF0ZTogbmV3IERhdGUoKSB9XG4gICAgVG9hc3Rlci5sZXZlbHMuZm9yRWFjaCgobGV2ZWwpID0+IHtcbiAgICAgIHN0YXRlWyBsZXZlbCBdID0gZGF0YS5sZXZlbCA9PT0gbGV2ZWwgPyBkYXRhLm1lc3NhZ2UgOiBudWxsXG4gICAgfSlcbiAgICBzLnNldFN0YXRlKHN0YXRlKVxuICB9XG59KVxuXG5leHBvcnQgZGVmYXVsdCBBcFRvYXN0R3JvdXBcbiJdfQ==