@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.
74 lines • 13.3 kB
JavaScript
import { __decorate } from "tslib";
import { GetIntersections } from '@foblex/2d';
import { inject, Injectable } from '@angular/core';
import { FExecutionRegister, FMediator } from '@foblex/mediator';
import { IsConnectionUnderNodeRequest } from './is-connection-under-node.request';
import { FComponentsStore } from '../../../f-storage';
import { FNodeIntersectedWithConnections } from '../../index';
import { GetNormalizedConnectorRectRequest } from '../../../domain';
import * as i0 from "@angular/core";
let IsConnectionUnderNodeExecution = class IsConnectionUnderNodeExecution {
_fMediator = inject(FMediator);
_fComponentsStore = inject(FComponentsStore);
handle(request) {
const fOutputConnectors = this._getOutputConnectors(request.fNode);
const fInputConnectors = this._getInputConnectors(request.fNode);
if (!fOutputConnectors.length || !fInputConnectors.length) {
return;
}
const fOutputConnections = this._getOutputConnectionsId(fOutputConnectors);
const fInputConnections = this._getInputConnectionsId(fInputConnectors);
const fConnectionsUnderNode = this._calculateConnectionsUnderNode(request.fNode).filter((x) => {
return !fOutputConnections.includes(x.fId) && !fInputConnections.includes(x.fId);
});
if (!fConnectionsUnderNode.length) {
return;
}
this._emitNodeIntersectedWithConnections(request.fNode, fConnectionsUnderNode);
}
_getOutputConnectors(fNode) {
return this._fComponentsStore.fOutputs.filter((x) => {
return fNode.isContains(x.hostElement) && x.canBeConnected;
});
}
_getInputConnectors(fNode) {
return this._fComponentsStore.fInputs.filter((x) => {
return fNode.isContains(x.hostElement) && x.canBeConnected;
});
}
_getOutputConnectionsId(connectors) {
const connectorsId = this._getConnectorsId(connectors);
return this._fComponentsStore.fConnections
.filter((x) => connectorsId.includes(x.fOutputId))
.map((x) => x.fId);
}
_getInputConnectionsId(connectors) {
const connectorsId = this._getConnectorsId(connectors);
return this._fComponentsStore.fConnections
.filter((x) => connectorsId.includes(x.fInputId))
.map((x) => x.fId);
}
_getConnectorsId(connectors) {
return connectors.map((x) => x.fId);
}
_calculateConnectionsUnderNode(fNode) {
const fNodeRect = this._fMediator.execute(new GetNormalizedConnectorRectRequest(fNode.hostElement));
return this._fComponentsStore.fConnections.filter((x) => this._isConnectionHasIntersectionsWithNode(x, fNodeRect));
}
_isConnectionHasIntersectionsWithNode(fConnection, fNodeRect) {
return GetIntersections.getRoundedRectIntersectionsWithSVGPath(fConnection.fPath.hostElement, fNodeRect).length > 0;
}
_emitNodeIntersectedWithConnections(fNode, fConnections) {
this._fComponentsStore.fDraggable?.fNodeIntersectedWithConnections.emit(new FNodeIntersectedWithConnections(fNode.fId, fConnections.map((x) => x.fId)));
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsConnectionUnderNodeExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsConnectionUnderNodeExecution });
};
IsConnectionUnderNodeExecution = __decorate([
FExecutionRegister(IsConnectionUnderNodeRequest)
], IsConnectionUnderNodeExecution);
export { IsConnectionUnderNodeExecution };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsConnectionUnderNodeExecution, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtY29ubmVjdGlvbi11bmRlci1ub2RlLmV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZi1kcmFnZ2FibGUvZG9tYWluL2lzLWNvbm5lY3Rpb24tdW5kZXItbm9kZS9pcy1jb25uZWN0aW9uLXVuZGVyLW5vZGUuZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQWdCLE1BQU0sWUFBWSxDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJOUQsT0FBTyxFQUFDLGlDQUFpQyxFQUFrQyxNQUFNLGlCQUFpQixDQUFDOztBQUk1RixJQUFNLDhCQUE4QixHQUFwQyxNQUFNLDhCQUE4QjtJQUVqQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sQ0FBQyxPQUFxQztRQUVqRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FB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QUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRU8scUNBQXFDLENBQUMsV0FBNEIsRUFBRSxTQUF1QjtRQUNqRyxPQUFPLGdCQUFnQixDQUFDLHNDQUFzQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLEtBQWdCLEVBQUUsWUFBK0I7UUFDM0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSwrQkFBK0IsQ0FBQyxJQUFJLENBQ3JFLElBQUksK0JBQStCLENBQ2pDLEtBQUssQ0FBQyxHQUFHLEVBQ1QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUMvQixDQUNGLENBQUM7SUFDSixDQUFDO3dHQTFFVSw4QkFBOEI7NEdBQTlCLDhCQUE4Qjs7QUFBOUIsOEJBQThCO0lBRDFDLGtCQUFrQixDQUFDLDRCQUE0QixDQUFDO0dBQ3BDLDhCQUE4QixDQTJFMUM7OzRGQTNFWSw4QkFBOEI7a0JBRjFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZXRJbnRlcnNlY3Rpb25zLCBJUm91bmRlZFJlY3QgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkV4ZWN1dGlvblJlZ2lzdGVyLCBGTWVkaWF0b3IsIElFeGVjdXRpb24gfSBmcm9tICdAZm9ibGV4L21lZGlhdG9yJztcbmltcG9ydCB7IElzQ29ubmVjdGlvblVuZGVyTm9kZVJlcXVlc3QgfSBmcm9tICcuL2lzLWNvbm5lY3Rpb24tdW5kZXItbm9kZS5yZXF1ZXN0JztcbmltcG9ydCB7IEZDb21wb25lbnRzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9mLXN0b3JhZ2UnO1xuaW1wb3J0IHsgRk5vZGVJbnRlcnNlY3RlZFdpdGhDb25uZWN0aW9ucyB9IGZyb20gJy4uLy4uL2luZGV4JztcbmltcG9ydCB7IEZOb2RlQmFzZSB9IGZyb20gJy4uLy4uLy4uL2Ytbm9kZSc7XG5pbXBvcnQgeyBGQ29ubmVjdG9yQmFzZSB9IGZyb20gJy4uLy4uLy4uL2YtY29ubmVjdG9ycyc7XG5pbXBvcnQgeyBGQ29ubmVjdGlvbkJhc2UgfSBmcm9tICcuLi8uLi8uLi9mLWNvbm5lY3Rpb24nO1xuaW1wb3J0IHtHZXROb3JtYWxpemVkQ29ubmVjdG9yUmVjdFJlcXVlc3QsIEdldE5vcm1hbGl6ZWRFbGVtZW50UmVjdFJlcXVlc3R9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoSXNDb25uZWN0aW9uVW5kZXJOb2RlUmVxdWVzdClcbmV4cG9ydCBjbGFzcyBJc0Nvbm5lY3Rpb25VbmRlck5vZGVFeGVjdXRpb24gaW1wbGVtZW50cyBJRXhlY3V0aW9uPElzQ29ubmVjdGlvblVuZGVyTm9kZVJlcXVlc3QsIHZvaWQ+IHtcblxuICBwcml2YXRlIF9mTWVkaWF0b3IgPSBpbmplY3QoRk1lZGlhdG9yKTtcbiAgcHJpdmF0ZSBfZkNvbXBvbmVudHNTdG9yZSA9IGluamVjdChGQ29tcG9uZW50c1N0b3JlKTtcblxuICBwdWJsaWMgaGFuZGxlKHJlcXVlc3Q6IElzQ29ubmVjdGlvblVuZGVyTm9kZVJlcXVlc3QpOiB2b2lkIHtcblxuICAgIGNvbnN0IGZPdXRwdXRDb25uZWN0b3JzID0gdGhpcy5fZ2V0T3V0cHV0Q29ubmVjdG9ycyhyZXF1ZXN0LmZOb2RlKTtcbiAgICBjb25zdCBmSW5wdXRDb25uZWN0b3JzID0gdGhpcy5fZ2V0SW5wdXRDb25uZWN0b3JzKHJlcXVlc3QuZk5vZGUpO1xuXG4gICAgaWYgKCFmT3V0cHV0Q29ubmVjdG9ycy5sZW5ndGggfHwgIWZJbnB1dENvbm5lY3RvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZk91dHB1dENvbm5lY3Rpb25zID0gdGhpcy5fZ2V0T3V0cHV0Q29ubmVjdGlvbnNJZChmT3V0cHV0Q29ubmVjdG9ycyk7XG4gICAgY29uc3QgZklucHV0Q29ubmVjdGlvbnMgPSB0aGlzLl9nZXRJbnB1dENvbm5lY3Rpb25zSWQoZklucHV0Q29ubmVjdG9ycyk7XG5cbiAgICBjb25zdCBmQ29ubmVjdGlvbnNVbmRlck5vZGUgPSB0aGlzLl9jYWxjdWxhdGVDb25uZWN0aW9uc1VuZGVyTm9kZShyZXF1ZXN0LmZOb2RlKS5maWx0ZXIoKHgpID0+IHtcbiAgICAgIHJldHVybiAhZk91dHB1dENvbm5lY3Rpb25zLmluY2x1ZGVzKHguZklkKSAmJiAhZklucHV0Q29ubmVjdGlvbnMuaW5jbHVkZXMoeC5mSWQpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFmQ29ubmVjdGlvbnNVbmRlck5vZGUubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZW1pdE5vZGVJbnRlcnNlY3RlZFdpdGhDb25uZWN0aW9ucyhyZXF1ZXN0LmZOb2RlLCBmQ29ubmVjdGlvbnNVbmRlck5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0T3V0cHV0Q29ubmVjdG9ycyhmTm9kZTogRk5vZGVCYXNlKTogRkNvbm5lY3RvckJhc2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZDb21wb25lbnRzU3RvcmUuZk91dHB1dHMuZmlsdGVyKCh4KSA9PiB7XG4gICAgICByZXR1cm4gZk5vZGUuaXNDb250YWlucyh4Lmhvc3RFbGVtZW50KSAmJiB4LmNhbkJlQ29ubmVjdGVkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW5wdXRDb25uZWN0b3JzKGZOb2RlOiBGTm9kZUJhc2UpOiBGQ29ubmVjdG9yQmFzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbXBvbmVudHNTdG9yZS5mSW5wdXRzLmZpbHRlcigoeCkgPT4ge1xuICAgICAgcmV0dXJuIGZOb2RlLmlzQ29udGFpbnMoeC5ob3N0RWxlbWVudCkgJiYgeC5jYW5CZUNvbm5lY3RlZDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE91dHB1dENvbm5lY3Rpb25zSWQoY29ubmVjdG9yczogRkNvbm5lY3RvckJhc2VbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb25uZWN0b3JzSWQgPSB0aGlzLl9nZXRDb25uZWN0b3JzSWQoY29ubmVjdG9ycyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZDb21wb25lbnRzU3RvcmUuZkNvbm5lY3Rpb25zXG4gICAgICAuZmlsdGVyKCh4KSA9PiBjb25uZWN0b3JzSWQuaW5jbHVkZXMoeC5mT3V0cHV0SWQpKVxuICAgICAgLm1hcCgoeCkgPT4geC5mSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW5wdXRDb25uZWN0aW9uc0lkKGNvbm5lY3RvcnM6IEZDb25uZWN0b3JCYXNlW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY29ubmVjdG9yc0lkID0gdGhpcy5fZ2V0Q29ubmVjdG9yc0lkKGNvbm5lY3RvcnMpO1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZDb25uZWN0aW9uc1xuICAgICAgLmZpbHRlcigoeCkgPT4gY29ubmVjdG9yc0lkLmluY2x1ZGVzKHguZklucHV0SWQpKVxuICAgICAgLm1hcCgoeCkgPT4geC5mSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29ubmVjdG9yc0lkKGNvbm5lY3RvcnM6IEZDb25uZWN0b3JCYXNlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGNvbm5lY3RvcnMubWFwKCh4KSA9PiB4LmZJZCk7XG4gIH1cblxuICBwcml2YXRlIF9jYWxjdWxhdGVDb25uZWN0aW9uc1VuZGVyTm9kZShmTm9kZTogRk5vZGVCYXNlKTogRkNvbm5lY3Rpb25CYXNlW10ge1xuICAgIGNvbnN0IGZOb2RlUmVjdCA9IHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlPElSb3VuZGVkUmVjdD4obmV3IEdldE5vcm1hbGl6ZWRDb25uZWN0b3JSZWN0UmVxdWVzdChmTm9kZS5ob3N0RWxlbWVudCkpO1xuICAgIHJldHVybiB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZDb25uZWN0aW9ucy5maWx0ZXIoKHgpID0+IHRoaXMuX2lzQ29ubmVjdGlvbkhhc0ludGVyc2VjdGlvbnNXaXRoTm9kZSh4LCBmTm9kZVJlY3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQ29ubmVjdGlvbkhhc0ludGVyc2VjdGlvbnNXaXRoTm9kZShmQ29ubmVjdGlvbjogRkNvbm5lY3Rpb25CYXNlLCBmTm9kZVJlY3Q6IElSb3VuZGVkUmVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBHZXRJbnRlcnNlY3Rpb25zLmdldFJvdW5kZWRSZWN0SW50ZXJzZWN0aW9uc1dpdGhTVkdQYXRoKGZDb25uZWN0aW9uLmZQYXRoLmhvc3RFbGVtZW50LCBmTm9kZVJlY3QpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0Tm9kZUludGVyc2VjdGVkV2l0aENvbm5lY3Rpb25zKGZOb2RlOiBGTm9kZUJhc2UsIGZDb25uZWN0aW9uczogRkNvbm5lY3Rpb25CYXNlW10pOiB2b2lkIHtcbiAgICB0aGlzLl9mQ29tcG9uZW50c1N0b3JlLmZEcmFnZ2FibGU/LmZOb2RlSW50ZXJzZWN0ZWRXaXRoQ29ubmVjdGlvbnMuZW1pdChcbiAgICAgIG5ldyBGTm9kZUludGVyc2VjdGVkV2l0aENvbm5lY3Rpb25zKFxuICAgICAgICBmTm9kZS5mSWQsXG4gICAgICAgIGZDb25uZWN0aW9ucy5tYXAoKHgpID0+IHguZklkKVxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==