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.

94 lines 16.1 kB
import { __decorate } from "tslib"; import { UpdateItemAndChildrenLayersRequest } from './update-item-and-children-layers.request'; import { inject, Injectable } from '@angular/core'; import { FExecutionRegister, FMediator } from '@foblex/mediator'; import { FComponentsStore } from '../../f-storage'; import { GetDeepChildrenNodesAndGroupsRequest } from '../get-deep-children-nodes-and-groups'; import { MoveFrontElementsBeforeTargetElementRequest } from './move-front-elements-before-target-element'; import * as i0 from "@angular/core"; let UpdateItemAndChildrenLayersExecution = class UpdateItemAndChildrenLayersExecution { _fMediator = inject(FMediator); _fComponentsStore = inject(FComponentsStore); get _fCanvas() { return this._fComponentsStore.fCanvas; } get _fGroupsContainer() { return this._fCanvas.fGroupsContainer().nativeElement; } get _fNodesContainer() { return this._fCanvas.fNodesContainer().nativeElement; } get _fConnectionsContainer() { return this._fCanvas.fConnectionsContainer().nativeElement; } handle(request) { switch (request.itemContainer) { case this._fGroupsContainer: this._handleGroup(request); break; case this._fNodesContainer: this._handleNode(request); break; case this._fConnectionsContainer: this._handleConnection(request); break; default: throw new Error('Unknown container'); } } _handleGroup(request) { const childrenNodesAndGroups = this._getChildrenNodesAndGroups(request.item.fId); const childrenGroups = this._getChildrenGroups(childrenNodesAndGroups); this._updateLayers(this._fGroupsContainer, request.item.hostElement, childrenGroups); const childrenNodes = this._getChildrenNodes(childrenNodesAndGroups); if (childrenNodes.length) { this._updateLayers(this._fNodesContainer, childrenNodes[0], childrenNodes); } } _handleNode(request) { const childrenNodesAndGroups = this._getChildrenNodesAndGroups(request.item.fId); const childrenNodes = this._getChildrenNodes(childrenNodesAndGroups); this._updateLayers(request.itemContainer, request.item.hostElement, childrenNodes); } _handleConnection(request) { this._updateLayers(request.itemContainer, request.item.hostElement, []); } _updateLayers(itemContainer, item, elementsThatShouldBeInFront) { const allElements = Array.from(itemContainer.children); const targetIndex = allElements.findIndex((x) => x === item); if (this._isAnythingNeedToBeMoved(allElements, targetIndex, elementsThatShouldBeInFront)) { this._fMediator.execute(new MoveFrontElementsBeforeTargetElementRequest(itemContainer, allElements, elementsThatShouldBeInFront, targetIndex)); } } _isAnythingNeedToBeMoved(allElements, targetIndex, elementsThatShouldBeInFront) { for (let i = targetIndex + 1; i < allElements.length; i++) { if (!elementsThatShouldBeInFront.includes(allElements[i])) { return true; } } return false; } _getChildrenGroups(elements) { const allElements = Array.from(this._fGroupsContainer.children); return elements.filter((x) => this._fGroupsContainer.contains(x)) .sort((a, b) => allElements.indexOf(a) - allElements.indexOf(b)); } _getChildrenNodes(elements) { const allElements = Array.from(this._fNodesContainer.children); return elements.filter((x) => this._fNodesContainer.contains(x)) .sort((a, b) => allElements.indexOf(a) - allElements.indexOf(b)); } _getChildrenNodesAndGroups(fId) { return this._fMediator.execute(new GetDeepChildrenNodesAndGroupsRequest(fId)).map((x) => x.hostElement); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateItemAndChildrenLayersExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateItemAndChildrenLayersExecution }); }; UpdateItemAndChildrenLayersExecution = __decorate([ FExecutionRegister(UpdateItemAndChildrenLayersRequest) ], UpdateItemAndChildrenLayersExecution); export { UpdateItemAndChildrenLayersExecution }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateItemAndChildrenLayersExecution, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWl0ZW0tYW5kLWNoaWxkcmVuLWxheWVycy5leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi91cGRhdGUtaXRlbS1hbmQtY2hpbGRyZW4tbGF5ZXJzL3VwZGF0ZS1pdGVtLWFuZC1jaGlsZHJlbi1sYXllcnMuZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0YsT0FBTyxFQUFFLDJDQUEyQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBS25HLElBQU0sb0NBQW9DLEdBQTFDLE1BQU0sb0NBQW9DO0lBRTlCLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUQsSUFBWSxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQVEsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBWSxpQkFBaUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFZLGdCQUFnQjtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFZLHNC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QUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFjLElBQUksb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2SCxDQUFDO3dHQTNGVSxvQ0FBb0M7NEdBQXBDLG9DQUFvQzs7QUFBcEMsb0NBQW9DO0lBRGhELGtCQUFrQixDQUFDLGtDQUFrQyxDQUFDO0dBQzFDLG9DQUFvQyxDQTRGaEQ7OzRGQTVGWSxvQ0FBb0M7a0JBRmhELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVcGRhdGVJdGVtQW5kQ2hpbGRyZW5MYXllcnNSZXF1ZXN0IH0gZnJvbSAnLi91cGRhdGUtaXRlbS1hbmQtY2hpbGRyZW4tbGF5ZXJzLnJlcXVlc3QnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGRXhlY3V0aW9uUmVnaXN0ZXIsIEZNZWRpYXRvciwgSUV4ZWN1dGlvbiB9IGZyb20gJ0Bmb2JsZXgvbWVkaWF0b3InO1xuaW1wb3J0IHsgRkNvbXBvbmVudHNTdG9yZSB9IGZyb20gJy4uLy4uL2Ytc3RvcmFnZSc7XG5pbXBvcnQgeyBGTm9kZUJhc2UgfSBmcm9tICcuLi8uLi9mLW5vZGUnO1xuaW1wb3J0IHsgR2V0RGVlcENoaWxkcmVuTm9kZXNBbmRHcm91cHNSZXF1ZXN0IH0gZnJvbSAnLi4vZ2V0LWRlZXAtY2hpbGRyZW4tbm9kZXMtYW5kLWdyb3Vwcyc7XG5pbXBvcnQgeyBNb3ZlRnJvbnRFbGVtZW50c0JlZm9yZVRhcmdldEVsZW1lbnRSZXF1ZXN0IH0gZnJvbSAnLi9tb3ZlLWZyb250LWVsZW1lbnRzLWJlZm9yZS10YXJnZXQtZWxlbWVudCc7XG5pbXBvcnQgeyBGQ2FudmFzQmFzZSB9IGZyb20gJy4uLy4uL2YtY2FudmFzJztcblxuQEluamVjdGFibGUoKVxuQEZFeGVjdXRpb25SZWdpc3RlcihVcGRhdGVJdGVtQW5kQ2hpbGRyZW5MYXllcnNSZXF1ZXN0KVxuZXhwb3J0IGNsYXNzIFVwZGF0ZUl0ZW1BbmRDaGlsZHJlbkxheWVyc0V4ZWN1dGlvbiBpbXBsZW1lbnRzIElFeGVjdXRpb248VXBkYXRlSXRlbUFuZENoaWxkcmVuTGF5ZXJzUmVxdWVzdCwgdm9pZD4ge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZNZWRpYXRvciA9IGluamVjdChGTWVkaWF0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mQ29tcG9uZW50c1N0b3JlID0gaW5qZWN0KEZDb21wb25lbnRzU3RvcmUpO1xuXG4gIHByaXZhdGUgZ2V0IF9mQ2FudmFzKCk6IEZDYW52YXNCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mQ2FudmFzITtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9mR3JvdXBzQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZkNhbnZhcy5mR3JvdXBzQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9mTm9kZXNDb250YWluZXIoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9mQ2FudmFzLmZOb2Rlc0NvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZkNvbm5lY3Rpb25zQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZkNhbnZhcy5mQ29ubmVjdGlvbnNDb250YWluZXIoKS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIGhhbmRsZShyZXF1ZXN0OiBVcGRhdGVJdGVtQW5kQ2hpbGRyZW5MYXllcnNSZXF1ZXN0KTogdm9pZCB7XG5cbiAgICBzd2l0Y2ggKHJlcXVlc3QuaXRlbUNvbnRhaW5lcikge1xuICAgICAgY2FzZSB0aGlzLl9mR3JvdXBzQ29udGFpbmVyOlxuICAgICAgICB0aGlzLl9oYW5kbGVHcm91cChyZXF1ZXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuX2ZOb2Rlc0NvbnRhaW5lcjpcbiAgICAgICAgdGhpcy5faGFuZGxlTm9kZShyZXF1ZXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuX2ZDb25uZWN0aW9uc0NvbnRhaW5lcjpcbiAgICAgICAgdGhpcy5faGFuZGxlQ29ubmVjdGlvbihyZXF1ZXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY29udGFpbmVyJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlR3JvdXAocmVxdWVzdDogVXBkYXRlSXRlbUFuZENoaWxkcmVuTGF5ZXJzUmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnN0IGNoaWxkcmVuTm9kZXNBbmRHcm91cHMgPSB0aGlzLl9nZXRDaGlsZHJlbk5vZGVzQW5kR3JvdXBzKHJlcXVlc3QuaXRlbS5mSWQpO1xuICAgIGNvbnN0IGNoaWxkcmVuR3JvdXBzID0gdGhpcy5fZ2V0Q2hpbGRyZW5Hcm91cHMoY2hpbGRyZW5Ob2Rlc0FuZEdyb3Vwcyk7XG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJzKHRoaXMuX2ZHcm91cHNDb250YWluZXIsIHJlcXVlc3QuaXRlbS5ob3N0RWxlbWVudCBhcyBIVE1MRWxlbWVudCwgY2hpbGRyZW5Hcm91cHMpO1xuICAgIGNvbnN0IGNoaWxkcmVuTm9kZXMgPSB0aGlzLl9nZXRDaGlsZHJlbk5vZGVzKGNoaWxkcmVuTm9kZXNBbmRHcm91cHMpO1xuICAgIGlmIChjaGlsZHJlbk5vZGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdXBkYXRlTGF5ZXJzKHRoaXMuX2ZOb2Rlc0NvbnRhaW5lciwgY2hpbGRyZW5Ob2Rlc1sgMCBdLCBjaGlsZHJlbk5vZGVzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVOb2RlKHJlcXVlc3Q6IFVwZGF0ZUl0ZW1BbmRDaGlsZHJlbkxheWVyc1JlcXVlc3QpOiB2b2lkIHtcbiAgICBjb25zdCBjaGlsZHJlbk5vZGVzQW5kR3JvdXBzID0gdGhpcy5fZ2V0Q2hpbGRyZW5Ob2Rlc0FuZEdyb3VwcyhyZXF1ZXN0Lml0ZW0uZklkKTtcbiAgICBjb25zdCBjaGlsZHJlbk5vZGVzID0gdGhpcy5fZ2V0Q2hpbGRyZW5Ob2RlcyhjaGlsZHJlbk5vZGVzQW5kR3JvdXBzKTtcbiAgICB0aGlzLl91cGRhdGVMYXllcnMocmVxdWVzdC5pdGVtQ29udGFpbmVyLCByZXF1ZXN0Lml0ZW0uaG9zdEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsIGNoaWxkcmVuTm9kZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ29ubmVjdGlvbihyZXF1ZXN0OiBVcGRhdGVJdGVtQW5kQ2hpbGRyZW5MYXllcnNSZXF1ZXN0KTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJzKHJlcXVlc3QuaXRlbUNvbnRhaW5lciwgcmVxdWVzdC5pdGVtLmhvc3RFbGVtZW50IGFzIEhUTUxFbGVtZW50LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVMYXllcnMoaXRlbUNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGl0ZW06IEhUTUxFbGVtZW50LCBlbGVtZW50c1RoYXRTaG91bGRCZUluRnJvbnQ6IEhUTUxFbGVtZW50W10pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxFbGVtZW50cyA9IEFycmF5LmZyb20oaXRlbUNvbnRhaW5lci5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9IGFsbEVsZW1lbnRzLmZpbmRJbmRleCgoeCkgPT4geCA9PT0gaXRlbSk7XG4gICAgaWYgKHRoaXMuX2lzQW55dGhpbmdOZWVkVG9CZU1vdmVkKGFsbEVsZW1lbnRzLCB0YXJnZXRJbmRleCwgZWxlbWVudHNUaGF0U2hvdWxkQmVJbkZyb250KSkge1xuICAgICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUoXG4gICAgICAgIG5ldyBNb3ZlRnJvbnRFbGVtZW50c0JlZm9yZVRhcmdldEVsZW1lbnRSZXF1ZXN0KGl0ZW1Db250YWluZXIsIGFsbEVsZW1lbnRzLCBlbGVtZW50c1RoYXRTaG91bGRCZUluRnJvbnQsIHRhcmdldEluZGV4KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0FueXRoaW5nTmVlZFRvQmVNb3ZlZChhbGxFbGVtZW50czogSFRNTEVsZW1lbnRbXSwgdGFyZ2V0SW5kZXg6IG51bWJlciwgZWxlbWVudHNUaGF0U2hvdWxkQmVJbkZyb250OiBIVE1MRWxlbWVudFtdKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaSA9IHRhcmdldEluZGV4ICsgMTsgaSA8IGFsbEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWVsZW1lbnRzVGhhdFNob3VsZEJlSW5Gcm9udC5pbmNsdWRlcyhhbGxFbGVtZW50c1sgaSBdKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q2hpbGRyZW5Hcm91cHMoZWxlbWVudHM6IEhUTUxFbGVtZW50W10pOiBIVE1MRWxlbWVudFtdIHtcbiAgICBjb25zdCBhbGxFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5fZkdyb3Vwc0NvbnRhaW5lci5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICByZXR1cm4gZWxlbWVudHMuZmlsdGVyKCh4KSA9PiB0aGlzLl9mR3JvdXBzQ29udGFpbmVyLmNvbnRhaW5zKHgpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGFsbEVsZW1lbnRzLmluZGV4T2YoYSkgLSBhbGxFbGVtZW50cy5pbmRleE9mKGIpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENoaWxkcmVuTm9kZXMoZWxlbWVudHM6IEhUTUxFbGVtZW50W10pOiBIVE1MRWxlbWVudFtdIHtcbiAgICBjb25zdCBhbGxFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5fZk5vZGVzQ29udGFpbmVyLmNoaWxkcmVuKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIHJldHVybiBlbGVtZW50cy5maWx0ZXIoKHgpID0+IHRoaXMuX2ZOb2Rlc0NvbnRhaW5lci5jb250YWlucyh4KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhbGxFbGVtZW50cy5pbmRleE9mKGEpIC0gYWxsRWxlbWVudHMuaW5kZXhPZihiKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDaGlsZHJlbk5vZGVzQW5kR3JvdXBzKGZJZDogc3RyaW5nKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPEZOb2RlQmFzZVtdPihuZXcgR2V0RGVlcENoaWxkcmVuTm9kZXNBbmRHcm91cHNSZXF1ZXN0KGZJZCkpLm1hcCgoeCkgPT4geC5ob3N0RWxlbWVudCk7XG4gIH1cbn1cbiJdfQ==