Vodka
Need to create an object of objects properties which can be mapped into children.
So I need a map of:
parent: {
child:{
child:{
child:{}
},
},
};
Calling {parent}_{child}/UPDATE_OBJECTS
updates parent's child property in reducer
Base object needs to consist of
{
objects: {},
loading: false,
pagination: {
total: null,
currentPage: 0,
perPage: null,
},
paginationKeys: [],
currentPage: 0,
filter: (object) => {return true;},
[{child_module_name*}] => {},
}
Example usage
import Vodka from 'react-vodka';
const vodka = new Vodka({
baseUrl: 'https://api.bookstore.local',
headers: {
'Content-Type': 'application/json',
},
});
vodka.shot({
name: 'books',
endpoint: 'books/{book}',
key:'slug',
});
vodka.shot({
parents: 'books',
name: 'pages',
endpoint: 'books/{book}/{pages}/',
});
vodka.shot({
parents: 'books.pages',
name: 'words',
endpoint: 'books/{book}/pages/{page}/words/{word}',
});
vodka.shot({
name: 'pages',
endpoint: '/books/{book}/pages/{pages}/',
parents: 'books',
key: 'slug',
configs: [
'CREATE_LINE',
'CREATE_LINE_ASYNC',
],
reducers: {
'CREATE_LINE' : (state, action) => {
return Object.assign({}, state, {
lines: Object.assign(state.books[action.params.book].lines, action.lines),
});
},
},
sagas: {
'CREATE_LINE_ASNYC': function* () {
while(true) {
const action = yield effects.take('blah');
}
},
},
except: [
'store',
],
});
vodka.shots([
{
name: 'books',
endpoint: 'books/{book}',
key:'slug',
},
{
name: 'pages',
parents: 'books',
endpoint: 'books/{book}/{pages}/',
},
{
name: 'words',
parents: 'books.pages',
endpoint: 'books/{book}/pages/{page}/words/{word}',
},
]);
export default vodka;
Reducer file
import {combineReducers} from 'redux';
import {routerReducer} from 'react-router-redux';
import vodka from './mixers';
export default combineReducers({
routing: routerReducer,
...vodka.getReducers(),
});
Saga file
import vodka from './mixers';
const sagas = [
...vodka.getSagas(),
];
export default sagas;
Routes file
import React, {Component} from 'react';
import {connect} from 'react-redux';
import {
Route,
Switch,
withRouter,
} from 'react-router-dom';
import vodka from './mixers';
class Routes extends Component {
render() {
return (
<Switch>
<Route exact path="/" component={Login}/>
<Route exact path="/register/" component={Register}/>
<vodka.getRoutes/>
</Switch>
);
}
}
export default withRouter(connect()(Routes));
Must import vodka mixers before reducers and sagas are setup
Local package development
git clone
yarn && yarn build && npm link
TODO
Not so important right now