UNPKG

3.77 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _extends2 = require('babel-runtime/helpers/extends');
8
9var _extends3 = _interopRequireDefault(_extends2);
10
11exports.default = createRestReducer;
12
13var _redux = require('redux');
14
15var _InitialState = require('./InitialState');
16
17var _isFetchingReducer = require('./isFetchingReducer');
18
19var _isFetchingReducer2 = _interopRequireDefault(_isFetchingReducer);
20
21var _lastFetchSignatureReducer = require('./lastFetchSignatureReducer');
22
23var _lastFetchSignatureReducer2 = _interopRequireDefault(_lastFetchSignatureReducer);
24
25var _idsReducer = require('./idsReducer');
26
27var _idsReducer2 = _interopRequireDefault(_idsReducer);
28
29var _itemsReducer = require('./itemsReducer');
30
31var _itemsReducer2 = _interopRequireDefault(_itemsReducer);
32
33var _itemReducer = require('./itemReducer');
34
35var _itemReducer2 = _interopRequireDefault(_itemReducer);
36
37var _entitiesReducer = require('./entitiesReducer');
38
39var _entitiesReducer2 = _interopRequireDefault(_entitiesReducer);
40
41var _paginationReducer = require('./paginationReducer');
42
43var _paginationReducer2 = _interopRequireDefault(_paginationReducer);
44
45var _sortReducer = require('./sortReducer');
46
47var _sortReducer2 = _interopRequireDefault(_sortReducer);
48
49var _filtersReducer = require('./filtersReducer');
50
51var _filtersReducer2 = _interopRequireDefault(_filtersReducer);
52
53var _generalParamsReducer = require('./generalParamsReducer');
54
55var _generalParamsReducer2 = _interopRequireDefault(_generalParamsReducer);
56
57function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
58
59/**
60 * @param resourceName
61 * @param config
62 * @param {ActionTypes} actionTypes
63 * @returns {reducer}
64 */
65/** Created by hhj on 1/29/16. */
66/* eslint-disable max-len */
67/* eslint-disable no-case-declarations */
68function createRestReducer(resourceName) {
69 var config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
70 var actionTypes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
71
72 var itemTransformer = config.itemTransformer || function (item) {
73 return item;
74 };
75 var idField = config.idField || 'id';
76
77 var defaultState = config.defaultState || {};
78
79 var combinedReducers = (0, _redux.combineReducers)({
80 fetching: (0, _isFetchingReducer2.default)(actionTypes),
81 lastFetchSignature: (0, _lastFetchSignatureReducer2.default)(actionTypes),
82 itemId: (0, _itemReducer2.default)(actionTypes, idField),
83 collectionIds: (0, _itemsReducer2.default)(actionTypes, idField),
84 collectionIdsStatic: (0, _idsReducer2.default)(actionTypes),
85 entities: (0, _entitiesReducer2.default)(actionTypes, itemTransformer, idField),
86 pagination: (0, _paginationReducer2.default)(actionTypes),
87 sort: (0, _sortReducer2.default)(actionTypes),
88 filters: (0, _filtersReducer2.default)(actionTypes),
89 generalParams: (0, _generalParamsReducer2.default)(actionTypes)
90 });
91
92 // performance boost? - skip actions that don't belong to this reducer
93 function shouldWeReduce(action) {
94 // TODO - better recognition of what is ours - action can have resourceName property...
95 if (action.type && action.type.toLowerCase().indexOf(resourceName.toLowerCase()) === -1) return false;
96 return true;
97 }
98
99 return function restReducer(state, action) {
100 if (!(state instanceof _InitialState.InitialState)) return (0, _InitialState.makeInitialState)((0, _extends3.default)({}, defaultState, state));
101 // if (!shouldWeReduce(action)) return state
102
103 // combineReducers works with plain object state only
104 var nextState = combinedReducers(state.toObject(), action);
105 // convert back to immutable after reducing
106 return new _InitialState.InitialState(nextState);
107 };
108}
\No newline at end of file