devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
214 lines (212 loc) • 9.16 kB
JavaScript
/**
* DevExtreme (cjs/__internal/grids/tree_list/editing/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/
*/
"use strict";
var __importDefault = this && this.__importDefault || function(mod) {
return mod && mod.__esModule ? mod : {
default: mod
}
};
Object.defineProperty(exports, "__esModule", {
value: true
});
require("../module_not_extended/editor_factory");
var renderer_1 = __importDefault(require("../../../../core/renderer"));
var type_1 = require("../../../../core/utils/type");
var extend_1 = require("../../../../core/utils/extend");
var deferred_1 = require("../../../../core/utils/deferred");
var message_1 = __importDefault(require("../../../../localization/message"));
var ui_errors_1 = __importDefault(require("../../../../ui/widget/ui.errors"));
var ui_grid_core_utils_1 = __importDefault(require("../../../../ui/grid_core/ui.grid_core.utils"));
var ui_grid_core_editing_1 = require("../../../../ui/grid_core/ui.grid_core.editing");
var module_core_1 = __importDefault(require("../module_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";
var EditingController = ui_grid_core_editing_1.editingModule.controllers.editing.inherit({
_generateNewItem: function(key) {
var item = this.callBase(key);
item.data = {
key: key
};
item.children = [];
item.level = 0;
item.parentKey = this.option("rootValue");
return item
},
_isProcessedItem: function() {
return true
},
_setInsertAfterOrBeforeKey: function(change, parentKey) {
if (void 0 !== parentKey && parentKey !== this.option("rootValue")) {
change.insertAfterKey = parentKey
} else {
this.callBase.apply(this, arguments)
}
},
_getLoadedRowIndex: function(items, change) {
var dataController = this.getController("data");
var dataSourceAdapter = 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 = ui_grid_core_utils_1.default.getIndexByKey(parentKey, items);
if (rowIndex >= 0 && this._dataController.isRowExpanded(parentKey)) {
return rowIndex + 1
}
return -1
}
return this.callBase.apply(this, arguments)
},
_isEditColumnVisible: function() {
var result = this.callBase.apply(this, arguments);
var editingOptions = this.option("editing");
return result || editingOptions.allowAdding
},
_isDefaultButtonVisible: function(button, options) {
var result = this.callBase.apply(this, arguments);
var row = options.row;
if ("add" === button.name) {
return this.allowAdding(options) && row.rowIndex !== this._getVisibleEditRowIndex() && !(row.removed || row.isNewRow)
}
return result
},
_getEditingButtons: function(options) {
var buttons = this.callBase.apply(this, arguments);
if (!options.column.buttons) {
buttons.unshift(this._getButtonConfig("add", options))
}
return buttons
},
_beforeSaveEditData: function(change) {
var dataController = this._dataController;
var result = this.callBase.apply(this, arguments);
if (change && change.type !== DATA_EDIT_DATA_INSERT_TYPE) {
var store = null === dataController || void 0 === dataController ? void 0 : dataController.store();
var key = null === store || void 0 === store ? void 0 : store.key();
if (!type_1.isDefined(key)) {
throw ui_errors_1.default.Error("E1045")
}
}
return result
},
addRowByRowIndex: function(rowIndex) {
var dataController = this.getController("data");
var row = dataController.getVisibleRows()[rowIndex];
return this.addRow(row ? row.key : void 0)
},
addRow: function(key) {
if (void 0 === key) {
key = this.option("rootValue")
}
return this.callBase.call(this, key)
},
_addRowCore: function(data, parentKey, oldEditRowIndex) {
var _this = this;
var callBase = this.callBase;
var rootValue = this.option("rootValue");
var dataController = this.getController("data");
var dataSourceAdapter = dataController.dataSource();
var parentKeyGetter = dataSourceAdapter.createParentIdGetter();
parentKey = parentKeyGetter(data);
if (void 0 !== parentKey && parentKey !== rootValue && !dataController.isRowExpanded(parentKey)) {
var deferred_2 = new deferred_1.Deferred;
dataController.expandRow(parentKey).done((function() {
setTimeout((function() {
callBase.call(_this, data, parentKey, oldEditRowIndex).done(deferred_2.resolve).fail(deferred_2.reject)
}))
})).fail(deferred_2.reject);
return deferred_2.promise()
}
return callBase.call(this, data, parentKey, oldEditRowIndex)
},
_initNewRow: function(options, parentKey) {
var dataController = this.getController("data");
var dataSourceAdapter = dataController.dataSource();
var parentIdSetter = dataSourceAdapter.createParentIdSetter();
parentIdSetter(options.data, parentKey);
return this.callBase.apply(this, arguments)
},
allowAdding: function(options) {
return this._allowEditAction("allowAdding", options)
},
_needToCloseEditableCell: function($targetElement) {
return this.callBase.apply(this, arguments) || $targetElement.closest("." + TREELIST_EXPAND_ICON_CONTAINER_CLASS).length && this.isEditing()
},
getButtonLocalizationNames: function() {
var names = this.callBase.apply(this);
names.add = "dxTreeList-editingAddRowToNode";
return names
}
});
var originalRowClick = ui_grid_core_editing_1.editingModule.extenders.views.rowsView._rowClick;
var originalRowDblClick = ui_grid_core_editing_1.editingModule.extenders.views.rowsView._rowDblClick;
var validateClick = function(e) {
var $targetElement = renderer_1.default(e.event.target);
var originalClickHandler = "dxdblclick" === e.event.type ? originalRowDblClick : originalRowClick;
if ($targetElement.closest("." + SELECT_CHECKBOX_CLASS).length) {
return false
}
return !needToCallOriginalClickHandler.call(this, e, originalClickHandler)
};
function needToCallOriginalClickHandler(e, originalClickHandler) {
var $targetElement = renderer_1.default(e.event.target);
if (!$targetElement.closest("." + TREELIST_EXPAND_ICON_CONTAINER_CLASS).length) {
originalClickHandler.call(this, e);
return true
}
return false
}
var RowsViewExtender = extend_1.extend({}, ui_grid_core_editing_1.editingModule.extenders.views.rowsView, {
_renderCellCommandContent: function($container, options) {
var editingController = this._editingController;
var isEditRow = options.row && editingController.isEditRow(options.row.rowIndex);
var isEditing = options.isEditing || isEditRow;
if (!isEditing) {
return this.callBase.apply(this, arguments)
}
return false
},
_rowClick: function(e) {
if (validateClick.call(this, e)) {
this.callBase.apply(this, arguments)
}
},
_rowDblClick: function(e) {
if (validateClick.call(this, e)) {
this.callBase.apply(this, arguments)
}
}
});
module_core_1.default.registerModule("editing", {
defaultOptions: function() {
return extend_1.extend(true, ui_grid_core_editing_1.editingModule.defaultOptions(), {
editing: {
texts: {
addRowToNode: message_1.default.format("dxTreeList-editingAddRowToNode")
}
}
})
},
controllers: {
editing: EditingController
},
extenders: {
controllers: extend_1.extend(true, {}, ui_grid_core_editing_1.editingModule.extenders.controllers, {
data: {
changeRowExpand: function() {
this._editingController.refresh();
return this.callBase.apply(this, arguments)
}
}
}),
views: {
rowsView: RowsViewExtender,
headerPanel: ui_grid_core_editing_1.editingModule.extenders.views.headerPanel
}
}
});