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.

83 lines 14 kB
import { __decorate } from "tslib"; import { inject, Injectable, Injector } from '@angular/core'; import { FNodeDropToGroupPreparationRequest } from './f-node-drop-to-group-preparation.request'; import { FExecutionRegister, FMediator } from '@foblex/mediator'; import { FComponentsStore } from '../../../f-storage'; import { PointExtensions, RectExtensions } from '@foblex/2d'; import { GetNormalizedElementRectRequest, GetParentNodesRequest } from '../../../domain'; import { FDraggableDataContext } from '../../f-draggable-data-context'; import { FNodeDropToGroupDragHandler } from '../f-node-drop-to-group.drag-handler'; import { FSummaryNodeMoveDragHandler } from '../../f-node-move'; import { FExternalItemDragHandler } from "../../../f-external-item"; import * as i0 from "@angular/core"; let FNodeDropToGroupPreparationExecution = class FNodeDropToGroupPreparationExecution { _fMediator = inject(FMediator); _fDraggableDataContext = inject(FDraggableDataContext); _fComponentsStore = inject(FComponentsStore); _injector = inject(Injector); get _fNodes() { return this._fComponentsStore.fNodes; } get _transform() { return this._fComponentsStore.fCanvas.transform; } get _fCanvasPosition() { return PointExtensions.sum(this._transform.position, this._transform.scaledPosition); } handle(request) { if (!this._isValid()) { return; } const fNode = this._fComponentsStore .fNodes.find(n => n.isContains(request.event.targetElement)); if (!fNode && !this._isExternalItemDragHandler()) { throw new Error('Node not found'); } this._fDraggableDataContext.draggableItems.push(new FNodeDropToGroupDragHandler(this._injector, this._getNotDraggedNodesRects())); } _isValid() { return this._isNodeDragHandler() || this._isExternalItemDragHandler(); } _isNodeDragHandler() { return this._fDraggableDataContext.draggableItems .some((x) => x instanceof FSummaryNodeMoveDragHandler); } _isExternalItemDragHandler() { return this._fDraggableDataContext.draggableItems .some((x) => x instanceof FExternalItemDragHandler); } _getNotDraggedNodesRects() { const draggedNodes = this._addParentNodes(this._getNodesBeingDragged()); return this._getNotDraggedNodes(draggedNodes).map((x) => { const rect = this._fMediator.execute(new GetNormalizedElementRectRequest(x.hostElement)); return { node: x, rect: RectExtensions.initialize(rect.x * this._transform.scale + this._fCanvasPosition.x, rect.y * this._transform.scale + this._fCanvasPosition.y, rect.width * this._transform.scale, rect.height * this._transform.scale) }; }); } _getNodesBeingDragged() { return this._fDraggableDataContext.draggableItems .find((x) => x instanceof FSummaryNodeMoveDragHandler) ?.fHandlers.map((x) => x.fNode) || []; } _addParentNodes(fNodes) { return fNodes.reduce((result, x) => { result.push(x, ...this._fMediator.execute(new GetParentNodesRequest(x))); return result; }, []); } _getNotDraggedNodes(draggedNodes) { return this._fNodes.filter((x) => !draggedNodes.includes(x)); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeDropToGroupPreparationExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeDropToGroupPreparationExecution }); }; FNodeDropToGroupPreparationExecution = __decorate([ FExecutionRegister(FNodeDropToGroupPreparationRequest) ], FNodeDropToGroupPreparationExecution); export { FNodeDropToGroupPreparationExecution }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeDropToGroupPreparationExecution, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLWRyb3AtdG8tZ3JvdXAtcHJlcGFyYXRpb24uZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLWRyYWdnYWJsZS9mLWRyb3AtdG8tZ3JvdXAvZHJvcC10by1ncm91cC1wcmVwYXJhdGlvbi9mLW5vZGUtZHJvcC10by1ncm91cC1wcmVwYXJhdGlvbi5leGVjdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDM0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFpQyxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQzNGLE9BQU8sRUFBQywrQkFBK0IsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXZGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQUkzRCxJQUFNLG9DQUFvQyxHQUExQyxNQUFNLG9DQUFvQztJQUc5QixVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZELGlCQUFpQixHQUFHLE1BQU0s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QUVPLHFCQUFxQjtRQUMzQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjO2FBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLDJCQUEyQixDQUFDO1lBQ3RELEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQW1CO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQW1CLEVBQUUsQ0FBWSxFQUFFLEVBQUU7WUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBYyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBeUI7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzt3R0FuRlUsb0NBQW9DOzRHQUFwQyxvQ0FBb0M7O0FBQXBDLG9DQUFvQztJQURoRCxrQkFBa0IsQ0FBQyxrQ0FBa0MsQ0FBQztHQUMxQyxvQ0FBb0MsQ0FvRmhEOzs0RkFwRlksb0NBQW9DO2tCQUZoRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rk5vZGVEcm9wVG9Hcm91cFByZXBhcmF0aW9uUmVxdWVzdH0gZnJvbSAnLi9mLW5vZGUtZHJvcC10by1ncm91cC1wcmVwYXJhdGlvbi5yZXF1ZXN0JztcbmltcG9ydCB7RkV4ZWN1dGlvblJlZ2lzdGVyLCBGTWVkaWF0b3IsIElFeGVjdXRpb259IGZyb20gJ0Bmb2JsZXgvbWVkaWF0b3InO1xuaW1wb3J0IHtGQ29tcG9uZW50c1N0b3JlfSBmcm9tICcuLi8uLi8uLi9mLXN0b3JhZ2UnO1xuaW1wb3J0IHtJTm9kZVdpdGhSZWN0fSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHtJUG9pbnQsIElSZWN0LCBJVHJhbnNmb3JtTW9kZWwsIFBvaW50RXh0ZW5zaW9ucywgUmVjdEV4dGVuc2lvbnN9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHtHZXROb3JtYWxpemVkRWxlbWVudFJlY3RSZXF1ZXN0LCBHZXRQYXJlbnROb2Rlc1JlcXVlc3R9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQge0ZOb2RlQmFzZX0gZnJvbSAnLi4vLi4vLi4vZi1ub2RlJztcbmltcG9ydCB7RkRyYWdnYWJsZURhdGFDb250ZXh0fSBmcm9tICcuLi8uLi9mLWRyYWdnYWJsZS1kYXRhLWNvbnRleHQnO1xuaW1wb3J0IHtGTm9kZURyb3BUb0dyb3VwRHJhZ0hhbmRsZXJ9IGZyb20gJy4uL2Ytbm9kZS1kcm9wLXRvLWdyb3VwLmRyYWctaGFuZGxlcic7XG5pbXBvcnQge0ZTdW1tYXJ5Tm9kZU1vdmVEcmFnSGFuZGxlcn0gZnJvbSAnLi4vLi4vZi1ub2RlLW1vdmUnO1xuaW1wb3J0IHtGRXh0ZXJuYWxJdGVtRHJhZ0hhbmRsZXJ9IGZyb20gXCIuLi8uLi8uLi9mLWV4dGVybmFsLWl0ZW1cIjtcblxuQEluamVjdGFibGUoKVxuQEZFeGVjdXRpb25SZWdpc3RlcihGTm9kZURyb3BUb0dyb3VwUHJlcGFyYXRpb25SZXF1ZXN0KVxuZXhwb3J0IGNsYXNzIEZOb2RlRHJvcFRvR3JvdXBQcmVwYXJhdGlvbkV4ZWN1dGlvblxuICBpbXBsZW1lbnRzIElFeGVjdXRpb248Rk5vZGVEcm9wVG9Hcm91cFByZXBhcmF0aW9uUmVxdWVzdCwgdm9pZD4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZNZWRpYXRvciA9IGluamVjdChGTWVkaWF0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mRHJhZ2dhYmxlRGF0YUNvbnRleHQgPSBpbmplY3QoRkRyYWdnYWJsZURhdGFDb250ZXh0KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZkNvbXBvbmVudHNTdG9yZSA9IGluamVjdChGQ29tcG9uZW50c1N0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHByaXZhdGUgZ2V0IF9mTm9kZXMoKTogRk5vZGVCYXNlW10ge1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZOb2RlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF90cmFuc2Zvcm0oKTogSVRyYW5zZm9ybU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mQ2FudmFzIS50cmFuc2Zvcm07XG4gIH1cblxuICBwcml2YXRlIGdldCBfZkNhbnZhc1Bvc2l0aW9uKCk6IElQb2ludCB7XG4gICAgcmV0dXJuIFBvaW50RXh0ZW5zaW9ucy5zdW0odGhpcy5fdHJhbnNmb3JtLnBvc2l0aW9uLCB0aGlzLl90cmFuc2Zvcm0uc2NhbGVkUG9zaXRpb24pXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlKHJlcXVlc3Q6IEZOb2RlRHJvcFRvR3JvdXBQcmVwYXJhdGlvblJlcXVlc3QpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmTm9kZSA9IHRoaXMuX2ZDb21wb25lbnRzU3RvcmVcbiAgICAgIC5mTm9kZXMuZmluZChuID0+IG4uaXNDb250YWlucyhyZXF1ZXN0LmV2ZW50LnRhcmdldEVsZW1lbnQpKTtcbiAgICBpZiAoIWZOb2RlICYmICF0aGlzLl9pc0V4dGVybmFsSXRlbURyYWdIYW5kbGVyKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBub3QgZm91bmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mRHJhZ2dhYmxlRGF0YUNvbnRleHQuZHJhZ2dhYmxlSXRlbXMucHVzaChcbiAgICAgIG5ldyBGTm9kZURyb3BUb0dyb3VwRHJhZ0hhbmRsZXIoXG4gICAgICAgIHRoaXMuX2luamVjdG9yLFxuICAgICAgICB0aGlzLl9nZXROb3REcmFnZ2VkTm9kZXNSZWN0cygpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTm9kZURyYWdIYW5kbGVyKCkgfHwgdGhpcy5faXNFeHRlcm5hbEl0ZW1EcmFnSGFuZGxlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNOb2RlRHJhZ0hhbmRsZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZEcmFnZ2FibGVEYXRhQ29udGV4dC5kcmFnZ2FibGVJdGVtc1xuICAgICAgLnNvbWUoKHgpID0+IHggaW5zdGFuY2VvZiBGU3VtbWFyeU5vZGVNb3ZlRHJhZ0hhbmRsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNFeHRlcm5hbEl0ZW1EcmFnSGFuZGxlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZkRyYWdnYWJsZURhdGFDb250ZXh0LmRyYWdnYWJsZUl0ZW1zXG4gICAgICAuc29tZSgoeCkgPT4geCBpbnN0YW5jZW9mIEZFeHRlcm5hbEl0ZW1EcmFnSGFuZGxlcik7XG4gIH1cblxuICBwcml2YXRlIF9nZXROb3REcmFnZ2VkTm9kZXNSZWN0cygpOiBJTm9kZVdpdGhSZWN0W10ge1xuICAgIGNvbnN0IGRyYWdnZWROb2RlcyA9IHRoaXMuX2FkZFBhcmVudE5vZGVzKHRoaXMuX2dldE5vZGVzQmVpbmdEcmFnZ2VkKCkpO1xuICAgIHJldHVybiB0aGlzLl9nZXROb3REcmFnZ2VkTm9kZXMoZHJhZ2dlZE5vZGVzKS5tYXAoKHgpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJUmVjdD4obmV3IEdldE5vcm1hbGl6ZWRFbGVtZW50UmVjdFJlcXVlc3QoeC5ob3N0RWxlbWVudCkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZTogeCxcbiAgICAgICAgcmVjdDogUmVjdEV4dGVuc2lvbnMuaW5pdGlhbGl6ZShcbiAgICAgICAgICByZWN0LnggKiB0aGlzLl90cmFuc2Zvcm0uc2NhbGUgKyB0aGlzLl9mQ2FudmFzUG9zaXRpb24ueCxcbiAgICAgICAgICByZWN0LnkgKiB0aGlzLl90cmFuc2Zvcm0uc2NhbGUgKyB0aGlzLl9mQ2FudmFzUG9zaXRpb24ueSxcbiAgICAgICAgICByZWN0LndpZHRoICogdGhpcy5fdHJhbnNmb3JtLnNjYWxlLFxuICAgICAgICAgIHJlY3QuaGVpZ2h0ICogdGhpcy5fdHJhbnNmb3JtLnNjYWxlXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVzQmVpbmdEcmFnZ2VkKCk6IEZOb2RlQmFzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZkRyYWdnYWJsZURhdGFDb250ZXh0LmRyYWdnYWJsZUl0ZW1zXG4gICAgICAuZmluZCgoeCkgPT4geCBpbnN0YW5jZW9mIEZTdW1tYXJ5Tm9kZU1vdmVEcmFnSGFuZGxlcilcbiAgICAgID8uZkhhbmRsZXJzLm1hcCgoeCkgPT4geC5mTm9kZSkgfHwgW107XG4gIH1cblxuICBwcml2YXRlIF9hZGRQYXJlbnROb2RlcyhmTm9kZXM6IEZOb2RlQmFzZVtdKTogRk5vZGVCYXNlW10ge1xuICAgIHJldHVybiBmTm9kZXMucmVkdWNlKChyZXN1bHQ6IEZOb2RlQmFzZVtdLCB4OiBGTm9kZUJhc2UpID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKHgsIC4uLnRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPEZOb2RlQmFzZVtdPihuZXcgR2V0UGFyZW50Tm9kZXNSZXF1ZXN0KHgpKSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vdERyYWdnZWROb2RlcyhkcmFnZ2VkTm9kZXM6IEZOb2RlQmFzZVtdKTogRk5vZGVCYXNlW10ge1xuICAgIHJldHVybiB0aGlzLl9mTm9kZXMuZmlsdGVyKCh4KSA9PiAhZHJhZ2dlZE5vZGVzLmluY2x1ZGVzKHgpKTtcbiAgfVxufVxuIl19