UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

221 lines (219 loc) • 8.23 kB
/** * DevExtreme (cjs/ui/list/ui.list.edit.strategy.grouped.js) * Version: 23.2.6 * Build date: Wed May 01 2024 * * Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; exports.default = void 0; var _renderer = _interopRequireDefault(require("../../core/renderer")); var _type = require("../../core/utils/type"); var _iterator = require("../../core/utils/iterator"); var _store_helper = _interopRequireDefault(require("../../data/store_helper")); var _query = _interopRequireDefault(require("../../data/query")); var _uiCollection_widgetEditStrategy = _interopRequireDefault(require("../collection/ui.collection_widget.edit.strategy.plain")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } const LIST_ITEM_CLASS = "dx-list-item"; const LIST_GROUP_CLASS = "dx-list-group"; const SELECTION_SHIFT = 20; const SELECTION_MASK = 1048575; const combineIndex = function(indices) { return (indices.group << 20) + indices.item }; const splitIndex = function(combinedIndex) { return { group: combinedIndex >> 20, item: 1048575 & combinedIndex } }; const GroupedEditStrategy = _uiCollection_widgetEditStrategy.default.inherit({ _groupElements: function() { return this._collectionWidget._itemContainer().find(".dx-list-group") }, _groupItemElements: function($group) { return $group.find(".dx-list-item") }, getIndexByItemData: function(itemData) { const groups = this._collectionWidget.option("items"); let index = false; if (!itemData) { return false } if (itemData.items && itemData.items.length) { itemData = itemData.items[0] }(0, _iterator.each)(groups, (function(groupIndex, group) { if (!group.items) { return false }(0, _iterator.each)(group.items, (function(itemIndex, item) { if (item !== itemData) { return true } index = { group: groupIndex, item: itemIndex }; return false })); if (index) { return false } })); return index }, getItemDataByIndex: function(index) { const items = this._collectionWidget.option("items"); if ((0, _type.isNumeric)(index)) { return this.itemsGetter()[index] } return index && items[index.group] && items[index.group].items[index.item] || null }, itemsGetter: function() { let resultItems = []; const items = this._collectionWidget.option("items"); for (let i = 0; i < items.length; i++) { if (items[i] && items[i].items) { resultItems = resultItems.concat(items[i].items) } else { resultItems.push(items[i]) } } return resultItems }, deleteItemAtIndex: function(index) { const indices = splitIndex(index); const itemGroup = this._collectionWidget.option("items")[indices.group].items; itemGroup.splice(indices.item, 1) }, getKeysByItems: function(items) { let plainItems = []; let i; for (i = 0; i < items.length; i++) { if (items[i] && items[i].items) { plainItems = plainItems.concat(items[i].items) } else { plainItems.push(items[i]) } } const result = []; for (i = 0; i < plainItems.length; i++) { result.push(this._collectionWidget.keyOf(plainItems[i])) } return result }, getIndexByKey: function(key, items) { const groups = items || this._collectionWidget.option("items"); let index = -1; const that = this; (0, _iterator.each)(groups, (function(groupIndex, group) { if (!group.items) { return }(0, _iterator.each)(group.items, (function(itemIndex, item) { const itemKey = that._collectionWidget.keyOf(item); if (that._equalKeys(itemKey, key)) { index = { group: groupIndex, item: itemIndex }; return false } })); if (-1 !== index) { return false } })); return index }, _getGroups: function(items) { const dataController = this._collectionWidget._dataController; const group = dataController.group(); if (group) { return _store_helper.default.queryByOptions((0, _query.default)(items), { group: group }).toArray() } return this._collectionWidget.option("items") }, getItemsByKeys: function(keys, items) { const result = []; const groups = this._getGroups(items); const groupItemByKeyMap = {}; const getItemMeta = key => { const index = this.getIndexByKey(key, groups); const group = index && groups[index.group]; if (!group) { return } return { groupKey: group.key, item: group.items[index.item] } }; (0, _iterator.each)(keys, (function(_, key) { const itemMeta = getItemMeta(key); if (!itemMeta) { return } const groupKey = itemMeta.groupKey; const item = itemMeta.item; let selectedGroup = groupItemByKeyMap[groupKey]; if (!selectedGroup) { selectedGroup = { key: groupKey, items: [] }; groupItemByKeyMap[groupKey] = selectedGroup; result.push(selectedGroup) } selectedGroup.items.push(item) })); return result }, moveItemAtIndexToIndex: function(movingIndex, destinationIndex) { const items = this._collectionWidget.option("items"); const movingIndices = splitIndex(movingIndex); const destinationIndices = splitIndex(destinationIndex); const movingItemGroup = items[movingIndices.group].items; const destinationItemGroup = items[destinationIndices.group].items; const movedItemData = movingItemGroup[movingIndices.item]; movingItemGroup.splice(movingIndices.item, 1); destinationItemGroup.splice(destinationIndices.item, 0, movedItemData) }, _isItemIndex: function(index) { return index && (0, _type.isNumeric)(index.group) && (0, _type.isNumeric)(index.item) }, _getNormalizedItemIndex: function(itemElement) { const $item = (0, _renderer.default)(itemElement); const $group = $item.closest(".dx-list-group"); if (!$group.length) { return -1 } return combineIndex({ group: this._groupElements().index($group), item: this._groupItemElements($group).index($item) }) }, _normalizeItemIndex: function(index) { return combineIndex(index) }, _denormalizeItemIndex: function(index) { return splitIndex(index) }, _getItemByNormalizedIndex: function(index) { const indices = splitIndex(index); const $group = this._groupElements().eq(indices.group); return this._groupItemElements($group).eq(indices.item) }, _itemsFromSameParent: function(firstIndex, secondIndex) { return splitIndex(firstIndex).group === splitIndex(secondIndex).group } }); var _default = GroupedEditStrategy; exports.default = _default; module.exports = exports.default; module.exports.default = exports.default;