UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

112 lines (110 loc) 4.57 kB
/** * DevExtreme (esm/__internal/grids/tree_list/module_focus.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 { focusModule } from "../../../ui/grid_core/ui.grid_core.focus"; import core from "./module_core"; function findIndex(items, callback) { let result = -1; items.forEach((node, index) => { if (callback(node)) { result = index } }); return result } core.registerModule("focus", extend(true, {}, focusModule, { extenders: { controllers: { data: { changeRowExpand(key) { if (this.option("focusedRowEnabled") && this.isRowExpanded(key)) { if (this._isFocusedRowInside(key)) { this.option("focusedRowKey", key) } } return this.callBase.apply(this, arguments) }, _isFocusedRowInside(parentKey) { const focusedRowKey = this.option("focusedRowKey"); const rowIndex = this.getRowIndexByKey(focusedRowKey); const focusedRow = rowIndex >= 0 && this.getVisibleRows()[rowIndex]; let parent = focusedRow && focusedRow.node.parent; while (parent) { if (parent.key === parentKey) { return true } parent = parent.parent } return false }, getParentKey(key) { const dataSource = this._dataSource; const node = this.getNodeByKey(key); const d = new Deferred; if (node) { d.resolve(node.parent ? node.parent.key : void 0) } else { dataSource.load({ filter: [dataSource.getKeyExpr(), "=", key] }).done(items => { const parentData = items[0]; if (parentData) { d.resolve(dataSource.parentKeyOf(parentData)) } else { d.reject() } }).fail(d.reject) } return d.promise() }, expandAscendants(key) { const that = this; const dataSource = that._dataSource; const d = new Deferred; that.getParentKey(key).done(parentKey => { if (dataSource && void 0 !== parentKey && parentKey !== that.option("rootValue")) { dataSource._isNodesInitializing = true; that.expandRow(parentKey); dataSource._isNodesInitializing = false; that.expandAscendants(parentKey).done(d.resolve).fail(d.reject) } else { d.resolve() } }).fail(d.reject); return d.promise() }, getPageIndexByKey(key) { const that = this; const dataSource = that._dataSource; const d = new Deferred; that.expandAscendants(key).done(() => { dataSource.load({ parentIds: [] }).done(nodes => { const offset = findIndex(nodes, node => that.keyOf(node.data) === key); let pageIndex = -1; if (offset >= 0) { pageIndex = Math.floor(offset / that.pageSize()) } d.resolve(pageIndex) }).fail(d.reject) }).fail(d.reject); return d.promise() } } } } }));