violet-paginator
Version:
Display, paginate, sort, filter, and update items from the server. violet-paginator is a complete list management library for react/redux applications.
125 lines (109 loc) • 3.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = fetchingComposables;
var _uuid = require('uuid');
var _uuid2 = _interopRequireDefault(_uuid);
var _actionTypes = require('./actionTypes');
var actionTypes = _interopRequireWildcard(_actionTypes);
var _pageInfoTranslator = require('../pageInfoTranslator');
var _stateManagement = require('../lib/stateManagement');
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var fetcher = function fetcher(id) {
return function (dispatch, getState) {
var _listConfig = (0, _stateManagement.listConfig)(id),
fetch = _listConfig.fetch,
params = _listConfig.params;
var pageInfo = (0, _stateManagement.getPaginator)(id, getState());
var requestId = _uuid2.default.v1();
dispatch({ type: (0, actionTypes.default)(actionTypes.FETCH_RECORDS, id), requestId: requestId });
var promise = dispatch(fetch((0, _pageInfoTranslator.translate)(pageInfo)));
return promise.then(function (resp) {
return dispatch({
type: (0, actionTypes.default)(actionTypes.RESULTS_UPDATED, id),
results: resp.data[params.resultsProp],
totalCount: resp.data[params.totalCountProp],
requestId: requestId
});
}).catch(function (error) {
return dispatch({
type: (0, actionTypes.default)(actionTypes.RESULTS_UPDATED_ERROR, id),
error: error
});
});
};
};
function fetchingComposables(config) {
var id = config.listId;
var resolve = function resolve(t) {
return (0, actionTypes.default)(t, id);
};
return {
initialize: function initialize() {
return {
type: resolve(actionTypes.INITIALIZE_PAGINATOR),
preloaded: config.preloaded
};
},
reload: function reload() {
return fetcher(id);
},
next: function next() {
return {
type: resolve(actionTypes.NEXT_PAGE)
};
},
prev: function prev() {
return {
type: resolve(actionTypes.PREVIOUS_PAGE)
};
},
goTo: function goTo(page) {
return {
type: resolve(actionTypes.GO_TO_PAGE),
page: page
};
},
setPageSize: function setPageSize(size) {
return {
type: resolve(actionTypes.SET_PAGE_SIZE),
size: size
};
},
toggleFilterItem: function toggleFilterItem(field, value) {
return {
type: resolve(actionTypes.TOGGLE_FILTER_ITEM),
field: field,
value: value
};
},
setFilter: function setFilter(field, value) {
return {
type: resolve(actionTypes.SET_FILTER),
field: field,
value: value
};
},
setFilters: function setFilters(filters) {
return {
type: resolve(actionTypes.SET_FILTERS),
filters: filters
};
},
resetFilters: function resetFilters(filters) {
return {
type: resolve(actionTypes.RESET_FILTERS),
filters: filters
};
},
sort: function sort(field, reverse) {
return {
type: resolve(actionTypes.SORT_CHANGED),
field: field,
reverse: reverse
};
}
};
}