Merge commit '9e427d4c6c95a17d0026819db09136d20279a47c' into def_releases_202112131635033_ali-lowcode_ali-lowcode-engine/1.0.75

This commit is contained in:
tbfed 2021-12-14 17:31:07 +08:00
commit 049d9545df

View File

@ -7,6 +7,8 @@ import { Node, DocumentModel } from '../document';
import { ISimulatorHost, isSimulatorHost, NodeInstance, ComponentInstance } from '../simulator';
import { Designer } from './designer';
export type DragObjectReducer = (dragObject: DragObject) => DragObject;
export interface LocateEvent {
readonly type: 'LocateEvent';
/**
@ -193,7 +195,7 @@ function isDragEvent(e: any): e is DragEvent {
*/
export class Dragon {
private sensors: ISensor[] = [];
private dragObjectTransducers: DragObjectReducer[] = [];
/**
* current active sensor,
*/
@ -243,16 +245,41 @@ export class Dragon {
};
}
/**
* change dragObject
*
* @param fn
*/
addDragObjectReducer(fn: DragObjectReducer) {
this.dragObjectTransducers.push(fn);
}
transformDragObject(dragObject: DragObject) {
if (!this.dragObjectTransducers?.length) {
return dragObject;
}
return this.dragObjectTransducers.reduce((preDragObject, reducer) => {
try {
return reducer(preDragObject);
} catch (e) {
console.warn(e);
return preDragObject;
}
}, dragObject);
}
/**
* boost your dragObject for dragging(flying)
*
* @param dragObject
* @param boostEvent
*/
boost(dragObject: DragObject, boostEvent: MouseEvent | DragEvent, fromRglNode?: Node) {
boost(dragObjectWrap: DragObject, boostEvent: MouseEvent | DragEvent, fromRglNode?: Node) {
const { designer } = this;
const masterSensors = this.getMasterSensors();
const handleEvents = makeEventsHandler(boostEvent, masterSensors);
const dragObject = this.transformDragObject(dragObjectWrap);
const newBie = !isDragNodeObject(dragObject);
const forceCopyState =
isDragNodeObject(dragObject) && dragObject.nodes.some((node) => node.isSlot());