UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

104 lines (100 loc) 2.94 kB
/** * DevExtreme (esm/__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/ */ import arrayQuery from "../../common/data/array_query"; import { normalizeSortingInfo } from "../../common/data/utils"; import { grep } from "../../core/utils/common"; import { extend } from "../../core/utils/extend"; import { each } from "../../core/utils/iterator"; function multiLevelGroup(query, groupInfo) { query = query.groupBy(groupInfo[0].selector); if (groupInfo.length > 1) { query = query.select((g => extend({}, g, { items: multiLevelGroup(arrayQuery(g.items), groupInfo.slice(1)).toArray() }))) } return query } function arrangeSortingInfo(groupInfo, sortInfo) { const filteredGroup = []; each(groupInfo, ((_, group) => { const collision = 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 = normalizeSortingInfo(group); group.keepInitialKeyOrder = !!options.group.keepInitialKeyOrder } if (sort || group) { sort = normalizeSortingInfo(sort || []); if (group && !group.keepInitialKeyOrder) { sort = arrangeSortingInfo(group, sort) } 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 } export default { multiLevelGroup: multiLevelGroup, arrangeSortingInfo: arrangeSortingInfo, queryByOptions: queryByOptions };