@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
JavaScript
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==