UNPKG

notistack-mod

Version:

Notistack with ability to modify active snackbars.

277 lines (222 loc) 13.2 kB
'use strict'; 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 _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _styles = require('@material-ui/core/styles'); var _Snackbar = require('@material-ui/core/Snackbar'); var _Snackbar2 = _interopRequireDefault(_Snackbar); var _Collapse = require('@material-ui/core/Collapse'); var _Collapse2 = _interopRequireDefault(_Collapse); var _SnackbarContent = require('@material-ui/core/SnackbarContent'); var _SnackbarContent2 = _interopRequireDefault(_SnackbarContent); var _SnackbarItem = require('./SnackbarItem.util'); var _SnackbarItem2 = require('./SnackbarItem.styles'); var _SnackbarItem3 = _interopRequireDefault(_SnackbarItem2); var _constants = require('../utils/constants'); var _warning = require('../utils/warning'); var _warning2 = _interopRequireDefault(_warning); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } 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) : subClass.__proto__ = superClass; } var SnackbarItem = function (_Component) { _inherits(SnackbarItem, _Component); function SnackbarItem() { var _ref; var _temp, _this, _ret; _classCallCheck(this, SnackbarItem); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = SnackbarItem.__proto__ || Object.getPrototypeOf(SnackbarItem)).call.apply(_ref, [this].concat(args))), _this), _this.state = { collapsed: true }, _this.componentWillUnmount = function () { clearTimeout(_this.timeout); }, _this.handleClose = function (key) { return function (event, reason) { var snack = _this.props.snack; if (snack.onClose) { snack.onClose(event, reason, key); } _this.props.onClose(event, reason, key); }; }, _this.handleEntered = function (key) { return function (node, isAppearing) { var snack = _this.props.snack; if (snack.onEntered) { snack.onEntered(node, isAppearing, key); } _this.props.onEntered(node, isAppearing, key); if (snack.requestClose) { _this.handleClose(key)(null, _constants.REASONS.MAXSNACK); } }; }, _this.handleExited = function (key) { return function (event) { var _this$props = _this.props, onExited = _this$props.onExited, singleOnExited = _this$props.snack.onExited; if (singleOnExited) singleOnExited(event, key); onExited(event, key); }; }, _this.handleExitedScreen = function () { _this.timeout = setTimeout(function () { _this.setState(function (_ref2) { var collapsed = _ref2.collapsed; return { collapsed: !collapsed }; }); }, 125); }, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(SnackbarItem, [{ key: 'render', value: function render() { var _props = this.props, classes = _props.classes, action = _props.action, content = _props.content, _props$ContentProps = _props.ContentProps, ContentProps = _props$ContentProps === undefined ? {} : _props$ContentProps, hideIconVariant = _props.hideIconVariant, preventDuplicate = _props.preventDuplicate, iconVariant = _props.iconVariant, snack = _props.snack, dense = _props.dense, _props$TransitionProp = _props.TransitionProps, otherTransitionProps = _props$TransitionProp === undefined ? {} : _props$TransitionProp, other = _objectWithoutProperties(_props, ['classes', 'action', 'content', 'ContentProps', 'hideIconVariant', 'preventDuplicate', 'iconVariant', 'snack', 'dense', 'TransitionProps']); var contentAction = ContentProps.action, className = ContentProps.className, otherContentProps = _objectWithoutProperties(ContentProps, ['action', 'className']); var key = snack.key, persist = snack.persist, children = snack.children, singleContent = snack.content, _snack$variant = snack.variant, variant = _snack$variant === undefined ? 'default' : _snack$variant, singleAction = snack.action, _snack$ContentProps = snack.ContentProps, singleContentProps = _snack$ContentProps === undefined ? {} : _snack$ContentProps, anchorOrigin = snack.anchorOrigin, requestClose = snack.requestClose, entered = snack.entered, _snack$TransitionProp = snack.TransitionProps, singleTransitionProps = _snack$TransitionProp === undefined ? {} : _snack$TransitionProp, singleSnackProps = _objectWithoutProperties(snack, ['key', 'persist', 'children', 'content', 'variant', 'action', 'ContentProps', 'anchorOrigin', 'requestClose', 'entered', 'TransitionProps']); var icon = iconVariant[variant]; var contentProps = _extends({}, otherContentProps, singleContentProps, { action: singleAction || singleContentProps.action || contentAction || action }); var transitionProps = _extends({ direction: (0, _SnackbarItem.getTransitionDirection)(anchorOrigin) }, otherTransitionProps, singleTransitionProps, { onExited: this.handleExitedScreen }); var ariaDescribedby = contentProps['aria-describedby'] || 'client-snackbar'; var finalAction = contentProps.action; if (typeof finalAction === 'function') { finalAction = contentProps.action(key); } var snackContent = void 0; if (snack.children) { snackContent = snack.children; (0, _warning2.default)(_constants.MESSAGES.NO_CHILDREN_OPTION); } if (singleContent) { snackContent = singleContent; } snackContent = snackContent || content; if (snackContent && typeof snackContent === 'function') { snackContent = snackContent(key, snack.message); } return _react2.default.createElement( _Collapse2.default, { unmountOnExit: true, timeout: 175, 'in': this.state.collapsed, classes: (0, _SnackbarItem.getCollapseClasses)(classes, dense), onExited: this.handleExited(key) }, _react2.default.createElement( _Snackbar2.default, _extends({}, other, singleSnackProps, { open: snack.open, anchorOrigin: anchorOrigin, TransitionProps: transitionProps, classes: (0, _SnackbarItem.getSnackbarClasses)(classes), onClose: this.handleClose(key), onEntered: this.handleEntered(key) }, this.unusedCallbacks), snackContent || _react2.default.createElement(_SnackbarContent2.default, _extends({ className: (0, _classnames2.default)(classes.base, classes['variant' + (0, _constants.capitalise)(variant)], !hideIconVariant && icon ? classes.lessPadding : null, className) }, contentProps, { 'aria-describedby': ariaDescribedby, message: _react2.default.createElement( 'span', { id: ariaDescribedby, className: classes.message }, !hideIconVariant ? icon : null, snack.message ), action: finalAction })) ) ); } }, { key: 'unusedCallbacks', get: function get() { var _this2 = this; return ['onEnter', 'onEntering', 'onExit', 'onExiting'].reduce(function (acc, cbName) { return _extends({}, acc, _defineProperty({}, cbName, function () { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } var snack = _this2.props.snack; if (typeof snack[cbName] === 'function') { snack[cbName].apply(snack, args.concat([snack.key])); } if (typeof _this2.props[cbName] === 'function') { var _props2; (_props2 = _this2.props)[cbName].apply(_props2, args.concat([snack.key])); } })); }, {}); } }]); return SnackbarItem; }(_react.Component); process.env.NODE_ENV !== "production" ? SnackbarItem.propTypes = { classes: _propTypes2.default.object.isRequired, snack: _propTypes2.default.shape({ message: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.node]).isRequired, variant: _propTypes2.default.oneOf(['default', 'error', 'success', 'warning', 'info']), key: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]).isRequired, open: _propTypes2.default.bool.isRequired, requestClose: _propTypes2.default.bool.isRequired, entered: _propTypes2.default.bool.isRequired }).isRequired, iconVariant: _propTypes2.default.shape({ success: _propTypes2.default.any.isRequired, warning: _propTypes2.default.any.isRequired, error: _propTypes2.default.any.isRequired, info: _propTypes2.default.any.isRequired }).isRequired, hideIconVariant: _propTypes2.default.bool.isRequired, preventDuplicate: _propTypes2.default.bool.isRequired, dense: _propTypes2.default.bool.isRequired, onClose: _propTypes2.default.func.isRequired, onExited: _propTypes2.default.func.isRequired, onEntered: _propTypes2.default.func.isRequired } : void 0; exports.default = (0, _styles.withStyles)(_SnackbarItem3.default)(SnackbarItem);