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.

51 lines 11.2 kB
import { __decorate } from "tslib"; import { inject, Injectable } from '@angular/core'; import { FitToFlowRequest } from './fit-to-flow-request'; import { FExecutionRegister, FMediator } from '@foblex/mediator'; import { PointExtensions, RectExtensions } from '@foblex/2d'; import { FComponentsStore } from '../../../f-storage'; import { CalculateNodesBoundingBoxRequest, RedrawCanvasWithAnimationRequest } from '../../../domain'; import * as i0 from "@angular/core"; let FitToFlowExecution = class FitToFlowExecution { _fComponentsStore = inject(FComponentsStore); get transform() { return this._fComponentsStore.fCanvas.transform; } _fMediator = inject(FMediator); handle(request) { const fNodesRect = this._fMediator.execute(new CalculateNodesBoundingBoxRequest()) || RectExtensions.initialize(); if (fNodesRect.width === 0 || fNodesRect.height === 0) { return; } this.fitToParent(fNodesRect, RectExtensions.fromElement(this._fComponentsStore.fFlow.hostElement), this._fComponentsStore.fNodes.map((x) => x.position), request.toCenter); this._fMediator.execute(new RedrawCanvasWithAnimationRequest(request.animated)); } fitToParent(rect, parentRect, points, toCenter) { this.transform.scaledPosition = PointExtensions.initialize(); this.transform.position = this.getZeroPositionWithoutScale(points); const itemsContainerWidth = (rect.width / this.transform.scale) + toCenter.x; const itemsContainerHeight = (rect.height / this.transform.scale) + toCenter.y; if ((itemsContainerWidth > parentRect.width || itemsContainerHeight > parentRect.height) || itemsContainerWidth < parentRect.width && itemsContainerHeight < parentRect.height) { this.transform.scale = Math.min(parentRect.width / itemsContainerWidth, parentRect.height / itemsContainerHeight); } const newX = (parentRect.width - itemsContainerWidth * this.transform.scale) / 2 - this.transform.position.x * this.transform.scale; const newY = (parentRect.height - itemsContainerHeight * this.transform.scale) / 2 - this.transform.position.y * this.transform.scale; this.transform.position = PointExtensions.initialize(newX + (toCenter.x / 2) * this.transform.scale, newY + (toCenter.y / 2) * this.transform.scale); } getZeroPositionWithoutScale(points) { const xPoint = points.length ? Math.min(...points.map((point) => point.x)) : 0; const yPoint = points.length ? Math.min(...points.map((point) => point.y)) : 0; return PointExtensions.initialize(xPoint, yPoint); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FitToFlowExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FitToFlowExecution }); }; FitToFlowExecution = __decorate([ FExecutionRegister(FitToFlowRequest) ], FitToFlowExecution); export { FitToFlowExecution }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FitToFlowExecution, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LXRvLWZsb3cuZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9kb21haW4vZi1jYW52YXMvZml0LXRvLWZsb3cvZml0LXRvLWZsb3cuZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFrQyxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUk5RixJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQUVyQixpQkFBaUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVyRCxJQUFZLFNBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBUSxDQUFDLFNBQVMsQ0FBQztJQUNuRCxDQUFDO0lBRU8sVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVoQyxNQUFNLENBQUMsT0FBeUI7UUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQWUsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hJLElBQUksVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZ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LE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRSxPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ25ELENBQUM7d0dBaERVLGtCQUFrQjs0R0FBbEIsa0JBQWtCOztBQUFsQixrQkFBa0I7SUFEOUIsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7R0FDeEIsa0JBQWtCLENBaUQ5Qjs7NEZBakRZLGtCQUFrQjtrQkFGOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRml0VG9GbG93UmVxdWVzdCB9IGZyb20gJy4vZml0LXRvLWZsb3ctcmVxdWVzdCc7XG5pbXBvcnQgeyBGRXhlY3V0aW9uUmVnaXN0ZXIsIEZNZWRpYXRvciwgSUV4ZWN1dGlvbiB9IGZyb20gJ0Bmb2JsZXgvbWVkaWF0b3InO1xuaW1wb3J0IHsgSVBvaW50LCBJUmVjdCwgSVRyYW5zZm9ybU1vZGVsLCBQb2ludEV4dGVuc2lvbnMsIFJlY3RFeHRlbnNpb25zIH0gZnJvbSAnQGZvYmxleC8yZCc7XG5pbXBvcnQgeyBGQ29tcG9uZW50c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IENhbGN1bGF0ZU5vZGVzQm91bmRpbmdCb3hSZXF1ZXN0LCBSZWRyYXdDYW52YXNXaXRoQW5pbWF0aW9uUmVxdWVzdCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoRml0VG9GbG93UmVxdWVzdClcbmV4cG9ydCBjbGFzcyBGaXRUb0Zsb3dFeGVjdXRpb24gaW1wbGVtZW50cyBJRXhlY3V0aW9uPEZpdFRvRmxvd1JlcXVlc3QsIHZvaWQ+IHtcblxuICBwcml2YXRlIF9mQ29tcG9uZW50c1N0b3JlID0gaW5qZWN0KEZDb21wb25lbnRzU3RvcmUpO1xuXG4gIHByaXZhdGUgZ2V0IHRyYW5zZm9ybSgpOiBJVHJhbnNmb3JtTW9kZWwge1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZDYW52YXMhLnRyYW5zZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZNZWRpYXRvciA9IGluamVjdChGTWVkaWF0b3IpO1xuXG4gIHB1YmxpYyBoYW5kbGUocmVxdWVzdDogRml0VG9GbG93UmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnN0IGZOb2Rlc1JlY3QgPSB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZTxJUmVjdCB8IG51bGw+KG5ldyBDYWxjdWxhdGVOb2Rlc0JvdW5kaW5nQm94UmVxdWVzdCgpKSB8fCBSZWN0RXh0ZW5zaW9ucy5pbml0aWFsaXplKCk7XG4gICAgaWYgKGZOb2Rlc1JlY3Qud2lkdGggPT09IDAgfHwgZk5vZGVzUmVjdC5oZWlnaHQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpdFRvUGFyZW50KFxuICAgICAgZk5vZGVzUmVjdCxcbiAgICAgIFJlY3RFeHRlbnNpb25zLmZyb21FbGVtZW50KHRoaXMuX2ZDb21wb25lbnRzU3RvcmUuZkZsb3chLmhvc3RFbGVtZW50KSxcbiAgICAgIHRoaXMuX2ZDb21wb25lbnRzU3RvcmUuZk5vZGVzLm1hcCgoeCkgPT4geC5wb3NpdGlvbiksXG4gICAgICByZXF1ZXN0LnRvQ2VudGVyXG4gICAgKTtcblxuICAgIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlKG5ldyBSZWRyYXdDYW52YXNXaXRoQW5pbWF0aW9uUmVxdWVzdChyZXF1ZXN0LmFuaW1hdGVkKSk7XG4gIH1cblxuICBwdWJsaWMgZml0VG9QYXJlbnQocmVjdDogSVJlY3QsIHBhcmVudFJlY3Q6IElSZWN0LCBwb2ludHM6IElQb2ludFtdLCB0b0NlbnRlcjogSVBvaW50KTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2Zvcm0uc2NhbGVkUG9zaXRpb24gPSBQb2ludEV4dGVuc2lvbnMuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMudHJhbnNmb3JtLnBvc2l0aW9uID0gdGhpcy5nZXRaZXJvUG9zaXRpb25XaXRob3V0U2NhbGUocG9pbnRzKTtcbiAgICBjb25zdCBpdGVtc0NvbnRhaW5lcldpZHRoID0gKHJlY3Qud2lkdGggLyB0aGlzLnRyYW5zZm9ybS5zY2FsZSkgKyB0b0NlbnRlci54O1xuICAgIGNvbnN0IGl0ZW1zQ29udGFpbmVySGVpZ2h0ID0gKHJlY3QuaGVpZ2h0IC8gdGhpcy50cmFuc2Zvcm0uc2NhbGUpICsgdG9DZW50ZXIueTtcbiAgICBpZiAoXG4gICAgICAoaXRlbXNDb250YWluZXJXaWR0aCA+IHBhcmVudFJlY3Qud2lkdGggfHwgaXRlbXNDb250YWluZXJIZWlnaHQgPiBwYXJlbnRSZWN0LmhlaWdodCkgfHxcbiAgICAgIGl0ZW1zQ29udGFpbmVyV2lkdGggPCBwYXJlbnRSZWN0LndpZHRoICYmIGl0ZW1zQ29udGFpbmVySGVpZ2h0IDwgcGFyZW50UmVjdC5oZWlnaHRcbiAgICApIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtLnNjYWxlID0gTWF0aC5taW4ocGFyZW50UmVjdC53aWR0aCAvIGl0ZW1zQ29udGFpbmVyV2lkdGgsIHBhcmVudFJlY3QuaGVpZ2h0IC8gaXRlbXNDb250YWluZXJIZWlnaHQpO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1ggPSAocGFyZW50UmVjdC53aWR0aCAtIGl0ZW1zQ29udGFpbmVyV2lkdGggKiB0aGlzLnRyYW5zZm9ybS5zY2FsZSkgLyAyIC0gdGhpcy50cmFuc2Zvcm0ucG9zaXRpb24ueCAqIHRoaXMudHJhbnNmb3JtLnNjYWxlO1xuICAgIGNvbnN0IG5ld1kgPSAocGFyZW50UmVjdC5oZWlnaHQgLSBpdGVtc0NvbnRhaW5lckhlaWdodCAqIHRoaXMudHJhbnNmb3JtLnNjYWxlKSAvIDIgLSB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbi55ICogdGhpcy50cmFuc2Zvcm0uc2NhbGU7XG5cbiAgICB0aGlzLnRyYW5zZm9ybS5wb3NpdGlvbiA9IFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKG5ld1ggKyAodG9DZW50ZXIueCAvIDIpICogdGhpcy50cmFuc2Zvcm0uc2NhbGUsIG5ld1kgKyAodG9DZW50ZXIueSAvIDIpICogdGhpcy50cmFuc2Zvcm0uc2NhbGUpXG4gIH1cblxuICBwcml2YXRlIGdldFplcm9Qb3NpdGlvbldpdGhvdXRTY2FsZShwb2ludHM6IElQb2ludFtdKTogSVBvaW50IHtcbiAgICBjb25zdCB4UG9pbnQgPSBwb2ludHMubGVuZ3RoID8gTWF0aC5taW4oLi4ucG9pbnRzLm1hcCgocG9pbnQpID0+IHBvaW50LngpKSA6IDA7XG4gICAgY29uc3QgeVBvaW50ID0gcG9pbnRzLmxlbmd0aCA/IE1hdGgubWluKC4uLnBvaW50cy5tYXAoKHBvaW50KSA9PiBwb2ludC55KSkgOiAwO1xuICAgIHJldHVybiBQb2ludEV4dGVuc2lvbnMuaW5pdGlhbGl6ZSh4UG9pbnQsIHlQb2ludClcbiAgfVxufVxuIl19