redux-wrapper-extended
Version:
Short Cut Reducer definition.
58 lines (57 loc) • 2.31 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var src_1 = require("../src");
function default_1() {
console.log("CASCADING REDUCER");
var detailReducerWrapper = new src_1.ReducerWrapper()
.addPropChangedHandler("SET_NAME", function (x) { return x.name; })
.addPropChangedHandler("SET_AGE", function (x) { return x.age; }, function (state, payload) {
if (payload < 18) {
return 18;
}
return payload;
});
var emailReducerWrapper = new src_1.ReducerWrapper().addPropChangedHandler("SET_EMAIL");
var nameReducerWrapper = new src_1.ReducerWrapper().addPropChangedHandler("SET_NAME_ALSO");
var reducers = src_1.combineReducerWrapper({
// a reducer could have its "child" reducers, they are in action if the state is not changed by the 'parent' reducer
detail: detailReducerWrapper.getReducer({
// override
name: nameReducerWrapper.getReducer(),
contacts: {
// override contact in, state is relative to its context
email: emailReducerWrapper.getReducer(),
// maintain existence of 'phone'
phone: src_1.uselessReducer,
}
}),
});
var state = {
detail: {
name: "Anjar",
age: 27,
contacts: {
email: "anjar.p.wicaksono@gmail.com",
phone: "81807978"
}
}
};
// HERE IS CASCADING IN ACTION
var storeWrapper = new src_1.StoreWrapper(reducers, state);
var store = storeWrapper.getStore();
store.subscribe(function () {
console.log("Store changed", store.getState());
console.log("");
});
console.log("SET_NAME TO John");
store.dispatch({ type: "SET_NAME", payload: "John" });
console.log("SET_AGE TO 16, but capped at 18");
store.dispatch({ type: "SET_AGE", payload: 16 });
console.log("SET_AGE TO 23");
store.dispatch({ type: "SET_AGE", payload: 23 });
console.log("SET_NAME_ALSO TO Paul");
store.dispatch({ type: "SET_NAME_ALSO", payload: "Paul" });
console.log("SET_EMAIL TO john2001@gmail.com");
store.dispatch({ type: "SET_EMAIL", payload: "john2001@gmail.com" });
}
exports.default = default_1;
;