devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
206 lines (205 loc) • 8.06 kB
JavaScript
/**
* DevExtreme (esm/__internal/grids/tree_list/editing/m_editing.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/
*/
import "../module_not_extended/editor_factory";
import $ from "../../../../core/renderer";
import {
Deferred
} from "../../../../core/utils/deferred";
import {
extend
} from "../../../../core/utils/extend";
import {
isDefined
} from "../../../../core/utils/type";
import messageLocalization from "../../../../localization/message";
import errors from "../../../../ui/widget/ui.errors";
import {
dataControllerEditingExtenderMixin,
editingModule
} from "../../../grids/grid_core/editing/m_editing";
import gridCoreUtils from "../../../grids/grid_core/m_utils";
import treeListCore from "../m_core";
var TREELIST_EXPAND_ICON_CONTAINER_CLASS = "dx-treelist-icon-container";
var SELECT_CHECKBOX_CLASS = "dx-select-checkbox";
var DATA_EDIT_DATA_INSERT_TYPE = "insert";
class EditingController extends editingModule.controllers.editing {
_generateNewItem(key) {
var item = super._generateNewItem(key);
item.data = {
key: key
};
item.children = [];
item.level = 0;
item.parentKey = this.option("rootValue");
return item
}
_isProcessedItem() {
return true
}
_setInsertAfterOrBeforeKey(change, parentKey) {
if (void 0 !== parentKey && parentKey !== this.option("rootValue")) {
change.insertAfterKey = parentKey
} else {
super._setInsertAfterOrBeforeKey.apply(this, arguments)
}
}
_getLoadedRowIndex(items, change) {
var dataSourceAdapter = this._dataController.dataSource();
var parentKey = null === dataSourceAdapter || void 0 === dataSourceAdapter ? void 0 : dataSourceAdapter.parentKeyOf(change.data);
if (void 0 !== parentKey && parentKey !== this.option("rootValue")) {
var rowIndex = gridCoreUtils.getIndexByKey(parentKey, items);
if (rowIndex >= 0 && this._dataController.isRowExpanded(parentKey)) {
return rowIndex + 1
}
return -1
}
return super._getLoadedRowIndex.apply(this, arguments)
}
_isEditColumnVisible() {
var result = super._isEditColumnVisible.apply(this, arguments);
var editingOptions = this.option("editing");
return result || editingOptions.allowAdding
}
_isDefaultButtonVisible(button, options) {
var result = super._isDefaultButtonVisible.apply(this, arguments);
var {
row: row
} = options;
if ("add" === button.name) {
return this.allowAdding(options) && row.rowIndex !== this._getVisibleEditRowIndex() && !(row.removed || row.isNewRow)
}
return result
}
_getEditingButtons(options) {
var buttons = super._getEditingButtons.apply(this, arguments);
if (!options.column.buttons) {
buttons.unshift(this._getButtonConfig("add", options))
}
return buttons
}
_beforeSaveEditData(change) {
var _a;
var result = super._beforeSaveEditData.apply(this, arguments);
if (change && change.type !== DATA_EDIT_DATA_INSERT_TYPE) {
var store = null === (_a = this._dataController) || void 0 === _a ? void 0 : _a.store();
var key = null === store || void 0 === store ? void 0 : store.key();
if (!isDefined(key)) {
throw errors.Error("E1045")
}
}
return result
}
addRowByRowIndex(rowIndex) {
var row = this._dataController.getVisibleRows()[rowIndex];
return this.addRow(row ? row.key : void 0)
}
addRow(key) {
if (void 0 === key) {
key = this.option("rootValue")
}
return super.addRow.call(this, key)
}
_addRowCore(data, parentKey, oldEditRowIndex) {
var rootValue = this.option("rootValue");
var dataSourceAdapter = this._dataController.dataSource();
var parentKeyGetter = dataSourceAdapter.createParentIdGetter();
parentKey = parentKeyGetter(data);
if (void 0 !== parentKey && parentKey !== rootValue && !this._dataController.isRowExpanded(parentKey)) {
var deferred = new Deferred;
this._dataController.expandRow(parentKey).done(() => {
setTimeout(() => {
super._addRowCore.call(this, data, parentKey, oldEditRowIndex).done(deferred.resolve).fail(deferred.reject)
})
}).fail(deferred.reject);
return deferred.promise()
}
return super._addRowCore.call(this, data, parentKey, oldEditRowIndex)
}
_initNewRow(options, parentKey) {
var dataSourceAdapter = this._dataController.dataSource();
var parentIdSetter = dataSourceAdapter.createParentIdSetter();
parentIdSetter(options.data, parentKey);
return super._initNewRow.apply(this, arguments)
}
allowAdding(options) {
return this._allowEditAction("allowAdding", options)
}
_needToCloseEditableCell($targetElement) {
return super._needToCloseEditableCell.apply(this, arguments) || $targetElement.closest(".".concat(TREELIST_EXPAND_ICON_CONTAINER_CLASS)).length && this.isEditing()
}
getButtonLocalizationNames() {
var names = super.getButtonLocalizationNames.apply(this);
names.add = "dxTreeList-editingAddRowToNode";
return names
}
}
var rowsView = Base => class extends(editingModule.extenders.views.rowsView(Base)) {
_renderCellCommandContent($container, options) {
var editingController = this._editingController;
var isEditRow = options.row && editingController.isEditRow(options.row.rowIndex);
var isEditing = options.isEditing || isEditRow;
if (!isEditing) {
return super._renderCellCommandContent.apply(this, arguments)
}
return false
}
validateClick(e) {
var $targetElement = $(e.event.target);
var originalClickHandler = "dxdblclick" === e.event.type ? super._rowDblClick : super._rowClick;
if ($targetElement.closest(".".concat(SELECT_CHECKBOX_CLASS)).length) {
return false
}
return !this.needToCallOriginalClickHandler(e, originalClickHandler)
}
needToCallOriginalClickHandler(e, originalClickHandler) {
var $targetElement = $(e.event.target);
if (!$targetElement.closest(".".concat(TREELIST_EXPAND_ICON_CONTAINER_CLASS)).length) {
originalClickHandler.call(this, e);
return true
}
return false
}
_rowClick(e) {
if (this.validateClick(e)) {
super._rowClickTreeListHack.apply(this, arguments)
}
}
_rowDblClick(e) {
if (this.validateClick(e)) {
super._rowDblClickTreeListHack.apply(this, arguments)
}
}
};
var data = Base => class extends(dataControllerEditingExtenderMixin(Base)) {
changeRowExpand() {
this._editingController.refresh();
return super.changeRowExpand.apply(this, arguments)
}
};
treeListCore.registerModule("editing", {
defaultOptions: () => extend(true, editingModule.defaultOptions(), {
editing: {
texts: {
addRowToNode: messageLocalization.format("dxTreeList-editingAddRowToNode")
}
}
}),
controllers: {
editing: EditingController
},
extenders: {
controllers: {
data: data
},
views: {
rowsView: rowsView,
headerPanel: editingModule.extenders.views.headerPanel
}
}
});