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.

87 lines 12.9 kB
import { booleanAttribute, Directive, ElementRef, inject, Input } from '@angular/core'; import { FNodeOutputBase, F_NODE_OUTPUT } from './f-node-output-base'; import { EFConnectableSide } from '../e-f-connectable-side'; import { F_NODE } from '../../f-node'; import { castToEnum } from '@foblex/utils'; import { FMediator } from '@foblex/mediator'; import { AddOutputToStoreRequest, F_CSS_CLASS, RemoveOutputFromStoreRequest } from '../../domain'; import * as i0 from "@angular/core"; let uniqueId = 0; export class FNodeOutputDirective extends FNodeOutputBase { _elementReference = inject(ElementRef); _fMediator = inject(FMediator); _fNode = inject(F_NODE); fId = `f-node-output-${uniqueId++}`; multiple = false; disabled = false; userFConnectableSide = EFConnectableSide.AUTO; isSelfConnectable = true; canBeConnectedInputs = []; get fNodeId() { return this._fNode.fId; } get hostElement() { return this._elementReference.nativeElement; } ngOnInit() { this._fMediator.execute(new AddOutputToStoreRequest(this)); this._fNode.addConnector(this); } ngOnChanges(changes) { if (changes['userFConnectableSide']) { this._fNode.refresh(); } } setConnected(toConnector) { super.setConnected(toConnector); this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_CONNECTED, true); this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_NOT_CONNECTABLE, !this.canBeConnected); } resetConnected() { super.resetConnected(); this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_CONNECTED, false); this.hostElement.classList.toggle(F_CSS_CLASS.CONNECTOR.OUTPUT_NOT_CONNECTABLE, !this.canBeConnected); } ngOnDestroy() { this._fNode.removeConnector(this); this._fMediator.execute(new RemoveOutputFromStoreRequest(this)); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeOutputDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.13", type: FNodeOutputDirective, selector: "[fNodeOutput]", inputs: { fId: ["fOutputId", "fId"], multiple: ["fOutputMultiple", "multiple"], disabled: ["fOutputDisabled", "disabled", booleanAttribute], userFConnectableSide: ["fOutputConnectableSide", "userFConnectableSide", (value) => castToEnum(value, 'fOutputConnectableSide', EFConnectableSide)], isSelfConnectable: "isSelfConnectable", canBeConnectedInputs: ["fCanBeConnectedInputs", "canBeConnectedInputs"] }, host: { properties: { "attr.data-f-output-id": "fId", "class.f-node-output-multiple": "multiple", "class.f-node-output-disabled": "disabled", "class.f-node-output-self-connectable": "isSelfConnectable" }, classAttribute: "f-component f-node-output" }, providers: [{ provide: F_NODE_OUTPUT, useExisting: FNodeOutputDirective }], exportAs: ["fNodeOutput"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FNodeOutputDirective, decorators: [{ type: Directive, args: [{ selector: "[fNodeOutput]", exportAs: 'fNodeOutput', host: { '[attr.data-f-output-id]': 'fId', class: "f-component f-node-output", '[class.f-node-output-multiple]': 'multiple', '[class.f-node-output-disabled]': 'disabled', '[class.f-node-output-self-connectable]': 'isSelfConnectable', }, providers: [{ provide: F_NODE_OUTPUT, useExisting: FNodeOutputDirective }], }] }], propDecorators: { fId: [{ type: Input, args: ['fOutputId'] }], multiple: [{ type: Input, args: ['fOutputMultiple'] }], disabled: [{ type: Input, args: [{ alias: 'fOutputDisabled', transform: booleanAttribute }] }], userFConnectableSide: [{ type: Input, args: [{ alias: 'fOutputConnectableSide', transform: (value) => castToEnum(value, 'fOutputConnectableSide', EFConnectableSide) }] }], isSelfConnectable: [{ type: Input }], canBeConnectedInputs: [{ type: Input, args: [{ alias: 'fCanBeConnectedInputs' }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLW91dHB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtY29ubmVjdG9ycy9mLW5vZGUtb3V0cHV0L2Ytbm9kZS1vdXRwdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUlOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUdsRyxJQUFJLFFBQVEsR0FBVyxDQUFDLENBQUM7QUFjekIsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGVBQWU7SUFFL0MsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUdoQixHQUFHLEdBQVcsaUJBQWtCLFFBQVEsRUFBRyxFQUFFLENBQUM7SUFHOUMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUcxQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBTTFCLG9CQUFvQixHQUFzQixpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFHakUsaUJBQWlC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QkFBd0I7d0JBQy9CLFNBQVMsRUFBRSxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsQ0FBQztxQkFDOUY7Z0JBSWUsaUJBQWlCO3NCQURoQyxLQUFLO2dCQUlVLG9CQUFvQjtzQkFEbkMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZOb2RlT3V0cHV0QmFzZSwgRl9OT0RFX09VVFBVVCB9IGZyb20gJy4vZi1ub2RlLW91dHB1dC1iYXNlJztcbmltcG9ydCB7IEVGQ29ubmVjdGFibGVTaWRlIH0gZnJvbSAnLi4vZS1mLWNvbm5lY3RhYmxlLXNpZGUnO1xuaW1wb3J0IHsgRl9OT0RFIH0gZnJvbSAnLi4vLi4vZi1ub2RlJztcbmltcG9ydCB7IGNhc3RUb0VudW0gfSBmcm9tICdAZm9ibGV4L3V0aWxzJztcbmltcG9ydCB7IEZNZWRpYXRvciB9IGZyb20gJ0Bmb2JsZXgvbWVkaWF0b3InO1xuaW1wb3J0IHsgQWRkT3V0cHV0VG9TdG9yZVJlcXVlc3QsIEZfQ1NTX0NMQVNTLCBSZW1vdmVPdXRwdXRGcm9tU3RvcmVSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZDb25uZWN0b3JCYXNlIH0gZnJvbSAnLi4vZi1jb25uZWN0b3ItYmFzZSc7XG5cbmxldCB1bmlxdWVJZDogbnVtYmVyID0gMDtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcIltmTm9kZU91dHB1dF1cIixcbiAgZXhwb3J0QXM6ICdmTm9kZU91dHB1dCcsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuZGF0YS1mLW91dHB1dC1pZF0nOiAnZklkJyxcbiAgICBjbGFzczogXCJmLWNvbXBvbmVudCBmLW5vZGUtb3V0cHV0XCIsXG4gICAgJ1tjbGFzcy5mLW5vZGUtb3V0cHV0LW11bHRpcGxlXSc6ICdtdWx0aXBsZScsXG4gICAgJ1tjbGFzcy5mLW5vZGUtb3V0cHV0LWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5mLW5vZGUtb3V0cHV0LXNlbGYtY29ubmVjdGFibGVdJzogJ2lzU2VsZkNvbm5lY3RhYmxlJyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbIHsgcHJvdmlkZTogRl9OT0RFX09VVFBVVCwgdXNlRXhpc3Rpbmc6IEZOb2RlT3V0cHV0RGlyZWN0aXZlIH0gXSxcbn0pXG5leHBvcnQgY2xhc3MgRk5vZGVPdXRwdXREaXJlY3RpdmUgZXh0ZW5kcyBGTm9kZU91dHB1dEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9lbGVtZW50UmVmZXJlbmNlID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIF9mTWVkaWF0b3IgPSBpbmplY3QoRk1lZGlhdG9yKTtcbiAgcHJpdmF0ZSBfZk5vZGUgPSBpbmplY3QoRl9OT0RFKTtcblxuICBASW5wdXQoJ2ZPdXRwdXRJZCcpXG4gIHB1YmxpYyBvdmVycmlkZSBmSWQ6IHN0cmluZyA9IGBmLW5vZGUtb3V0cHV0LSR7IHVuaXF1ZUlkKysgfWA7XG5cbiAgQElucHV0KCdmT3V0cHV0TXVsdGlwbGUnKVxuICBwdWJsaWMgb3ZlcnJpZGUgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoeyBhbGlhczogJ2ZPdXRwdXREaXNhYmxlZCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoe1xuICAgIGFsaWFzOiAnZk91dHB1dENvbm5lY3RhYmxlU2lkZScsXG4gICAgdHJhbnNmb3JtOiAodmFsdWU6IHVua25vd24pID0+IGNhc3RUb0VudW0odmFsdWUsICdmT3V0cHV0Q29ubmVjdGFibGVTaWRlJywgRUZDb25uZWN0YWJsZVNpZGUpXG4gIH0pXG4gIHB1YmxpYyBvdmVycmlkZSB1c2VyRkNvbm5lY3RhYmxlU2lkZTogRUZDb25uZWN0YWJsZVNpZGUgPSBFRkNvbm5lY3RhYmxlU2lkZS5BVVRPO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBpc1NlbGZDb25uZWN0YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KHsgYWxpYXM6ICdmQ2FuQmVDb25uZWN0ZWRJbnB1dHMnIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBjYW5CZUNvbm5lY3RlZElucHV0czogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGZOb2RlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZk5vZGUuZklkO1xuICB9XG5cbiAgcHVibGljIGdldCBob3N0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUobmV3IEFkZE91dHB1dFRvU3RvcmVSZXF1ZXN0KHRoaXMpKTtcbiAgICB0aGlzLl9mTm9kZS5hZGRDb25uZWN0b3IodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyAndXNlckZDb25uZWN0YWJsZVNpZGUnIF0pIHtcbiAgICAgIHRoaXMuX2ZOb2RlLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0Q29ubmVjdGVkKHRvQ29ubmVjdG9yOiBGQ29ubmVjdG9yQmFzZSk6IHZvaWQge1xuICAgIHN1cGVyLnNldENvbm5lY3RlZCh0b0Nvbm5lY3Rvcik7XG4gICAgdGhpcy5ob3N0RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKEZfQ1NTX0NMQVNTLkNPTk5FQ1RPUi5PVVRQVVRfQ09OTkVDVEVELCB0cnVlKTtcbiAgICB0aGlzLmhvc3RFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoRl9DU1NfQ0xBU1MuQ09OTkVDVE9SLk9VVFBVVF9OT1RfQ09OTkVDVEFCTEUsICF0aGlzLmNhbkJlQ29ubmVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZXNldENvbm5lY3RlZCgpOiB2b2lkIHtcbiAgICBzdXBlci5yZXNldENvbm5lY3RlZCgpO1xuICAgIHRoaXMuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShGX0NTU19DTEFTUy5DT05ORUNUT1IuT1VUUFVUX0NPTk5FQ1RFRCwgZmFsc2UpO1xuICAgIHRoaXMuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShGX0NTU19DTEFTUy5DT05ORUNUT1IuT1VUUFVUX05PVF9DT05ORUNUQUJMRSwgIXRoaXMuY2FuQmVDb25uZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2ZOb2RlLnJlbW92ZUNvbm5lY3Rvcih0aGlzKTtcbiAgICB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShuZXcgUmVtb3ZlT3V0cHV0RnJvbVN0b3JlUmVxdWVzdCh0aGlzKSk7XG4gIH1cbn1cbiJdfQ==