# redux-rest-adapter
redux-rest-adapter is REST adapter for redux based on [redux-api-middleware](https://www.npmjs.com/package/redux-api-middleware)
[![npm version](https://badge.fury.io/js/redux-rest-adapter.svg)](https://badge.fury.io/js/redux-rest-adapter)
##Setup
###known-entities-api.js
```js
import EntityApi from 'redux-rest-adapter';
export const KnownEntitiesUrls = {
NEWS_TAGS: 'news-tags',
NEWS_TAG_FOR_EDIT: 'news-tags',
//..
};
export default _.mapValues(KnownEntitiesUrls, (url, name)=> new EntityApi({
entityName: name,
endpointUrl: config.endpointRoot + url,
resourceKey: 'result' // data key at payload, default - 'data'
}));
```
###entities-reducer.js
```js
// Ability to extend default api reducers
const entityReducersExtensions = {
NEWS_TAGS: tagsReducer
}
const entitiesReducers = _.mapValues(knownEntitiesApi, (api, key) => api.configureReducer(entityReducersExtensions[key]));
export default combineReducers(entitiesReducers);
```
###your-index-reducer.js
```js
export default combineReducers({
entities: entitiesReducers
//..
});
```
###configure-store.js
```js
import {apiMiddleware} from 'redux-rest-adapter/redux-api-middleware';
//..
export default function configureStore(initialState) {
return createStore(
yourIndexReducer,
initialState,
applyMiddleware(apiMiddleware)
);
}
```
###entities-actions.js
```js
export default _.mapValues(knownEntitiesApi, entityApi => entityApi.actions);
```
##Adapter is ready
![Image devTools](https://raw.githubusercontent.com/maksim-chekrishov/redux-rest-adapter/master/readme-src/dev-tools-1v.jpg)
##Usage
###tags-container.js
```js
class TagsComponent extends Component {
componentWillMount() {
this.props.loadList();
}
//..
componentWillUnmount() {
this.props.resetEntryForEdit();
}
onTagFormSubmit = ()=> {
const data = this.props.tagForEdit;
if (data.id) {
this.props.updateTag(data.id, data);
} else {
this.props.createTag(data);
}
}
render() {
return (
this.props.pending ?