react-notification
Version:
Snackbar notifications for React
104 lines (80 loc) • 3.67 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; }; /* linting temp disabled while working on updates */
/* eslint-disable */
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _stackedNotification = require('./stackedNotification');
var _stackedNotification2 = _interopRequireDefault(_stackedNotification);
var _defaultPropTypes = require('./defaultPropTypes');
var _defaultPropTypes2 = _interopRequireDefault(_defaultPropTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function defaultBarStyleFactory(index, style) {
return _extends({}, style, { bottom: 2 + index * 4 + 'rem' });
}
function defaultActionStyleFactory(index, style) {
return _extends({}, style, {});
}
/**
* The notification list does not have any state, so use a
* pure function here. It just needs to return the stacked array
* of notification components.
*/
var NotificationStack = function NotificationStack(props) {
return _react2.default.createElement(
'div',
{ className: 'notification-list' },
props.notifications.map(function (notification, index) {
var isLast = index === 0 && props.notifications.length === 1;
var dismissNow = isLast || !props.dismissInOrder;
// Handle styles
var barStyle = props.barStyleFactory(index, notification.barStyle, notification);
var actionStyle = props.actionStyleFactory(index, notification.actionStyle, notification);
var activeBarStyle = props.activeBarStyleFactory(index, notification.activeBarStyle, notification);
// Allow onClick from notification stack or individual notifications
var onClick = notification.onClick || props.onClick;
var onDismiss = props.onDismiss;
var dismissAfter = notification.dismissAfter;
if (dismissAfter !== false) {
if (dismissAfter == null) dismissAfter = props.dismissAfter;
if (!dismissNow) dismissAfter += index * 1000;
}
return _react2.default.createElement(_stackedNotification2.default, _extends({}, notification, {
key: notification.key,
isLast: isLast,
action: notification.action || props.action,
dismissAfter: dismissAfter,
onDismiss: onDismiss.bind(undefined, notification),
onClick: onClick.bind(undefined, notification),
activeBarStyle: activeBarStyle,
barStyle: barStyle,
actionStyle: actionStyle
}));
})
);
};
/* eslint-disable react/no-unused-prop-types, react/forbid-prop-types */
NotificationStack.propTypes = {
activeBarStyleFactory: _propTypes2.default.func,
barStyleFactory: _propTypes2.default.func,
actionStyleFactory: _propTypes2.default.func,
dismissInOrder: _propTypes2.default.bool,
notifications: _propTypes2.default.array.isRequired,
onDismiss: _propTypes2.default.func.isRequired,
onClick: _propTypes2.default.func,
action: _defaultPropTypes2.default.action
};
NotificationStack.defaultProps = {
activeBarStyleFactory: defaultBarStyleFactory,
barStyleFactory: defaultBarStyleFactory,
actionStyleFactory: defaultActionStyleFactory,
dismissInOrder: true,
dismissAfter: 1000,
onClick: function onClick() {}
};
/* eslint-enable no-alert, no-console */
exports.default = NotificationStack;