UNPKG

@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.

73 lines 12.2 kB
import { RectExtensions } from '@foblex/2d'; import { FMediator } from '@foblex/mediator'; import { GetNodeResizeRestrictionsRequest } from './get-node-resize-restrictions'; import { ApplyChildResizeRestrictionsRequest } from './apply-child-resize-restrictions'; import { CalculateChangedSizeRequest } from './calculate-changed-size'; import { CalculateChangedPositionRequest } from './calculate-changed-position'; import { ApplyParentResizeRestrictionsRequest } from './apply-parent-resize-restrictions'; import { GetNormalizedElementRectRequest } from '../../domain'; export class FNodeResizeDragHandler { _fNode; _fResizeHandleType; fEventType = 'node-resize'; fData; _fMediator; _originalRect; _resizeRestrictions; constructor(_injector, _fNode, _fResizeHandleType) { this._fNode = _fNode; this._fResizeHandleType = _fResizeHandleType; this.fData = { fNodeId: _fNode.fId, }; this._fMediator = _injector.get(FMediator); } prepareDragSequence() { this._originalRect = this._getOriginalNodeRect(); this._resizeRestrictions = this._getNodeResizeRestrictions(); } _getOriginalNodeRect() { return this._fMediator.execute(new GetNormalizedElementRectRequest(this._fNode.hostElement)); } _getNodeResizeRestrictions() { return this._fMediator.execute(new GetNodeResizeRestrictionsRequest(this._fNode, this._originalRect)); } onPointerMove(difference) { this._applyResizeChanges(this._calculateChangedRect(difference)); } _calculateChangedRect(difference) { const changedSize = this._calculateSize(difference); return this._calculatePosition(difference, changedSize); } _calculateSize(difference) { return this._fMediator.execute(new CalculateChangedSizeRequest(this._originalRect, difference, this._fResizeHandleType)); } _calculatePosition(difference, changedSize) { return this._fMediator.execute(new CalculateChangedPositionRequest(this._originalRect, changedSize, difference, this._fResizeHandleType)); } _applyResizeChanges(changedRect) { if (this._resizeRestrictions.childrenBounds) { this._applyChildRestrictions(changedRect); } this._applyParentRestrictions(changedRect, this._resizeRestrictions.parentBounds); this._updateNodeRendering(changedRect); } _updateNodeRendering(changedRect) { this._fNode.updatePosition(changedRect); this._fNode.updateSize(changedRect); this._fNode.redraw(); } _applyChildRestrictions(changedRect) { this._fMediator.execute(new ApplyChildResizeRestrictionsRequest(changedRect, this._resizeRestrictions)); } _applyParentRestrictions(changedRect, restrictions) { this._fMediator.execute(new ApplyParentResizeRestrictionsRequest(changedRect, restrictions)); } onPointerUp() { this._fNode.sizeChange.emit(this._getNewRect()); } _getNewRect() { return RectExtensions.initialize(this._fNode.position.x, this._fNode.position.y, this._fNode.size?.width, this._fNode.size?.height); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLXJlc2l6ZS5kcmFnLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtZHJhZ2dhYmxlL2Ytbm9kZS1yZXNpemUvZi1ub2RlLXJlc2l6ZS5kcmFnLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBMkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHL0QsTUFBTSxPQUFPLHNCQUFzQjtJQVl2QjtJQUNBO0lBWE0sVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUMzQixLQUFLLENBQU07SUFFVixVQUFVLENBQVk7SUFFL0IsYUFBYSxDQUFTO0lBQ3RCLG1CQUFtQixDQUEyQjtJQUV0RCxZQUNFLFNBQW1CLEVBQ1gsTUFBaUIsRUFDakIsa0JBQXNDO1FBRHRDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUU5QyxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1NBQ3BCLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7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QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQ2xHLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUG9pbnQsIElSZWN0LCBJU2l6ZSwgUmVjdEV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IElGRHJhZ0hhbmRsZXIgfSBmcm9tICcuLi9mLWRyYWctaGFuZGxlcic7XG5pbXBvcnQgeyBFRlJlc2l6ZUhhbmRsZVR5cGUsIEZOb2RlQmFzZSB9IGZyb20gJy4uLy4uL2Ytbm9kZSc7XG5pbXBvcnQgeyBGTWVkaWF0b3IgfSBmcm9tICdAZm9ibGV4L21lZGlhdG9yJztcbmltcG9ydCB7IEdldE5vZGVSZXNpemVSZXN0cmljdGlvbnNSZXF1ZXN0LCBJTm9kZVJlc2l6ZVJlc3RyaWN0aW9ucyB9IGZyb20gJy4vZ2V0LW5vZGUtcmVzaXplLXJlc3RyaWN0aW9ucyc7XG5pbXBvcnQgeyBBcHBseUNoaWxkUmVzaXplUmVzdHJpY3Rpb25zUmVxdWVzdCB9IGZyb20gJy4vYXBwbHktY2hpbGQtcmVzaXplLXJlc3RyaWN0aW9ucyc7XG5pbXBvcnQgeyBDYWxjdWxhdGVDaGFuZ2VkU2l6ZVJlcXVlc3QgfSBmcm9tICcuL2NhbGN1bGF0ZS1jaGFuZ2VkLXNpemUnO1xuaW1wb3J0IHsgQ2FsY3VsYXRlQ2hhbmdlZFBvc2l0aW9uUmVxdWVzdCB9IGZyb20gJy4vY2FsY3VsYXRlLWNoYW5nZWQtcG9zaXRpb24nO1xuaW1wb3J0IHsgQXBwbHlQYXJlbnRSZXNpemVSZXN0cmljdGlvbnNSZXF1ZXN0IH0gZnJvbSAnLi9hcHBseS1wYXJlbnQtcmVzaXplLXJlc3RyaWN0aW9ucyc7XG5pbXBvcnQgeyBHZXROb3JtYWxpemVkRWxlbWVudFJlY3RSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBGTm9kZVJlc2l6ZURyYWdIYW5kbGVyIGltcGxlbWVudHMgSUZEcmFnSGFuZGxlciB7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZFdmVudFR5cGUgPSAnbm9kZS1yZXNpemUnO1xuICBwdWJsaWMgcmVhZG9ubHkgZkRhdGE6IGFueTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mTWVkaWF0b3I6IEZNZWRpYXRvcjtcblxuICBwcml2YXRlIF9vcmlnaW5hbFJlY3QhOiBJUmVjdDtcbiAgcHJpdmF0ZSBfcmVzaXplUmVzdHJpY3Rpb25zITogSU5vZGVSZXNpemVSZXN0cmljdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIF9mTm9kZTogRk5vZGVCYXNlLFxuICAgIHByaXZhdGUgX2ZSZXNpemVIYW5kbGVUeXBlOiBFRlJlc2l6ZUhhbmRsZVR5cGUsXG4gICkge1xuICAgIHRoaXMuZkRhdGEgPSB7XG4gICAgICBmTm9kZUlkOiBfZk5vZGUuZklkLFxuICAgIH07XG4gICAgdGhpcy5fZk1lZGlhdG9yID0gX2luamVjdG9yLmdldChGTWVkaWF0b3IpO1xuICB9XG5cbiAgcHVibGljIHByZXBhcmVEcmFnU2VxdWVuY2UoKTogdm9pZCB7XG4gICAgdGhpcy5fb3JpZ2luYWxSZWN0ID0gdGhpcy5fZ2V0T3JpZ2luYWxOb2RlUmVjdCgpO1xuICAgIHRoaXMuX3Jlc2l6ZVJlc3RyaWN0aW9ucyA9IHRoaXMuX2dldE5vZGVSZXNpemVSZXN0cmljdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE9yaWdpbmFsTm9kZVJlY3QoKTogSVJlY3Qge1xuICAgIHJldHVybiB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJUmVjdD4obmV3IEdldE5vcm1hbGl6ZWRFbGVtZW50UmVjdFJlcXVlc3QodGhpcy5fZk5vZGUuaG9zdEVsZW1lbnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVSZXNpemVSZXN0cmljdGlvbnMoKTogSU5vZGVSZXNpemVSZXN0cmljdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJTm9kZVJlc2l6ZVJlc3RyaWN0aW9ucz4oXG4gICAgICBuZXcgR2V0Tm9kZVJlc2l6ZVJlc3RyaWN0aW9uc1JlcXVlc3QodGhpcy5fZk5vZGUsIHRoaXMuX29yaWdpbmFsUmVjdClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uUG9pbnRlck1vdmUoZGlmZmVyZW5jZTogSVBvaW50KTogdm9pZCB7XG4gICAgdGhpcy5fYXBwbHlSZXNpemVDaGFuZ2VzKHRoaXMuX2NhbGN1bGF0ZUNoYW5nZWRSZWN0KGRpZmZlcmVuY2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUNoYW5nZWRSZWN0KGRpZmZlcmVuY2U6IElQb2ludCk6IElSZWN0IHtcbiAgICBjb25zdCBjaGFuZ2VkU2l6ZSA9IHRoaXMuX2NhbGN1bGF0ZVNpemUoZGlmZmVyZW5jZSk7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZVBvc2l0aW9uKGRpZmZlcmVuY2UsIGNoYW5nZWRTaXplKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVNpemUoZGlmZmVyZW5jZTogSVBvaW50KTogSVJlY3Qge1xuICAgIHJldHVybiB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJUmVjdD4oXG4gICAgICBuZXcgQ2FsY3VsYXRlQ2hhbmdlZFNpemVSZXF1ZXN0KHRoaXMuX29yaWdpbmFsUmVjdCwgZGlmZmVyZW5jZSwgdGhpcy5fZlJlc2l6ZUhhbmRsZVR5cGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBvc2l0aW9uKGRpZmZlcmVuY2U6IElQb2ludCwgY2hhbmdlZFNpemU6IElSZWN0KTogSVJlY3Qge1xuICAgIHJldHVybiB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJUmVjdD4oXG4gICAgICBuZXcgQ2FsY3VsYXRlQ2hhbmdlZFBvc2l0aW9uUmVxdWVzdCh0aGlzLl9vcmlnaW5hbFJlY3QsIGNoYW5nZWRTaXplLCBkaWZmZXJlbmNlLCB0aGlzLl9mUmVzaXplSGFuZGxlVHlwZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlSZXNpemVDaGFuZ2VzKGNoYW5nZWRSZWN0OiBJUmVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZXNpemVSZXN0cmljdGlvbnMuY2hpbGRyZW5Cb3VuZHMpIHtcbiAgICAgIHRoaXMuX2FwcGx5Q2hpbGRSZXN0cmljdGlvbnMoY2hhbmdlZFJlY3QpO1xuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5UGFyZW50UmVzdHJpY3Rpb25zKGNoYW5nZWRSZWN0LCB0aGlzLl9yZXNpemVSZXN0cmljdGlvbnMucGFyZW50Qm91bmRzKTtcbiAgICB0aGlzLl91cGRhdGVOb2RlUmVuZGVyaW5nKGNoYW5nZWRSZWN0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZU5vZGVSZW5kZXJpbmcoY2hhbmdlZFJlY3Q6IElSZWN0KTogdm9pZCB7XG4gICAgdGhpcy5fZk5vZGUudXBkYXRlUG9zaXRpb24oY2hhbmdlZFJlY3QpO1xuICAgIHRoaXMuX2ZOb2RlLnVwZGF0ZVNpemUoY2hhbmdlZFJlY3QpO1xuICAgIHRoaXMuX2ZOb2RlLnJlZHJhdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlDaGlsZFJlc3RyaWN0aW9ucyhjaGFuZ2VkUmVjdDogSVJlY3QpOiB2b2lkIHtcbiAgICB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShcbiAgICAgIG5ldyBBcHBseUNoaWxkUmVzaXplUmVzdHJpY3Rpb25zUmVxdWVzdChjaGFuZ2VkUmVjdCwgdGhpcy5fcmVzaXplUmVzdHJpY3Rpb25zKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVBhcmVudFJlc3RyaWN0aW9ucyhjaGFuZ2VkUmVjdDogSVJlY3QsIHJlc3RyaWN0aW9uczogSVJlY3QpOiB2b2lkIHtcbiAgICB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShcbiAgICAgIG5ldyBBcHBseVBhcmVudFJlc2l6ZVJlc3RyaWN0aW9uc1JlcXVlc3QoY2hhbmdlZFJlY3QsIHJlc3RyaWN0aW9ucylcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uUG9pbnRlclVwKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZOb2RlLnNpemVDaGFuZ2UuZW1pdCh0aGlzLl9nZXROZXdSZWN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TmV3UmVjdCgpOiBJUmVjdCB7XG4gICAgcmV0dXJuIFJlY3RFeHRlbnNpb25zLmluaXRpYWxpemUoXG4gICAgICB0aGlzLl9mTm9kZS5wb3NpdGlvbi54LCB0aGlzLl9mTm9kZS5wb3NpdGlvbi55LCB0aGlzLl9mTm9kZS5zaXplPy53aWR0aCwgdGhpcy5fZk5vZGUuc2l6ZT8uaGVpZ2h0XG4gICAgKTtcbiAgfVxufVxuIl19