devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
182 lines (180 loc) • 7.68 kB
JavaScript
/**
* DevExtreme (ui/tree_list/ui.tree_list.editing.js)
* Version: 18.2.18
* Build date: Tue Oct 18 2022
*
* Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
require("./ui.tree_list.editor_factory");
var _renderer = require("../../core/renderer");
var _renderer2 = _interopRequireDefault(_renderer);
var _ui = require("../widget/ui.errors");
var _ui2 = _interopRequireDefault(_ui);
var _type = require("../../core/utils/type");
var _extend = require("../../core/utils/extend");
var _deferred = require("../../core/utils/deferred");
var _message = require("../../localization/message");
var _message2 = _interopRequireDefault(_message);
var _uiTree_list = require("./ui.tree_list.core");
var _uiTree_list2 = _interopRequireDefault(_uiTree_list);
var _uiGrid_core = require("../grid_core/ui.grid_core.utils");
var _uiGrid_core2 = _interopRequireDefault(_uiGrid_core);
var _uiGrid_core3 = require("../grid_core/ui.grid_core.editing");
var _uiGrid_core4 = _interopRequireDefault(_uiGrid_core3);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
"default": obj
}
}
var TREELIST_EXPAND_ICON_CONTAINER_CLASS = "dx-treelist-icon-container",
SELECT_CHECKBOX_CLASS = "dx-select-checkbox",
DATA_EDIT_DATA_INSERT_TYPE = "insert";
var EditingController = _uiGrid_core4.default.controllers.editing.inherit(function() {
return {
_generateNewItem: function(key) {
var item = this.callBase(key);
item.data = {
key: key
};
item.children = [];
item.level = 0;
item.parentKey = this.option("rootValue");
return item
},
_needInsertItem: function(editData, changeType, items, item) {
var parentKey = editData.key.parentKey;
if (void 0 !== parentKey && parentKey !== this.option("rootValue")) {
var rowIndex = _uiGrid_core2.default.getIndexByKey(parentKey, items);
if (rowIndex >= 0 && this._dataController.isRowExpanded(parentKey)) {
items.splice(rowIndex + 1, 0, item)
}
return false
}
return this.callBase.apply(this, arguments)
},
_isEditColumnVisible: function() {
var result = this.callBase.apply(this, arguments),
editingOptions = this.option("editing");
return result || editingOptions && editingOptions.allowAdding
},
_isDefaultButtonVisible: function(button, options) {
var result = this.callBase.apply(this, arguments),
row = options.row;
if ("add" === button.name) {
return this.allowAdding(options) && row.rowIndex !== this._getVisibleEditRowIndex() && !(row.removed || row.inserted)
}
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(editData) {
var key, store, dataController = this._dataController,
result = this.callBase.apply(this, arguments);
if (editData && editData.type !== DATA_EDIT_DATA_INSERT_TYPE) {
store = dataController && dataController.store();
key = store && store.key();
if (!(0, _type.isDefined)(key)) {
throw _ui2.default.Error("E1045")
}
}
return result
},
addRowByRowIndex: function(rowIndex) {
var dataController = this.getController("data"),
row = dataController.getVisibleRows()[rowIndex];
return this.addRow(row ? row.key : void 0)
},
addRow: function(key) {
var that = this,
callBase = this.callBase,
dataController = this.getController("data");
if (void 0 !== key && !dataController.isRowExpanded(key)) {
var d = new _deferred.Deferred;
dataController.expandRow(key).done(function() {
setTimeout(function() {
callBase.call(that, key);
d.resolve()
})
}).fail(d.reject);
return d
}
callBase.call(that, key)
},
_initNewRow: function(options, insertKey) {
var parentKey = insertKey.parentKey,
dataController = this.getController("data"),
dataSourceAdapter = dataController.dataSource(),
parentIdSetter = dataSourceAdapter.createParentIdSetter();
if (void 0 === parentKey) {
parentKey = this.option("rootValue");
insertKey.parentKey = parentKey
}
parentIdSetter(options.data, parentKey);
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()
}
}
}());
var originalRowClick = _uiGrid_core4.default.extenders.views.rowsView._rowClick;
var RowsViewExtender = (0, _extend.extend)({}, _uiGrid_core4.default.extenders.views.rowsView, {
_renderCellCommandContent: function($container, options) {
var editingController = this._editingController,
isEditRow = options.row && editingController.isEditRow(options.row.rowIndex),
isEditing = options.isEditing || isEditRow;
if (!isEditing) {
return this.callBase.apply(this, arguments)
}
return false
},
_rowClick: function(e) {
var $targetElement = (0, _renderer2.default)(e.event.target);
if ($targetElement.closest("." + SELECT_CHECKBOX_CLASS).length) {
return
}
if ($targetElement.closest("." + TREELIST_EXPAND_ICON_CONTAINER_CLASS).length) {
this.callBase.apply(this, arguments)
} else {
originalRowClick.apply(this, arguments)
}
}
});
_uiTree_list2.default.registerModule("editing", {
defaultOptions: function() {
return (0, _extend.extend)(true, _uiGrid_core4.default.defaultOptions(), {
editing: {
texts: {
addRowToNode: _message2.default.format("dxTreeList-editingAddRowToNode")
}
}
})
},
controllers: {
editing: EditingController
},
extenders: {
controllers: (0, _extend.extend)(true, {}, _uiGrid_core4.default.extenders.controllers, {
data: {
changeRowExpand: function() {
this._editingController.refresh();
return this.callBase.apply(this, arguments)
}
}
}),
views: {
rowsView: RowsViewExtender,
headerPanel: _uiGrid_core4.default.extenders.views.headerPanel
}
}
});