stitch-ui
Version:
92 lines (88 loc) • 2.89 kB
JavaScript
import { createReducer } from "redux-act";
import { OrderedMap, Map } from "immutable";
import * as actions from "./actions";
import Value from "../models/Value";
export default createReducer(
{
[actions.setNameError]: (state, nameError) => ({ ...state, nameError }),
[actions.setNameInput]: (state, name) => ({
...state,
name,
newValue: state.newValue.set("dirty", true)
}),
[actions.setPrivateChecked]: (state, { id, isPrivate }) => ({
...state,
values: state.values
.setIn([id, "private"], isPrivate)
.setIn([id, "dirty"], true)
}),
[actions.setNewPrivateChecked]: (state, { isPrivate }) => ({
...state,
newValue: state.newValue.set("private", isPrivate).set("dirty", true)
}),
[actions.setValueInput]: (state, { id, value }) => ({
...state,
values: state.values
.setIn([id, "valueJson", "input"], value)
.setIn([id, "dirty"], true)
}),
[actions.discardValueChanges]: (state, { id }) => ({
...state,
values: state.values.set(id, state.valuesClean.get(id))
}),
[actions.discardNewValueChanges]: state => ({
...state,
newValue: new Value({}),
name: "",
nameError: null
}),
[actions.setNewValueInput]: (state, { value }) => ({
...state,
newValue: state.newValue
.setIn(["valueJson", "input"], value)
.set("dirty", true)
}),
[actions.setNewValueDirty]: (state, dirty) => ({
...state,
newValue: state.newValue.set("dirty", dirty)
}),
[actions.setNewValue]: (state, value) => ({ ...state, newValue: value }),
[actions.setValue]: (state, { id, value }) => ({
...state,
values: state.values.set(id, value)
}),
[actions.updateValueActions.rcv]: (state, payload) => {
const key = [payload.reqArgs[1], payload.reqArgs[2]].join("/");
return { ...state, saveErrors: state.saveErrors.set(key, null) };
},
[actions.updateValueActions.fail]: (state, payload) => {
const key = [payload.reqArgs[1], payload.reqArgs[2]].join("/");
return { ...state, saveErrors: state.saveErrors.set(key, payload.error) };
},
[actions.loadValuesActions.req]: state => ({ ...state, error: null }),
[actions.loadValuesActions.rcv]: (state, payload) => ({
...state,
error: null,
values: new OrderedMap(payload.payload || {}).map(raw =>
Value.fromRaw(raw)
),
valuesClean: new OrderedMap(payload.payload || {}).map(raw =>
Value.fromRaw(raw)
)
}),
[actions.loadValuesActions.fail]: (state, payload) => ({
...state,
values: {},
error: payload.error
})
},
{
error: null,
name: "",
nameError: null,
newValue: new Value({}),
values: new OrderedMap(),
valuesClean: new OrderedMap(),
saveErrors: new Map()
}
);