mui-redux-alerts-react
Version:
Material-UI + Redux Dialogs and Snackbars
141 lines (115 loc) • 4.51 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; };
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 _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; }
//
// Constants
// ----------------------------------------------------------------------------
var OPEN_SNACKBAR = '@@mui-redux-alerts/OPEN_SNACKBAR';
var OPEN_DIALOG = '@@mui-redux-alerts/OPEN_DIALOG';
var CLOSE_SNACKBAR = '@@mui-redux-alerts/CLOSE_SNACKBAR';
var CLOSE_DIALOG = '@@mui-redux-alerts/CLOSE_DIALOG';
var initialState = {
snackbars: {},
dialogs: {}
};
//
// Reducer
// ----------------------------------------------------------------------------
var reducer = function reducer() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
switch (action.type) {
case OPEN_SNACKBAR:
return {
snackbars: _extends(_defineProperty({}, action.payload.key, action.payload.props), state.snackbars),
dialogs: state.dialogs
};
case OPEN_DIALOG:
return {
snackbars: state.snackbars,
dialogs: _extends(_defineProperty({}, action.payload.key, action.payload.props), state.dialogs)
};
case CLOSE_SNACKBAR:
{
var _state$snackbars = state.snackbars,
omit = _state$snackbars[action.payload.key],
snackbars = _objectWithoutProperties(_state$snackbars, [action.payload.key]);
return { snackbars: snackbars, dialogs: state.dialogs };
}
case CLOSE_DIALOG:
{
var _state$dialogs = state.dialogs,
_omit = _state$dialogs[action.payload.key],
dialogs = _objectWithoutProperties(_state$dialogs, [action.payload.key]);
return { snackbars: state.snackbars, dialogs: dialogs };
}
default:
return state;
}
};
//
// Helper Functions
// ----------------------------------------------------------------------------
exports.reducer = reducer;
var count = 0;
/**
* Gets keys, props and a close function
*/
var getKeyProps = function getKeyProps(first, second, dispatch, closeAction) {
var key = void 0;
var propsOrGetProps = void 0;
// Define key and pogp
if (typeof first === 'string') {
key = first;
propsOrGetProps = second;
} else {
count += 1;
key = 'Snackbar_' + count;
propsOrGetProps = first;
}
var close = function close() {
dispatch(closeAction(key));
};
var props = typeof propsOrGetProps === 'function' ? propsOrGetProps(close, key) : propsOrGetProps;
// Set default props
props.timestamp = Date.now();
props.open = true;
// onRequestClose monkey patch
var originalOnRequestClose = props.onRequestClose;
props.onRequestClose = function (buttonClicked) {
close();
if (originalOnRequestClose) originalOnRequestClose(buttonClicked);
};
return { key: key, props: props };
};
//
// Action Creators
// ----------------------------------------------------------------------------
var closeSnackbar = exports.closeSnackbar = function closeSnackbar(key) {
return {
type: CLOSE_SNACKBAR,
payload: { key: key }
};
};
var closeDialog = exports.closeDialog = function closeDialog(key) {
return {
type: CLOSE_DIALOG,
payload: { key: key }
};
};
var openSnackbar = exports.openSnackbar = function openSnackbar(keyOrPropsOrGetProps, propsOrGetProps) {
return function (dispatch) {
var payload = getKeyProps(keyOrPropsOrGetProps, propsOrGetProps, dispatch, closeSnackbar);
dispatch({ type: OPEN_SNACKBAR, payload: payload });
};
};
var openDialog = exports.openDialog = function openDialog(keyOrPropsOrGetProps, propsOrGetProps) {
return function (dispatch) {
var payload = getKeyProps(keyOrPropsOrGetProps, propsOrGetProps, dispatch, closeDialog);
dispatch({ type: OPEN_DIALOG, payload: payload });
};
};