apeman-react-toast
Version:
apeman react package for toast components.
215 lines (172 loc) • 14.4 kB
JavaScript
/**
* 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==