UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

276 lines (275 loc) • 10.4 kB
/** * DevExtreme (esm/ui/gantt/ui.gantt.treelist.js) * Version: 21.2.4 * Build date: Mon Dec 06 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { getHeight } from "../../core/utils/size"; import $ from "../../core/renderer"; import dxTreeList from "../tree_list"; import { getBoundingRect } from "../../core/utils/position"; import { isDefined } from "../../core/utils/type"; import { GanttHelper } from "./ui.gantt.helper"; var GANTT_TASKS = "tasks"; var GANTT_COLLAPSABLE_ROW = "dx-gantt-collapsable-row"; var GANTT_DEFAULT_ROW_HEIGHT = 34; export class GanttTreeList { constructor(gantt) { this._gantt = gantt; this._$treeList = this._gantt._$treeList } getTreeList() { var { keyExpr: keyExpr, parentIdExpr: parentIdExpr } = this._gantt.option(GANTT_TASKS); this._treeList = this._gantt._createComponent(this._$treeList, dxTreeList, { dataSource: this._gantt._tasksRaw, keyExpr: keyExpr, parentIdExpr: parentIdExpr, columns: this.getColumns(), columnResizingMode: "nextColumn", height: this._getHeight(), width: this._gantt.option("taskListWidth"), selection: { mode: GanttHelper.getSelectionMode(this._gantt.option("allowSelection")) }, selectedRowKeys: GanttHelper.getArrayFromOneElement(this._gantt.option("selectedRowKey")), sorting: this._gantt.option("sorting"), filterRow: this._gantt.option("filterRow"), headerFilter: this._gantt.option("headerFilter"), scrolling: { showScrollbar: "onHover", mode: "virtual" }, allowColumnResizing: true, autoExpandAll: true, showRowLines: this._gantt.option("showRowLines"), rootValue: this._gantt.option("rootValue"), onContentReady: e => { this._onContentReady(e) }, onSelectionChanged: e => { this._onSelectionChanged(e) }, onRowCollapsed: e => { this._onRowCollapsed(e) }, onRowExpanded: e => { this._onRowExpanded(e) }, onRowPrepared: e => { this._onRowPrepared(e) }, onContextMenuPreparing: e => { this._onContextMenuPreparing(e) }, onRowClick: e => { this.onRowClick(e) }, onRowDblClick: e => { this.onRowDblClick(e) } }); return this._treeList } onAfterTreeListCreate() { if (this._postponedGanttInitRequired) { this._initGanttOnContentReady({ component: this._treeList }); delete this._postponedGanttInitRequired } } _onContentReady(e) { var hasTreeList = !!this._treeList; if (hasTreeList) { this._initGanttOnContentReady(e) } else { this._postponedGanttInitRequired = true } } _initGanttOnContentReady(e) { if (e.component.getDataSource()) { this._gantt._initGanttView(); this._initScrollSync(e.component) } this._gantt._sortAndFilter(); this._gantt._sizeHelper.updateGanttRowHeights() } _onSelectionChanged(e) { var selectedRowKey = e.currentSelectedRowKeys[0]; this._gantt._setGanttViewOption("selectedRowKey", selectedRowKey); this._gantt._setOptionWithoutOptionChange("selectedRowKey", selectedRowKey); this._gantt._actionsManager.raiseSelectionChangedAction(selectedRowKey) } _onRowCollapsed(e) { this._gantt._onTreeListRowExpandChanged(e, false) } _onRowExpanded(e) { this._gantt._onTreeListRowExpandChanged(e, true) } _onRowPrepared(e) { if ("data" === e.rowType && e.node.children.length > 0) { $(e.rowElement).addClass(GANTT_COLLAPSABLE_ROW) } } _onContextMenuPreparing(e) { var _e$row, _e$row2; if ("header" === e.target) { return } if ("data" === (null === (_e$row = e.row) || void 0 === _e$row ? void 0 : _e$row.rowType)) { this.setOption("selectedRowKeys", [e.row.data[this._gantt.option("tasks.keyExpr")]]) } e.items = []; var info = { cancel: false, event: e.event, type: "task", key: null === (_e$row2 = e.row) || void 0 === _e$row2 ? void 0 : _e$row2.key, position: { x: e.event.pageX, y: e.event.pageY } }; this._gantt._showPopupMenu(info) } _getHeight() { if (getHeight(this._$treeList)) { return getHeight(this._$treeList) } this._gantt._hasHeight = isDefined(this._gantt.option("height")) && "" !== this._gantt.option("height"); return this._gantt._hasHeight ? "100%" : "" } _initScrollSync(treeList) { var treeListScrollable = treeList.getScrollable(); if (treeListScrollable) { treeListScrollable.off("scroll"); treeListScrollable.on("scroll", e => { this._onScroll(e) }) } } _onScroll(treeListScrollView) { var ganttViewTaskAreaContainer = this._gantt._ganttView.getTaskAreaContainer(); if (ganttViewTaskAreaContainer.scrollTop !== treeListScrollView.component.scrollTop()) { ganttViewTaskAreaContainer.scrollTop = treeListScrollView.component.scrollTop() } } _correctRowsViewRowHeight(height) { var view = this._treeList._views && this._treeList._views.rowsView; if ((null === view || void 0 === view ? void 0 : view._rowHeight) !== height) { view._rowHeight = height } } _skipUpdateTreeListDataSource() { return this._gantt.option("validation.autoUpdateParentTasks") } selectRows(keys) { this.setOption("selectedRowKeys", keys) } scrollBy(scrollTop) { var treeListScrollable = this._treeList.getScrollable(); if (treeListScrollable) { var diff = scrollTop - treeListScrollable.scrollTop(); if (0 !== diff) { treeListScrollable.scrollBy({ left: 0, top: diff }) } } } updateDataSource(data) { var forceUpdate = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : false; var forceCustomData = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : false; var expandedRowKeys = this.getOption("expandedRowKeys"); if (!this._skipUpdateTreeListDataSource() || forceUpdate) { this.setOption("dataSource", data) } else if (forceCustomData) { var _data = this._treeList.option("dataSource"); this._gantt._onParentTasksRecalculated(_data) } this.setOption("expandedRowKeys", expandedRowKeys) } onRowClick(e) { this._gantt._actionsManager.raiseTaskClickAction(e.key, e.event) } onRowDblClick(e) { if (this._gantt._actionsManager.raiseTaskDblClickAction(e.key, e.event)) { this._gantt._ganttView._ganttViewCore.showTaskEditDialog() } } getOffsetHeight() { return this._gantt._treeList._$element.get(0).offsetHeight } getRowHeight() { var $row = this._treeList._$element.find(".dx-data-row"); var height = $row.length ? getBoundingRect($row.last().get(0)).height : GANTT_DEFAULT_ROW_HEIGHT; if (!height) { height = GANTT_DEFAULT_ROW_HEIGHT } this._correctRowsViewRowHeight(height); return height } getHeaderHeight() { return getBoundingRect(this._treeList._$element.find(".dx-treelist-headers").get(0)).height } getColumns() { var columns = this._gantt.option("columns"); if (columns) { for (var i = 0; i < columns.length; i++) { var column = columns[i]; var isKeyColumn = column.dataField === this._gantt.option("".concat(GANTT_TASKS, ".keyExpr")) || column.dataField === this._gantt.option("".concat(GANTT_TASKS, ".parentIdExpr")); if (isKeyColumn && !column.dataType) { column.dataType = "object" } } } return columns } getSievedItems() { var rootNode = this._treeList.getRootNode(); if (!rootNode) { return } var resultArray = []; GanttHelper.convertTreeToList(rootNode, resultArray); var getters = GanttHelper.compileGettersByOption(this._gantt.option(GANTT_TASKS)); var validatedData = this._gantt._validateSourceData(GANTT_TASKS, resultArray); var mappedData = validatedData.map(GanttHelper.prepareMapHandler(getters)); return mappedData } setOption(optionName, value) { this._treeList && this._treeList.option(optionName, value) } getOption(optionName) { return this._treeList.option(optionName) } onTaskInserted(insertedId, parentId) { if (isDefined(parentId)) { var expandedRowKeys = this.getOption("expandedRowKeys"); if (-1 === expandedRowKeys.indexOf(parentId)) { expandedRowKeys.push(parentId); this.setOption("expandedRowKeys", expandedRowKeys) } } this.selectRows(GanttHelper.getArrayFromOneElement(insertedId)); this.setOption("focusedRowKey", insertedId) } getDataSource() { var _this$_treeList; return null === (_this$_treeList = this._treeList) || void 0 === _this$_treeList ? void 0 : _this$_treeList.getDataSource() } }