devexpress-reporting
Version:
DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.
187 lines (186 loc) • 10.3 kB
JavaScript
/**
* DevExpress HTML/JS Reporting (designer\internal\dragdrop\_fieldListDragDropHandler.js)
* Version: 20.2.13
* Build date: Apr 10, 2023
* Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED
* License: https://www.devexpress.com/Support/EULAs/universal.xml
*/
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
require("jquery-ui/ui/widgets/draggable");
require("jquery-ui/ui/widgets/resizable");
require("jquery-ui/ui/widgets/selectable");
require("jquery-ui/ui/widgets/mouse");
var _utils_1 = require("./_utils");
var _getDataSourceDataMember_1 = require("../_getDataSourceDataMember");
var _dataBindingMode_1 = require("../_dataBindingMode");
var xrReport_1 = require("../../controls/xrReport");
var analytics_internal_1 = require("@devexpress/analytics-core/analytics-internal");
var analytics_utils_1 = require("@devexpress/analytics-core/analytics-utils");
var analytics_elements_1 = require("@devexpress/analytics-core/analytics-elements");
var ko = require("knockout");
var $ = require("jquery");
var _fieldListDragDropHelper_1 = require("./_fieldListDragDropHelper");
var FieldListDragDropHandler = (function (_super) {
__extends(FieldListDragDropHandler, _super);
function FieldListDragDropHandler(_canAddItems, surface, selection, _undoEngine, snapHelper, dragHelperContent, _dataSources, onComponentAdded) {
var _this = _super.call(this, surface, selection, _undoEngine, snapHelper, dragHelperContent) || this;
_this._canAddItems = _canAddItems;
_this._undoEngine = _undoEngine;
_this._dataSources = _dataSources;
_this._getKey = function (item) { return (item.data.isList || item.isMultiSelected()) ? 'List' : item.data.specifics; };
_this._isIcon = false;
_this._disposables.push(_this.dataBindingMode = ko.computed(function () { return surface() && surface()._control.dataBindingMode || _dataBindingMode_1.DataBindingMode.Expressions; }));
_this.cursor = 'arrow';
_this.onComponentAdded = function (e) { onComponentAdded && onComponentAdded(e); };
_this.containment = '.dxrd-designer';
_this['cursorAt'] = {
top: 0,
left: 0
};
_this['helper'] = function (draggable, event) {
_super.prototype.helper.call(_this, draggable);
var item = draggable;
_utils_1.selectTreeListItem(item, event);
_this._setDragHelperContent(_fieldListDragDropHelper_1.memberControlsMap, _this._getKey(item));
};
return _this;
}
FieldListDragDropHandler.prototype._setDragHelperContent = function (memberControlsMap, key) {
var size = (memberControlsMap[key] || memberControlsMap['Default']).size(this.surface());
this.recalculateSize(size);
this.dragHelperContent.reset();
this.dragHelperContent.setContent(new analytics_elements_1.Rectangle(0, 0, this._size.width(), this._size.height()));
};
FieldListDragDropHandler.prototype._getDropTarget = function (memberControlsMapElement) {
return memberControlsMapElement && memberControlsMapElement.adjustDropTarget && memberControlsMapElement.adjustDropTarget(this.selection.dropTarget) || this.selection.dropTarget;
};
FieldListDragDropHandler.prototype._needToChangeHelperContent = function (dragHelperContent, className) {
return dragHelperContent && dragHelperContent.className === className;
};
FieldListDragDropHandler.prototype._updateInnerControlSize = function (control) {
if (!control.rows)
return;
var cells = control.rows()[0].cells();
var innerControls = [];
cells.forEach(function (cell) {
innerControls = innerControls.concat(cell.controls());
});
if (innerControls.length === 0)
return;
var cellWidth = cells[0].width();
var cellHeight = cells[0].height();
innerControls.forEach(function (control) {
control.size.width(cellWidth);
control.size.height(cellHeight);
});
};
FieldListDragDropHandler.prototype._addControl = function (control, dropTarget) {
if (!control)
return;
this._undoEngine().start();
this.addControl(control, dropTarget, this._size);
this._updateInnerControlSize(control);
this._undoEngine().end();
var parent = dropTarget.getControlModel();
_utils_1.dragDropComponentAdded(control, parent);
this.onComponentAdded({ parent: parent, model: control });
};
FieldListDragDropHandler.prototype._isDefaultBindingAssigned = function (control, treeListItem) {
if (control['hasDefaultBindingProperty'] && !_utils_1.isList(treeListItem.data)) {
if (this.dataBindingMode() === _dataBindingMode_1.DataBindingMode.Bindings) {
var dataBinding = control.getDefaultBinding();
dataBinding.updateBinding(treeListItem.path, this._dataSources.peek());
}
else {
var dataSourceInfo = _getDataSourceDataMember_1.getDataSourceDataMember(control);
var expression = control.getDefaultBinding();
expression.value(_utils_1.getExpressionPath(control, new analytics_utils_1.PathRequest(treeListItem.path)));
}
return true;
}
return false;
};
FieldListDragDropHandler.prototype.canDrop = function (dropTarget, controlModel, metaData) {
var canDrop = _super.prototype.canDrop.call(this, dropTarget, controlModel, metaData);
return canDrop && (this._canAddItems() || this._isIcon);
};
FieldListDragDropHandler.prototype.drag = function (event, ui) {
this._isIcon = false;
if (this.selection.dropTarget) {
var element = event.target;
var draggable = ko.dataFor(element);
var key = this._getKey(draggable), dropTarget = this._getDropTarget(_fieldListDragDropHelper_1.memberControlsMap[key]);
var dropTargetControl = dropTarget.getControlModel();
var boundedClass = 'dxrd-image-ghost-bounded';
var dragHelperContent = this.dragHelperContent.controls()[0];
if (dropTargetControl['hasDefaultBindingProperty'] && !_utils_1.isList(draggable.data)) {
if (!this._needToChangeHelperContent(dragHelperContent, boundedClass)) {
var rect = new analytics_elements_1.Rectangle(12, 12, 12, 12);
rect.className = boundedClass;
this._size.width(12);
this._size.height(12);
this.dragHelperContent.reset();
this.dragHelperContent.setContent(rect);
}
$(element).draggable && $(element).draggable('option', 'snap', false);
this.snapHelper.deactivateSnapLines();
event.altKey = true;
this._isIcon = true;
}
else if (this._needToChangeHelperContent(dragHelperContent, boundedClass)) {
this._setDragHelperContent(_fieldListDragDropHelper_1.memberControlsMap, key);
}
}
_super.prototype.drag.call(this, event, ui);
};
FieldListDragDropHandler.prototype.doStopDrag = function (ui, draggable) {
var _this = this;
this.dragHelperContent.reset();
if (this.dragHelperContent.isLocked())
return;
if (this.selection.dropTarget) {
if (this.selection.dropTarget instanceof xrReport_1.ReportSurface)
return;
var position = this._getAbsoluteSurfacePosition(ui);
this.selection.dropTarget.underCursor().x = position.left - this.selection.dropTarget['absolutePosition'].x();
this.selection.dropTarget.underCursor().y = position.top - this.selection.dropTarget['absolutePosition'].y();
var item = draggable;
var key = item.data.isList ? 'List' : item.data.specifics;
if (this.surface().isFit && this.surface().isFit(this.selection.dropTarget) || this.selection.dropTarget.underCursor().isOver) {
var dropTarget = this._getDropTarget(_fieldListDragDropHelper_1.memberControlsMap[key]), dropTargetControl = dropTarget.getControlModel();
var isMultiSelect = item.selectedItems().length > 1;
if (!isMultiSelect && this._isDefaultBindingAssigned(dropTargetControl, item))
return;
dropTarget = dropTargetControl.getMetaData().isContainer ? dropTarget : dropTarget.parent;
if (!dropTarget.canDrop())
return;
if (!isMultiSelect && !_utils_1.isList(item.data)) {
var control = (_fieldListDragDropHelper_1.memberControlsMap[key] || _fieldListDragDropHelper_1.memberControlsMap['Default']).drop(item, dropTarget.getControlModel(), this.dataBindingMode());
this._addControl(control, dropTarget);
return;
}
_fieldListDragDropHelper_1.memberControlsMap[isMultiSelect ? 'MultiList' : key]
.drop(item, dropTarget.getControlModel(), this.dataBindingMode(), _fieldListDragDropHelper_1.memberControlsMap[isMultiSelect ? 'MultiList' : key].size(this.surface()))
.done(function (control) {
_this._addControl(control, dropTarget);
});
}
}
};
return FieldListDragDropHandler;
}(analytics_internal_1.DragDropHandler));
exports.FieldListDragDropHandler = FieldListDragDropHandler;