@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.
68 lines • 11 kB
JavaScript
import { __decorate } from "tslib";
import { inject, Injectable } from '@angular/core';
import { FExecutionRegister, FMediator } from '@foblex/mediator';
import { UpdateNodeWhenStateOrSizeChangedRequest } from './update-node-when-state-or-size-changed-request';
import { EFConnectableSide } from '../../../f-connectors';
import { NotifyDataChangedRequest } from '../../../f-storage';
import { debounceTime, FChannelHub, notifyOnStart } from '../../../reactivity';
import { FResizeChannel } from '../../../reactivity';
import { RectExtensions } from '@foblex/2d';
import * as i0 from "@angular/core";
let UpdateNodeWhenStateOrSizeChangedExecution = class UpdateNodeWhenStateOrSizeChangedExecution {
_fMediator = inject(FMediator);
handle(request) {
const { hostElement, connectors, stateChanges } = request.fComponent;
new FChannelHub(new FResizeChannel(hostElement), stateChanges).pipe(notifyOnStart(), debounceTime(10)).listen(request.destroyRef, () => {
this._calculateConnectorsConnectableSide(connectors, hostElement);
this._fMediator.execute(new NotifyDataChangedRequest());
});
}
_calculateConnectorsConnectableSide(fConnectors, fNodeHost) {
fConnectors.forEach((x) => {
x.fConnectableSide = this._calculateConnectorConnectableSide(x, fNodeHost);
});
}
_calculateConnectorConnectableSide(fConnector, fNodeHost) {
let result;
if (fConnector.userFConnectableSide === EFConnectableSide.AUTO) {
result = this._getSideByDelta(fConnector.hostElement, fNodeHost);
}
else {
result = fConnector.userFConnectableSide;
}
return result;
}
_getSideByDelta(fConnectorHost, fNodeHost) {
let result;
const childRect = RectExtensions.fromElement(fConnectorHost);
const parentRect = fNodeHost.getBoundingClientRect();
const deltaLeft = childRect.gravityCenter.x - parentRect.left;
const deltaRight = parentRect.right - childRect.gravityCenter.x;
const deltaTop = childRect.gravityCenter.y - parentRect.top;
const deltaBottom = parentRect.bottom - childRect.gravityCenter.y;
const minDelta = Math.min(deltaLeft, deltaRight, deltaTop, deltaBottom);
if (minDelta === deltaLeft) {
result = EFConnectableSide.LEFT;
}
else if (minDelta === deltaRight) {
result = EFConnectableSide.RIGHT;
}
else if (minDelta === deltaTop) {
result = EFConnectableSide.TOP;
}
else {
result = EFConnectableSide.BOTTOM;
}
return result;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateNodeWhenStateOrSizeChangedExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateNodeWhenStateOrSizeChangedExecution });
};
UpdateNodeWhenStateOrSizeChangedExecution = __decorate([
FExecutionRegister(UpdateNodeWhenStateOrSizeChangedRequest)
], UpdateNodeWhenStateOrSizeChangedExecution);
export { UpdateNodeWhenStateOrSizeChangedExecution };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateNodeWhenStateOrSizeChangedExecution, decorators: [{
type: Injectable
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLW5vZGUtd2hlbi1zdGF0ZS1vci1zaXplLWNoYW5nZWQuZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9kb21haW4vZi1ub2RlL3VwZGF0ZS1ub2RlLXdoZW4tc3RhdGUtb3Itc2l6ZS1jaGFuZ2VkL3VwZGF0ZS1ub2RlLXdoZW4tc3RhdGUtb3Itc2l6ZS1jaGFuZ2VkLmV4ZWN1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBYyxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFJckMsSUFBTSx5Q0FBeUMsR0FBL0MsTUFBTSx5Q0FBeUM7SUFHbkMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV6QyxNQUFNLENBQUMsT0FBZ0Q7UUFDNUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVyRSxJQUFJLFdBQVcsQ0FDYixJQUFJLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFDL0IsWUFBWSxDQUNiLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUN4RSxJQUFJLENBQUMsbUNBQW1DLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFPLElBQUksd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLFdBQTZCLEVBQUUsU0FBbUM7UUFDNUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQWlCLEVBQUUsRUFBRTtZQUN4QyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQ0FBa0MsQ0FBQyxVQUEwQixFQUFFLFNBQW1DO1FBQ3hHLElBQUksTUFBcUMsQ0FBQztRQUUxQyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvRCxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxjQUF3QyxFQUFFLFNBQW1DO1FBQ25HLElBQUksTUFBcUMsQ0FBQztRQUUxQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXJELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDOUQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV4RSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQixNQUFNLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2xDLENBQUM7YUFBTSxJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ25DLENBQUM7YUFBTSxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUNwQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzt3R0ExRFUseUNBQXlDOzRHQUF6Qyx5Q0FBeUM7O0FBQXpDLHlDQUF5QztJQURyRCxrQkFBa0IsQ0FBQyx1Q0FBdUMsQ0FBQztHQUMvQyx5Q0FBeUMsQ0EyRHJEOzs0RkEzRFkseUNBQXlDO2tCQUZyRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGRXhlY3V0aW9uUmVnaXN0ZXIsIEZNZWRpYXRvciwgSUV4ZWN1dGlvbiB9IGZyb20gJ0Bmb2JsZXgvbWVkaWF0b3InO1xuaW1wb3J0IHsgVXBkYXRlTm9kZVdoZW5TdGF0ZU9yU2l6ZUNoYW5nZWRSZXF1ZXN0IH0gZnJvbSAnLi91cGRhdGUtbm9kZS13aGVuLXN0YXRlLW9yLXNpemUtY2hhbmdlZC1yZXF1ZXN0JztcbmltcG9ydCB7IEVGQ29ubmVjdGFibGVTaWRlLCBGQ29ubmVjdG9yQmFzZSB9IGZyb20gJy4uLy4uLy4uL2YtY29ubmVjdG9ycyc7XG5pbXBvcnQgeyBOb3RpZnlEYXRhQ2hhbmdlZFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi9mLXN0b3JhZ2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBGQ2hhbm5lbEh1Yiwgbm90aWZ5T25TdGFydCB9IGZyb20gJy4uLy4uLy4uL3JlYWN0aXZpdHknO1xuaW1wb3J0IHsgRlJlc2l6ZUNoYW5uZWwgfSBmcm9tICcuLi8uLi8uLi9yZWFjdGl2aXR5JztcbmltcG9ydCB7IFJlY3RFeHRlbnNpb25zIH0gZnJvbSAnQGZvYmxleC8yZCc7XG5cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoVXBkYXRlTm9kZVdoZW5TdGF0ZU9yU2l6ZUNoYW5nZWRSZXF1ZXN0KVxuZXhwb3J0IGNsYXNzIFVwZGF0ZU5vZGVXaGVuU3RhdGVPclNpemVDaGFuZ2VkRXhlY3V0aW9uXG4gIGltcGxlbWVudHMgSUV4ZWN1dGlvbjxVcGRhdGVOb2RlV2hlblN0YXRlT3JTaXplQ2hhbmdlZFJlcXVlc3QsIHZvaWQ+IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mTWVkaWF0b3IgPSBpbmplY3QoRk1lZGlhdG9yKTtcblxuICBwdWJsaWMgaGFuZGxlKHJlcXVlc3Q6IFVwZGF0ZU5vZGVXaGVuU3RhdGVPclNpemVDaGFuZ2VkUmVxdWVzdCk6IHZvaWQge1xuICAgIGNvbnN0IHsgaG9zdEVsZW1lbnQsIGNvbm5lY3RvcnMsIHN0YXRlQ2hhbmdlcyB9ID0gcmVxdWVzdC5mQ29tcG9uZW50O1xuXG4gICAgbmV3IEZDaGFubmVsSHViKFxuICAgICAgbmV3IEZSZXNpemVDaGFubmVsKGhvc3RFbGVtZW50KSxcbiAgICAgIHN0YXRlQ2hhbmdlc1xuICAgICkucGlwZShub3RpZnlPblN0YXJ0KCksIGRlYm91bmNlVGltZSgxMCkpLmxpc3RlbihyZXF1ZXN0LmRlc3Ryb3lSZWYsICgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGN1bGF0ZUNvbm5lY3RvcnNDb25uZWN0YWJsZVNpZGUoY29ubmVjdG9ycywgaG9zdEVsZW1lbnQpO1xuICAgICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGU8dm9pZD4obmV3IE5vdGlmeURhdGFDaGFuZ2VkUmVxdWVzdCgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUNvbm5lY3RvcnNDb25uZWN0YWJsZVNpZGUoZkNvbm5lY3RvcnM6IEZDb25uZWN0b3JCYXNlW10sIGZOb2RlSG9zdDogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50KTogdm9pZCB7XG4gICAgZkNvbm5lY3RvcnMuZm9yRWFjaCgoeDogRkNvbm5lY3RvckJhc2UpID0+IHtcbiAgICAgIHguZkNvbm5lY3RhYmxlU2lkZSA9IHRoaXMuX2NhbGN1bGF0ZUNvbm5lY3RvckNvbm5lY3RhYmxlU2lkZSh4LCBmTm9kZUhvc3QpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlQ29ubmVjdG9yQ29ubmVjdGFibGVTaWRlKGZDb25uZWN0b3I6IEZDb25uZWN0b3JCYXNlLCBmTm9kZUhvc3Q6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCk6IEVGQ29ubmVjdGFibGVTaWRlIHtcbiAgICBsZXQgcmVzdWx0OiBFRkNvbm5lY3RhYmxlU2lkZSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChmQ29ubmVjdG9yLnVzZXJGQ29ubmVjdGFibGVTaWRlID09PSBFRkNvbm5lY3RhYmxlU2lkZS5BVVRPKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLl9nZXRTaWRlQnlEZWx0YShmQ29ubmVjdG9yLmhvc3RFbGVtZW50LCBmTm9kZUhvc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBmQ29ubmVjdG9yLnVzZXJGQ29ubmVjdGFibGVTaWRlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2lkZUJ5RGVsdGEoZkNvbm5lY3Rvckhvc3Q6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCwgZk5vZGVIb3N0OiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQpOiBFRkNvbm5lY3RhYmxlU2lkZSB7XG4gICAgbGV0IHJlc3VsdDogRUZDb25uZWN0YWJsZVNpZGUgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjaGlsZFJlY3QgPSBSZWN0RXh0ZW5zaW9ucy5mcm9tRWxlbWVudChmQ29ubmVjdG9ySG9zdCk7XG4gICAgY29uc3QgcGFyZW50UmVjdCA9IGZOb2RlSG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IGRlbHRhTGVmdCA9IGNoaWxkUmVjdC5ncmF2aXR5Q2VudGVyLnggLSBwYXJlbnRSZWN0LmxlZnQ7XG4gICAgY29uc3QgZGVsdGFSaWdodCA9IHBhcmVudFJlY3QucmlnaHQgLSBjaGlsZFJlY3QuZ3Jhdml0eUNlbnRlci54O1xuICAgIGNvbnN0IGRlbHRhVG9wID0gY2hpbGRSZWN0LmdyYXZpdHlDZW50ZXIueSAtIHBhcmVudFJlY3QudG9wO1xuICAgIGNvbnN0IGRlbHRhQm90dG9tID0gcGFyZW50UmVjdC5ib3R0b20gLSBjaGlsZFJlY3QuZ3Jhdml0eUNlbnRlci55O1xuXG4gICAgY29uc3QgbWluRGVsdGEgPSBNYXRoLm1pbihkZWx0YUxlZnQsIGRlbHRhUmlnaHQsIGRlbHRhVG9wLCBkZWx0YUJvdHRvbSk7XG5cbiAgICBpZiAobWluRGVsdGEgPT09IGRlbHRhTGVmdCkge1xuICAgICAgcmVzdWx0ID0gRUZDb25uZWN0YWJsZVNpZGUuTEVGVDtcbiAgICB9IGVsc2UgaWYgKG1pbkRlbHRhID09PSBkZWx0YVJpZ2h0KSB7XG4gICAgICByZXN1bHQgPSBFRkNvbm5lY3RhYmxlU2lkZS5SSUdIVDtcbiAgICB9IGVsc2UgaWYgKG1pbkRlbHRhID09PSBkZWx0YVRvcCkge1xuICAgICAgcmVzdWx0ID0gRUZDb25uZWN0YWJsZVNpZGUuVE9QO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBFRkNvbm5lY3RhYmxlU2lkZS5CT1RUT007XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4iXX0=