const { createAction, createReducer, createCombinableReducers } = require("redux-fluent");
const { createStore, combineReducers } = require('redux');
const addTodo = createAction('@@todos | add');
const editTodo = createAction('@@todos/:id | edit');
const todos = createReducer('@@todos')
.case(addTodo)
.then((state, { payload }) => state.concat(payload))
.case(editTodo)
.then((state, { payload }) => state.map(todo => (
todo.id === payload.id ? Object.assign({}, todo, payload) : todo
)))
.default(() => []);
const reducers = combineReducers(
createCombinableReducers(todos)
);
const store = createStore(reducers);
const getTodos = () => store.getState()[todos.domain][0];
store.dispatch(
addTodo({
id: 1, title: 'Walk Gipsy', status: 'pending',
})
);
console.log('State 1', getTodos());
store.dispatch(
editTodo({
id: 1, title: 'Walk Gipsy', status: 'done',
})
);
console.log('State 2', getTodos());