devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
106 lines (101 loc) • 3.26 kB
JavaScript
/**
* DevExtreme (cjs/__internal/data/m_store_helper.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _array_query = _interopRequireDefault(require("../../common/data/array_query"));
var _utils = require("../../common/data/utils");
var _common = require("../../core/utils/common");
var _extend = require("../../core/utils/extend");
var _iterator = require("../../core/utils/iterator");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
function multiLevelGroup(query, groupInfo) {
query = query.groupBy(groupInfo[0].selector);
if (groupInfo.length > 1) {
query = query.select((g => (0, _extend.extend)({}, g, {
items: multiLevelGroup((0, _array_query.default)(g.items), groupInfo.slice(1)).toArray()
})))
}
return query
}
function arrangeSortingInfo(groupInfo, sortInfo) {
const filteredGroup = [];
(0, _iterator.each)(groupInfo, ((_, group) => {
const collision = (0, _common.grep)(sortInfo, (sort => group.selector === sort.selector));
if (collision.length < 1) {
filteredGroup.push(group)
}
}));
return filteredGroup.concat(sortInfo)
}
function queryByOptions(query, options, isCountQuery) {
var _options;
options = options || {};
const {
filter: filter
} = options;
if (null !== (_options = options) && void 0 !== _options && _options.langParams) {
var _query$setLangParams, _query;
null === (_query$setLangParams = (_query = query).setLangParams) || void 0 === _query$setLangParams || _query$setLangParams.call(_query, options.langParams)
}
if (filter) {
query = query.filter(filter)
}
if (isCountQuery) {
return query
}
let {
sort: sort
} = options;
const {
select: select
} = options;
let {
group: group
} = options;
const {
skip: skip
} = options;
const {
take: take
} = options;
if (group) {
group = (0, _utils.normalizeSortingInfo)(group);
group.keepInitialKeyOrder = !!options.group.keepInitialKeyOrder
}
if (sort || group) {
sort = (0, _utils.normalizeSortingInfo)(sort || []);
if (group && !group.keepInitialKeyOrder) {
sort = arrangeSortingInfo(group, sort)
}(0, _iterator.each)(sort, (function(index) {
query = query[index ? "thenBy" : "sortBy"](this.selector, this.desc, this.compare)
}))
}
if (select) {
query = query.select(select)
}
if (group) {
query = multiLevelGroup(query, group)
}
if (take || skip) {
query = query.slice(skip || 0, take)
}
return query
}
var _default = exports.default = {
multiLevelGroup: multiLevelGroup,
arrangeSortingInfo: arrangeSortingInfo,
queryByOptions: queryByOptions
};