UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

186 lines (185 loc) 5.95 kB
/** * DevExtreme (esm/__internal/grids/tree_list/data_controller/module.js) * Version: 22.1.9 * Build date: Tue Apr 18 2023 * * Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { extend } from "../../../../core/utils/extend"; import { Deferred } from "../../../../core/utils/deferred"; import { equalByValue } from "../../../../core/utils/common"; import { dataControllerModule } from "../../../../ui/grid_core/ui.grid_core.data_controller"; import treeListCore from "../module_core"; import dataSourceAdapterProvider from "../data_source_adapter/module"; export const DataController = dataControllerModule.controllers.data.inherit({ _getDataSourceAdapter: () => dataSourceAdapterProvider, _getNodeLevel(node) { let level = -1; while (node.parent) { if (node.visible) { level++ } node = node.parent } return level }, _generateDataItem(node, options) { return { rowType: "data", node: node, key: node.key, data: node.data, isExpanded: this.isRowExpanded(node.key, options), level: this._getNodeLevel(node) } }, _loadOnOptionChange() { this._dataSource.load() }, _isItemEquals(item1, item2) { if (!this.callBase.apply(this, arguments)) { return false } if (item1.node && item2.node && item1.node.hasChildren !== item2.node.hasChildren) { return false } if (item1.level !== item2.level || item1.isExpanded !== item2.isExpanded) { return false } return true }, init() { this.createAction("onRowExpanding"); this.createAction("onRowExpanded"); this.createAction("onRowCollapsing"); this.createAction("onRowCollapsed"); this.callBase.apply(this, arguments) }, keyOf(data) { const dataSource = this._dataSource; if (dataSource) { return dataSource.keyOf(data) } }, key() { const dataSource = this._dataSource; if (dataSource) { return dataSource.getKeyExpr() } }, publicMethods() { return this.callBase().concat(["expandRow", "collapseRow", "isRowExpanded", "getRootNode", "getNodeByKey", "loadDescendants", "forEachNode"]) }, changeRowExpand(key) { if (this._dataSource) { const args = { key: key }; const isExpanded = this.isRowExpanded(key); this.executeAction(isExpanded ? "onRowCollapsing" : "onRowExpanding", args); if (!args.cancel) { return this._dataSource.changeRowExpand(key).done(() => { this.executeAction(isExpanded ? "onRowCollapsed" : "onRowExpanded", args) }) } } return (new Deferred).resolve() }, isRowExpanded(key, cache) { return this._dataSource && this._dataSource.isRowExpanded(key, cache) }, expandRow(key) { if (!this.isRowExpanded(key)) { return this.changeRowExpand(key) } return (new Deferred).resolve() }, collapseRow(key) { if (this.isRowExpanded(key)) { return this.changeRowExpand(key) } return (new Deferred).resolve() }, getRootNode() { return this._dataSource && this._dataSource.getRootNode() }, optionChanged(args) { switch (args.name) { case "rootValue": case "parentIdExpr": case "itemsExpr": case "filterMode": case "expandNodesOnFiltering": case "autoExpandAll": case "hasItemsExpr": case "dataStructure": this._columnsController.reset(); this._items = []; this._refreshDataSource(); args.handled = true; break; case "expandedRowKeys": case "onNodesInitialized": if (this._dataSource && !this._dataSource._isNodesInitializing && !equalByValue(args.value, args.previousValue)) { this._loadOnOptionChange() } args.handled = true; break; case "maxFilterLengthInRequest": args.handled = true; break; default: this.callBase(args) } }, getNodeByKey(key) { if (!this._dataSource) { return } return this._dataSource.getNodeByKey(key) }, getChildNodeKeys(parentKey) { if (!this._dataSource) { return } return this._dataSource.getChildNodeKeys(parentKey) }, loadDescendants(keys, childrenOnly) { if (!this._dataSource) { return } return this._dataSource.loadDescendants(keys, childrenOnly) }, forEachNode() { this._dataSource.forEachNode.apply(this, arguments) } }); treeListCore.registerModule("data", { defaultOptions: () => extend({}, dataControllerModule.defaultOptions(), { itemsExpr: "items", parentIdExpr: "parentId", rootValue: 0, dataStructure: "plain", expandedRowKeys: [], filterMode: "withAncestors", expandNodesOnFiltering: true, autoExpandAll: false, onNodesInitialized: null, maxFilterLengthInRequest: 1500, paging: { enabled: false } }), controllers: { data: DataController } });