Common reducer for toasts

This commit is contained in:
Ildar Kamalov 2019-02-07 15:40:26 +03:00
parent c466f8cc73
commit 826529e73e
4 changed files with 37 additions and 61 deletions

View File

@ -1,11 +1,9 @@
import { createAction } from 'redux-actions'; import { createAction } from 'redux-actions';
import Api from '../api/Api'; import Api from '../api/Api';
import { addErrorToast, addSuccessToast } from './index';
const apiClient = new Api(); const apiClient = new Api();
export const addErrorToast = createAction('ADD_ERROR_TOAST');
export const addSuccessToast = createAction('ADD_SUCCESS_TOAST');
export const removeToast = createAction('REMOVE_TOAST');
export const nextStep = createAction('NEXT_STEP'); export const nextStep = createAction('NEXT_STEP');
export const prevStep = createAction('PREV_STEP'); export const prevStep = createAction('PREV_STEP');

View File

@ -1,11 +1,11 @@
import { combineReducers } from 'redux'; import { combineReducers } from 'redux';
import { handleActions } from 'redux-actions'; import { handleActions } from 'redux-actions';
import { loadingBarReducer } from 'react-redux-loading-bar'; import { loadingBarReducer } from 'react-redux-loading-bar';
import nanoid from 'nanoid';
import { reducer as formReducer } from 'redux-form'; import { reducer as formReducer } from 'redux-form';
import versionCompare from '../helpers/versionCompare'; import versionCompare from '../helpers/versionCompare';
import * as actions from '../actions'; import * as actions from '../actions';
import toasts from './toasts';
const settings = handleActions({ const settings = handleActions({
[actions.initSettingsRequest]: state => ({ ...state, processing: true }), [actions.initSettingsRequest]: state => ({ ...state, processing: true }),
@ -241,34 +241,6 @@ const filtering = handleActions({
userRules: '', userRules: '',
}); });
const toasts = handleActions({
[actions.addErrorToast]: (state, { payload }) => {
const errorToast = {
id: nanoid(),
message: payload.error.toString(),
type: 'error',
};
const newState = { ...state, notices: [...state.notices, errorToast] };
return newState;
},
[actions.addSuccessToast]: (state, { payload }) => {
const successToast = {
id: nanoid(),
message: payload,
type: 'success',
};
const newState = { ...state, notices: [...state.notices, successToast] };
return newState;
},
[actions.removeToast]: (state, { payload }) => {
const filtered = state.notices.filter(notice => notice.id !== payload);
const newState = { ...state, notices: filtered };
return newState;
},
}, { notices: [] });
const dhcp = handleActions({ const dhcp = handleActions({
[actions.getDhcpStatusRequest]: state => ({ ...state, processing: true }), [actions.getDhcpStatusRequest]: state => ({ ...state, processing: true }),
[actions.getDhcpStatusFailure]: state => ({ ...state, processing: false }), [actions.getDhcpStatusFailure]: state => ({ ...state, processing: false }),

View File

@ -1,9 +1,9 @@
import { combineReducers } from 'redux'; import { combineReducers } from 'redux';
import { handleActions } from 'redux-actions'; import { handleActions } from 'redux-actions';
import { reducer as formReducer } from 'redux-form'; import { reducer as formReducer } from 'redux-form';
import nanoid from 'nanoid';
import * as actions from '../actions/install'; import * as actions from '../actions/install';
import toasts from './toasts';
import { INSTALL_FIRST_STEP } from '../helpers/constants'; import { INSTALL_FIRST_STEP } from '../helpers/constants';
const install = handleActions({ const install = handleActions({
@ -39,34 +39,6 @@ const install = handleActions({
interfaces: {}, interfaces: {},
}); });
const toasts = handleActions({
[actions.addErrorToast]: (state, { payload }) => {
const errorToast = {
id: nanoid(),
message: payload.error.toString(),
type: 'error',
};
const newState = { ...state, notices: [...state.notices, errorToast] };
return newState;
},
[actions.addSuccessToast]: (state, { payload }) => {
const successToast = {
id: nanoid(),
message: payload,
type: 'success',
};
const newState = { ...state, notices: [...state.notices, successToast] };
return newState;
},
[actions.removeToast]: (state, { payload }) => {
const filtered = state.notices.filter(notice => notice.id !== payload);
const newState = { ...state, notices: filtered };
return newState;
},
}, { notices: [] });
export default combineReducers({ export default combineReducers({
install, install,
toasts, toasts,

View File

@ -0,0 +1,34 @@
import { handleActions } from 'redux-actions';
import nanoid from 'nanoid';
import { addErrorToast, addSuccessToast, removeToast } from '../actions';
const toasts = handleActions({
[addErrorToast]: (state, { payload }) => {
const errorToast = {
id: nanoid(),
message: payload.error.toString(),
type: 'error',
};
const newState = { ...state, notices: [...state.notices, errorToast] };
return newState;
},
[addSuccessToast]: (state, { payload }) => {
const successToast = {
id: nanoid(),
message: payload,
type: 'success',
};
const newState = { ...state, notices: [...state.notices, successToast] };
return newState;
},
[removeToast]: (state, { payload }) => {
const filtered = state.notices.filter(notice => notice.id !== payload);
const newState = { ...state, notices: filtered };
return newState;
},
}, { notices: [] });
export default toasts;