stitch-ui
Version:
110 lines (103 loc) • 2.7 kB
JavaScript
import { combineReducers } from "redux";
import { createReducer } from "redux-act";
import * as actions from "./actions";
import * as homeActions from "../home/actions";
const modalInitialState = {
selectedType: "",
canSubmit: false,
name: "",
error: null
};
const rootInitialState = {
app: null,
apps: [],
services: {},
loadingApp: false,
loadingSvcs: false,
newServiceModalOpen: false,
collectionName: "",
dbName: ""
};
const addServiceModalReducer = createReducer(
{
[homeActions.loadAppsActions.req]: state => ({
...state,
loading: true
}),
[homeActions.loadAppsActions.rcv]: (state, payload) => ({
...state,
loading: false,
apps: payload.payload
}),
[homeActions.loadAppsActions.fail]: (state, payload) => ({
...state,
loading: false,
loadAppsError: payload.error
}),
[actions.createServiceActions.req]: state => ({ ...state, creating: true }),
[actions.createServiceActions.rcv]: state => ({
...state,
createServiceError: null,
creating: false,
selectedType: "",
name: ""
}),
[actions.createServiceActions.fail]: (state, payload) => ({
...state,
creating: false,
createServiceError: payload.error
}),
[actions.selectType]: (state, payload) => ({
...state,
selectedType: payload,
canSubmit: state.name.length > 0 && payload.length > 0
}),
[actions.setSvcName]: (state, payload) => ({
...state,
name: payload,
canSubmit: payload.length > 0 && state.selectedType.length > 0
})
},
modalInitialState
);
const rootReducer = createReducer(
{
[actions.loadAppActions.req]: state => ({
...state,
loadingApp: true
}),
[actions.loadAppActions.rcv]: (state, payload) => ({
...state,
loadingApp: false,
app: payload.payload
}),
[actions.loadAppActions.fail]: (state, payload) => ({
...state,
error: payload.error
}),
[actions.loadServicesActions.req]: state => ({
...state,
loadingSvcs: true
}),
[actions.loadServicesActions.rcv]: (state, payload) => ({
...state,
loadingSvcs: false,
services: payload.payload
}),
[actions.loadServicesActions.fail]: (state, payload) => ({
...state,
loadingSvcs: false,
error: payload.error
}),
[actions.setDB]: (state, { db }) => ({ ...state, dbName: db }),
[actions.setCollection]: (state, { collection }) => ({
...state,
collectionName: collection
})
},
rootInitialState
);
export default combineReducers({
root: rootReducer,
addServiceModal: addServiceModalReducer
});