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.
121 lines (94 loc) • 4.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
exports.stateInfo = stateInfo;
exports.listInfo = listInfo;
exports.registerPaginator = registerPaginator;
exports.getPaginator = getPaginator;
exports.getItem = getItem;
exports.listConfig = listConfig;
exports.preloadedPaginator = preloadedPaginator;
exports.isUpdating = isUpdating;
exports.isRemoving = isRemoving;
exports.currentQuery = currentQuery;
var _immutable = require('immutable');
var _reducer = require('../reducer');
var _pageInfoTranslator = require('../pageInfoTranslator');
var _debounce = require('./debounce');
var _debounce2 = _interopRequireDefault(_debounce);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var stateMap = {};
var defaultLocator = function defaultLocator(listId) {
return function (state) {
return state[listId];
};
};
var preload = { results: [] };
var defaultPageParams = function defaultPageParams() {
var _responseProps = (0, _pageInfoTranslator.responseProps)(),
_responseProps2 = _slicedToArray(_responseProps, 2),
totalCountProp = _responseProps2[0],
resultsProp = _responseProps2[1];
return {
totalCountProp: totalCountProp,
resultsProp: resultsProp
};
};
function stateInfo() {
return stateMap;
}
function listInfo(listId) {
return stateInfo()[listId] || {};
}
function registerPaginator(_ref) {
var listId = _ref.listId,
fetch = _ref.fetch,
_ref$cache = _ref.cache,
cache = _ref$cache === undefined ? false : _ref$cache,
_ref$initialSettings = _ref.initialSettings,
initialSettings = _ref$initialSettings === undefined ? {} : _ref$initialSettings,
_ref$pageParams = _ref.pageParams,
pageParams = _ref$pageParams === undefined ? {} : _ref$pageParams,
_ref$locator = _ref.locator,
locator = _ref$locator === undefined ? defaultLocator(listId) : _ref$locator;
stateMap[listId] = {
locator: locator,
fetch: (0, _debounce2.default)(fetch),
cache: cache,
initialSettings: initialSettings,
params: _extends({}, defaultPageParams(), pageParams)
};
return stateMap[listId];
}
function getPaginator(listId, state) {
var config = stateMap[listId] || {
locator: defaultLocator(listId)
};
return config.locator(state) || _reducer.defaultPaginator;
}
function getItem(state, listId, itemId) {
return getPaginator(listId, state).get('results').find(function (r) {
return r.get((0, _pageInfoTranslator.recordProps)().identifier) === itemId;
}, undefined, (0, _immutable.Map)());
}
function listConfig(listId) {
return stateMap[listId];
}
function preloadedPaginator(state, listId) {
var preloaded = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : preload;
var paginator = getPaginator(listId, state);
return paginator.equals(_reducer.defaultPaginator) ? paginator.merge(preloaded) : paginator;
}
function isUpdating(state, listId, itemId) {
var paginator = getPaginator(listId, state);
return paginator.get('updating').includes(itemId) || paginator.get('massUpdating').includes(itemId);
}
function isRemoving(state, listId, itemId) {
return getPaginator(listId, state).get('removing').includes(itemId);
}
function currentQuery(state, listId) {
return (0, _pageInfoTranslator.translate)(getPaginator(state, listId));
}