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.

80 lines 13.1 kB
import { __decorate } from "tslib"; import { inject, Injectable } from '@angular/core'; import { FNodeMovePreparationRequest } from './f-node-move-preparation.request'; import { Point } from '@foblex/2d'; import { FExecutionRegister, FMediator } from '@foblex/mediator'; import { FComponentsStore } from '../../../f-storage'; import { FDraggableDataContext } from '../../f-draggable-data-context'; import { CreateMoveNodesDragModelFromSelectionRequest } from '../create-move-nodes-drag-model-from-selection'; import { isValidEventTrigger, SelectAndUpdateNodeLayerRequest } from '../../../domain'; import { isClosestElementHasClass } from '@foblex/utils'; import { LineAlignmentPreparationRequest } from '../line-alignment-preparation'; import * as i0 from "@angular/core"; let FNodeMovePreparationExecution = class FNodeMovePreparationExecution { _fMediator = inject(FMediator); _fComponentsStore = inject(FComponentsStore); _fDraggableDataContext = inject(FDraggableDataContext); get _transform() { return this._fComponentsStore.fCanvas.transform; } get _fHost() { return this._fComponentsStore.fFlow.hostElement; } _fNode; handle(request) { if (!this._isValid(request) || !this._isValidTrigger(request)) { return; } const summaryDragHandler = this._calculateDraggedItems(this._fNode); this._fDraggableDataContext.onPointerDownScale = this._transform.scale; this._fDraggableDataContext.onPointerDownPosition = Point.fromPoint(request.event.getPosition()) .elementTransform(this._fHost).div(this._transform.scale); this._fDraggableDataContext.draggableItems = [summaryDragHandler]; if (this._fComponentsStore.fLineAlignment) { this._fMediator.execute(new LineAlignmentPreparationRequest(summaryDragHandler.fHandlers.map((x) => x.fNode), summaryDragHandler.commonRect)); } } _isValid(request) { return this._fDraggableDataContext.isEmpty() && this._isDragHandleElement(request.event.targetElement) && !!this._getNode(request.event.targetElement); } _isDragHandleElement(element) { return isClosestElementHasClass(element, '.f-drag-handle'); } _getNode(element) { this._fNode = this._fComponentsStore.fNodes .find(x => x.isContains(element) && !x.fDraggingDisabled); return this._fNode; } _isValidTrigger(request) { return isValidEventTrigger(request.event.originalEvent, request.fTrigger); } //We drag nodes from selection model _calculateDraggedItems(fNode) { let result; if (!fNode.fSelectionDisabled) { // Need to select node before drag this._fMediator.execute(new SelectAndUpdateNodeLayerRequest(fNode)); result = this._dragModelFromSelection(); } else { // User can drag node that can't be selected result = this._dragModelFromSelection(fNode); } return result; } _dragModelFromSelection(nodeWithDisabledSelection) { return this._fMediator.execute(new CreateMoveNodesDragModelFromSelectionRequest(nodeWithDisabledSelection)); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeMovePreparationExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeMovePreparationExecution }); }; FNodeMovePreparationExecution = __decorate([ FExecutionRegister(FNodeMovePreparationRequest) ], FNodeMovePreparationExecution); export { FNodeMovePreparationExecution }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeMovePreparationExecution, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLW1vdmUtcHJlcGFyYXRpb24uZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLWRyYWdnYWJsZS9mLW5vZGUtbW92ZS9tb3ZlLXByZXBhcmF0aW9uL2Ytbm9kZS1tb3ZlLXByZXBhcmF0aW9uLmV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFtQixLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBYyxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFLekUsSUFBTSw2QkFBNkIsR0FBbkMsTUFBTSw2QkFBNkI7SUFFdkIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixpQkFBaUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM3QyxzQkFBc0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUV4RSxJQUFZLFVBQVU7UUFDcEIsT0FBTyxJQUFJ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QUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyx5QkFBcUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FDNUIsSUFBSSw0Q0FBNEMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUM1RSxDQUFDO0lBQ0osQ0FBQzt3R0E1RVUsNkJBQTZCOzRHQUE3Qiw2QkFBNkI7O0FBQTdCLDZCQUE2QjtJQUR6QyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQztHQUNuQyw2QkFBNkIsQ0E2RXpDOzs0RkE3RVksNkJBQTZCO2tCQUZ6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGTm9kZU1vdmVQcmVwYXJhdGlvblJlcXVlc3QgfSBmcm9tICcuL2Ytbm9kZS1tb3ZlLXByZXBhcmF0aW9uLnJlcXVlc3QnO1xuaW1wb3J0IHsgSVRyYW5zZm9ybU1vZGVsLCBQb2ludCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgRkV4ZWN1dGlvblJlZ2lzdGVyLCBGTWVkaWF0b3IsIElFeGVjdXRpb24gfSBmcm9tICdAZm9ibGV4L21lZGlhdG9yJztcbmltcG9ydCB7IEZDb21wb25lbnRzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9mLXN0b3JhZ2UnO1xuaW1wb3J0IHsgRkRyYWdnYWJsZURhdGFDb250ZXh0IH0gZnJvbSAnLi4vLi4vZi1kcmFnZ2FibGUtZGF0YS1jb250ZXh0JztcbmltcG9ydCB7IEZOb2RlQmFzZSB9IGZyb20gJy4uLy4uLy4uL2Ytbm9kZSc7XG5pbXBvcnQgeyBDcmVhdGVNb3ZlTm9kZXNEcmFnTW9kZWxGcm9tU2VsZWN0aW9uUmVxdWVzdCB9IGZyb20gJy4uL2NyZWF0ZS1tb3ZlLW5vZGVzLWRyYWctbW9kZWwtZnJvbS1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgaXNWYWxpZEV2ZW50VHJpZ2dlciwgU2VsZWN0QW5kVXBkYXRlTm9kZUxheWVyUmVxdWVzdCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBpc0Nsb3Nlc3RFbGVtZW50SGFzQ2xhc3MgfSBmcm9tICdAZm9ibGV4L3V0aWxzJztcbmltcG9ydCB7IExpbmVBbGlnbm1lbnRQcmVwYXJhdGlvblJlcXVlc3QgfSBmcm9tICcuLi9saW5lLWFsaWdubWVudC1wcmVwYXJhdGlvbic7XG5pbXBvcnQgeyBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIgfSBmcm9tICcuLi9mLXN1bW1hcnktbm9kZS1tb3ZlLmRyYWctaGFuZGxlcic7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoRk5vZGVNb3ZlUHJlcGFyYXRpb25SZXF1ZXN0KVxuZXhwb3J0IGNsYXNzIEZOb2RlTW92ZVByZXBhcmF0aW9uRXhlY3V0aW9uIGltcGxlbWVudHMgSUV4ZWN1dGlvbjxGTm9kZU1vdmVQcmVwYXJhdGlvblJlcXVlc3QsIHZvaWQ+IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mTWVkaWF0b3IgPSBpbmplY3QoRk1lZGlhdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZkNvbXBvbmVudHNTdG9yZSA9IGluamVjdChGQ29tcG9uZW50c1N0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZkRyYWdnYWJsZURhdGFDb250ZXh0ID0gaW5qZWN0KEZEcmFnZ2FibGVEYXRhQ29udGV4dCk7XG5cbiAgcHJpdmF0ZSBnZXQgX3RyYW5zZm9ybSgpOiBJVHJhbnNmb3JtTW9kZWwge1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZDYW52YXMhLnRyYW5zZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9mSG9zdCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZDb21wb25lbnRzU3RvcmUuZkZsb3chLmhvc3RFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBfZk5vZGU6IEZOb2RlQmFzZSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgaGFuZGxlKHJlcXVlc3Q6IEZOb2RlTW92ZVByZXBhcmF0aW9uUmVxdWVzdCk6IHZvaWQge1xuICAgIGlmKCF0aGlzLl9pc1ZhbGlkKHJlcXVlc3QpIHx8ICF0aGlzLl9pc1ZhbGlkVHJpZ2dlcihyZXF1ZXN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1bW1hcnlEcmFnSGFuZGxlciA9IHRoaXMuX2NhbGN1bGF0ZURyYWdnZWRJdGVtcyh0aGlzLl9mTm9kZSEpO1xuXG4gICAgdGhpcy5fZkRyYWdnYWJsZURhdGFDb250ZXh0Lm9uUG9pbnRlckRvd25TY2FsZSA9IHRoaXMuX3RyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQub25Qb2ludGVyRG93blBvc2l0aW9uID0gUG9pbnQuZnJvbVBvaW50KHJlcXVlc3QuZXZlbnQuZ2V0UG9zaXRpb24oKSlcbiAgICAgIC5lbGVtZW50VHJhbnNmb3JtKHRoaXMuX2ZIb3N0KS5kaXYodGhpcy5fdHJhbnNmb3JtLnNjYWxlKTtcbiAgICB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQuZHJhZ2dhYmxlSXRlbXMgPSBbc3VtbWFyeURyYWdIYW5kbGVyXTtcblxuICAgIGlmKHRoaXMuX2ZDb21wb25lbnRzU3RvcmUuZkxpbmVBbGlnbm1lbnQpIHtcbiAgICAgIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPHZvaWQ+KFxuICAgICAgICBuZXcgTGluZUFsaWdubWVudFByZXBhcmF0aW9uUmVxdWVzdChcbiAgICAgICAgICBzdW1tYXJ5RHJhZ0hhbmRsZXIuZkhhbmRsZXJzLm1hcCgoeCkgPT4geC5mTm9kZSksIHN1bW1hcnlEcmFnSGFuZGxlci5jb21tb25SZWN0XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZChyZXF1ZXN0OiBGTm9kZU1vdmVQcmVwYXJhdGlvblJlcXVlc3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZkRyYWdnYWJsZURhdGFDb250ZXh0LmlzRW1wdHkoKVxuICAgICAgJiYgdGhpcy5faXNEcmFnSGFuZGxlRWxlbWVudChyZXF1ZXN0LmV2ZW50LnRhcmdldEVsZW1lbnQpXG4gICAgICAmJiAhIXRoaXMuX2dldE5vZGUocmVxdWVzdC5ldmVudC50YXJnZXRFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRHJhZ0hhbmRsZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNDbG9zZXN0RWxlbWVudEhhc0NsYXNzKGVsZW1lbnQsICcuZi1kcmFnLWhhbmRsZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Tm9kZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IEZOb2RlQmFzZSB8IHVuZGVmaW5lZCB7XG4gICAgdGhpcy5fZk5vZGUgPSB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZOb2Rlc1xuICAgICAgLmZpbmQoeCA9PiB4LmlzQ29udGFpbnMoZWxlbWVudCkgJiYgIXguZkRyYWdnaW5nRGlzYWJsZWQpO1xuICAgIHJldHVybiB0aGlzLl9mTm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWRUcmlnZ2VyKHJlcXVlc3Q6IEZOb2RlTW92ZVByZXBhcmF0aW9uUmVxdWVzdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkRXZlbnRUcmlnZ2VyKHJlcXVlc3QuZXZlbnQub3JpZ2luYWxFdmVudCwgcmVxdWVzdC5mVHJpZ2dlcik7XG4gIH1cblxuICAvL1dlIGRyYWcgbm9kZXMgZnJvbSBzZWxlY3Rpb24gbW9kZWxcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlRHJhZ2dlZEl0ZW1zKGZOb2RlOiBGTm9kZUJhc2UpOiBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIge1xuICAgIGxldCByZXN1bHQ6IEZTdW1tYXJ5Tm9kZU1vdmVEcmFnSGFuZGxlcjtcbiAgICBpZiAoIWZOb2RlLmZTZWxlY3Rpb25EaXNhYmxlZCkge1xuICAgICAgLy8gTmVlZCB0byBzZWxlY3Qgbm9kZSBiZWZvcmUgZHJhZ1xuICAgICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUobmV3IFNlbGVjdEFuZFVwZGF0ZU5vZGVMYXllclJlcXVlc3QoZk5vZGUpKTtcblxuICAgICAgcmVzdWx0ID0gdGhpcy5fZHJhZ01vZGVsRnJvbVNlbGVjdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2VyIGNhbiBkcmFnIG5vZGUgdGhhdCBjYW4ndCBiZSBzZWxlY3RlZFxuICAgICAgcmVzdWx0ID0gdGhpcy5fZHJhZ01vZGVsRnJvbVNlbGVjdGlvbihmTm9kZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9kcmFnTW9kZWxGcm9tU2VsZWN0aW9uKG5vZGVXaXRoRGlzYWJsZWRTZWxlY3Rpb24/OiBGTm9kZUJhc2UpOiBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIge1xuICAgIHJldHVybiB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShcbiAgICAgIG5ldyBDcmVhdGVNb3ZlTm9kZXNEcmFnTW9kZWxGcm9tU2VsZWN0aW9uUmVxdWVzdChub2RlV2l0aERpc2FibGVkU2VsZWN0aW9uKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==