@foblex/flow
Version:
An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.
30 lines • 4.45 kB
JavaScript
import { PointExtensions } from '@foblex/2d';
export class FNodeMoveDragHandler {
fNode;
fSourceHandlers;
fTargetHandlers;
fEventType = 'move-node';
_onPointerDownPosition = PointExtensions.initialize();
constructor(fNode, fSourceHandlers = [], fTargetHandlers = []) {
this.fNode = fNode;
this.fSourceHandlers = fSourceHandlers;
this.fTargetHandlers = fTargetHandlers;
this._onPointerDownPosition = { ...fNode.position };
}
onPointerMove(difference) {
this._redraw(this._calculateNewPosition(difference));
this.fSourceHandlers.forEach((x) => x.setSourceDifference(difference));
this.fTargetHandlers.forEach((x) => x.setTargetDifference(difference));
}
_calculateNewPosition(difference) {
return PointExtensions.sum(this._onPointerDownPosition, difference);
}
_redraw(position) {
this.fNode.updatePosition(position);
this.fNode.redraw();
}
onPointerUp() {
this.fNode.positionChange.emit(this.fNode.position);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLW1vdmUuZHJhZy1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLWRyYWdnYWJsZS9mLW5vZGUtbW92ZS9mLW5vZGUtbW92ZS5kcmFnLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUtyRCxNQUFNLE9BQU8sb0JBQW9CO0lBT3RCO0lBQ0E7SUFDQTtJQVBPLFVBQVUsR0FBRyxXQUFXLENBQUM7SUFFeEIsc0JBQXNCLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXZFLFlBQ1MsS0FBZ0IsRUFDaEIsa0JBQStDLEVBQUUsRUFDakQsa0JBQStDLEVBQUU7UUFGakQsVUFBSyxHQUFMLEtBQUssQ0FBVztRQUNoQixvQkFBZSxHQUFmLGVBQWUsQ0FBa0M7UUFDakQsb0JBQWUsR0FBZixlQUFlLENBQWtDO1FBRXhELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFTSxhQUFhLENBQUMsVUFBa0I7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxVQUFrQjtRQUM5QyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxPQUFPLENBQUMsUUFBZ0I7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUG9pbnQsIFBvaW50RXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgSUZEcmFnSGFuZGxlciB9IGZyb20gJy4uL2YtZHJhZy1oYW5kbGVyJztcbmltcG9ydCB7IEZOb2RlQmFzZSB9IGZyb20gJy4uLy4uL2Ytbm9kZSc7XG5pbXBvcnQgeyBCYXNlQ29ubmVjdGlvbkRyYWdIYW5kbGVyIH0gZnJvbSAnLi9jb25uZWN0aW9uLWRyYWctaGFuZGxlcnMnO1xuXG5leHBvcnQgY2xhc3MgRk5vZGVNb3ZlRHJhZ0hhbmRsZXIgaW1wbGVtZW50cyBJRkRyYWdIYW5kbGVyIHtcblxuICBwdWJsaWMgcmVhZG9ubHkgZkV2ZW50VHlwZSA9ICdtb3ZlLW5vZGUnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uUG9pbnRlckRvd25Qb3NpdGlvbiA9IFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGZOb2RlOiBGTm9kZUJhc2UsXG4gICAgcHVibGljIGZTb3VyY2VIYW5kbGVyczogQmFzZUNvbm5lY3Rpb25EcmFnSGFuZGxlcltdID0gW10sXG4gICAgcHVibGljIGZUYXJnZXRIYW5kbGVyczogQmFzZUNvbm5lY3Rpb25EcmFnSGFuZGxlcltdID0gW10sXG4gICkge1xuICAgIHRoaXMuX29uUG9pbnRlckRvd25Qb3NpdGlvbiA9IHsgLi4uZk5vZGUucG9zaXRpb24gfTtcbiAgfVxuXG4gIHB1YmxpYyBvblBvaW50ZXJNb3ZlKGRpZmZlcmVuY2U6IElQb2ludCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZHJhdyh0aGlzLl9jYWxjdWxhdGVOZXdQb3NpdGlvbihkaWZmZXJlbmNlKSk7XG5cbiAgICB0aGlzLmZTb3VyY2VIYW5kbGVycy5mb3JFYWNoKCh4KSA9PiB4LnNldFNvdXJjZURpZmZlcmVuY2UoZGlmZmVyZW5jZSkpO1xuICAgIHRoaXMuZlRhcmdldEhhbmRsZXJzLmZvckVhY2goKHgpID0+IHguc2V0VGFyZ2V0RGlmZmVyZW5jZShkaWZmZXJlbmNlKSk7XG4gIH1cblxuICBwcml2YXRlIF9jYWxjdWxhdGVOZXdQb3NpdGlvbihkaWZmZXJlbmNlOiBJUG9pbnQpOiBJUG9pbnQge1xuICAgIHJldHVybiBQb2ludEV4dGVuc2lvbnMuc3VtKHRoaXMuX29uUG9pbnRlckRvd25Qb3NpdGlvbiwgZGlmZmVyZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWRyYXcocG9zaXRpb246IElQb2ludCk6IHZvaWQge1xuICAgIHRoaXMuZk5vZGUudXBkYXRlUG9zaXRpb24ocG9zaXRpb24pO1xuICAgIHRoaXMuZk5vZGUucmVkcmF3KCk7XG4gIH1cblxuICBwdWJsaWMgb25Qb2ludGVyVXAoKTogdm9pZCB7XG4gICAgdGhpcy5mTm9kZS5wb3NpdGlvbkNoYW5nZS5lbWl0KHRoaXMuZk5vZGUucG9zaXRpb24pO1xuICB9XG59XG4iXX0=