devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
130 lines (128 loc) • 5.52 kB
JavaScript
/**
* DevExtreme (cjs/__internal/grids/tree_list/rows/m_rows.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/
*/
"use strict";
var _events_engine = _interopRequireDefault(require("../../../../common/core/events/core/events_engine"));
var _remove = require("../../../../common/core/events/remove");
var _renderer = _interopRequireDefault(require("../../../../core/renderer"));
var _type = require("../../../../core/utils/type");
var _m_rows_view = require("../../../grids/grid_core/views/m_rows_view");
var _m_core = _interopRequireDefault(require("../m_core"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const TREELIST_TEXT_CONTENT = "dx-treelist-text-content";
const TREELIST_EXPAND_ICON_CONTAINER_CLASS = "dx-treelist-icon-container";
const TREELIST_CELL_EXPANDABLE_CLASS = "dx-treelist-cell-expandable";
const TREELIST_EMPTY_SPACE = "dx-treelist-empty-space";
const TREELIST_EXPANDED_CLASS = "dx-treelist-expanded";
const TREELIST_COLLAPSED_CLASS = "dx-treelist-collapsed";
const createCellContent = function($container) {
return (0, _renderer.default)("<div>").addClass(TREELIST_TEXT_CONTENT).appendTo($container)
};
const createIcon = function(hasIcon, isExpanded) {
const $iconElement = (0, _renderer.default)("<div>").addClass(TREELIST_EMPTY_SPACE);
if (hasIcon) {
$iconElement.toggleClass("dx-treelist-expanded", isExpanded).toggleClass("dx-treelist-collapsed", !isExpanded).append((0, _renderer.default)("<span>"))
}
return $iconElement
};
class TreeListRowsView extends _m_rows_view.RowsView {
_renderIconContainer($container, options) {
const $iconContainer = (0, _renderer.default)("<div>").addClass("dx-treelist-icon-container").appendTo($container);
if (options.watch) {
const dispose = options.watch((() => [options.row.level, options.row.isExpanded, options.row.node.hasChildren]), (() => {
$iconContainer.empty();
this._renderIcons($iconContainer, options)
}));
_events_engine.default.on($iconContainer, _remove.removeEvent, dispose)
}
$container.addClass("dx-treelist-cell-expandable");
return this._renderIcons($iconContainer, options)
}
_renderIcons($iconContainer, options) {
const {
row: row
} = options;
const {
level: level
} = row;
for (let i = 0; i <= level; i++) {
$iconContainer.append(createIcon(i === level && row.node.hasChildren, row.isExpanded))
}
return $iconContainer
}
_renderCellCommandContent(container, model) {
this._renderIconContainer(container, model);
return true
}
_processTemplate(template, options) {
var _options$column;
const that = this;
let resultTemplate;
const renderingTemplate = super._processTemplate(template);
const firstDataColumnIndex = that._columnsController.getFirstDataColumnIndex();
if (renderingTemplate && (null === (_options$column = options.column) || void 0 === _options$column ? void 0 : _options$column.index) === firstDataColumnIndex) {
resultTemplate = {
render(options) {
const $container = options.container;
if (that._renderCellCommandContent($container, options.model)) {
options.container = createCellContent($container)
}
renderingTemplate.render(options)
}
}
} else {
resultTemplate = renderingTemplate
}
return resultTemplate
}
_updateCell($cell, options) {
$cell = $cell.hasClass(TREELIST_TEXT_CONTENT) ? $cell.parent() : $cell;
super._updateCell($cell, options)
}
_rowClick(e) {
const dataController = this._dataController;
const $targetElement = (0, _renderer.default)(e.event.target);
const isExpandIcon = this.isExpandIcon($targetElement);
const item = null === dataController || void 0 === dataController ? void 0 : dataController.items()[e.rowIndex];
if (isExpandIcon && item) {
dataController.changeRowExpand(item.key)
}
super._rowClick(e)
}
_createRow(row) {
const node = row && row.node;
const $rowElement = super._createRow.apply(this, arguments);
if (node) {
this.setAria("level", row.level + 1, $rowElement);
if (node.hasChildren) {
this.setAriaExpandedAttribute($rowElement, row)
}
}
return $rowElement
}
_getGridRoleName() {
return "treegrid"
}
isExpandIcon($targetElement) {
return !!$targetElement.closest(".dx-treelist-expanded, .dx-treelist-collapsed").length
}
setAriaExpandedAttribute($row, row) {
const isRowExpanded = row.isExpanded;
this.setAria("expanded", (0, _type.isDefined)(isRowExpanded) && isRowExpanded.toString(), $row)
}
}
_m_core.default.registerModule("rows", {
defaultOptions: _m_rows_view.rowsModule.defaultOptions,
views: {
rowsView: TreeListRowsView
}
});