@bespunky/angular-zen
Version:
The Angular tools you always wished were there.
67 lines • 8.76 kB
JavaScript
import { merge } from 'rxjs';
import { Directive, Input } from '@angular/core';
import { ObserveArrayDirective } from '../abstraction/observe-array-base.directive';
import * as i0 from "@angular/core";
/**
* Documentation in {@link ObserveMergeDirective.observeMerge} to allow in-template tooltips.
*
* @export
* @class ObserveMergeDirective
* @extends {ObserveArrayDirective<T, EmittedArrayTypesOf<T>, ObserveMergeContext<T>>}
* @template T The type of observables tuple received by the directive.
*/
export class ObserveMergeDirective extends ObserveArrayDirective {
constructor() {
super(...arguments);
this.selector = 'observeMerge';
}
/**
* Combines an array of observables using rxjs {@link https://rxjs.dev/api/index/function/merge merge()} and exposes the emitted values to the template.
*
* Any template assigned with the directive will render immediately, and its view context will be updated with the emitted value on
* each emission. The directive will be responsible for subscribing on init and unsubscribing on destroy.
*
* ## Features
*
* #### Shared observable
* The watched observable will automatically be multicasted so that any child observables created by the template will use the same
* stream.
*
* The shared observable can be accessed using the `let source = source` microsyntax.
*
* #### Observer events
* Whenever the observable changes state or emits a value, the corresponding event is emitted:
* `nextCalled` - A value has been emitted. `$event` will be the emitted value.
* `errorCalled` - An error has occured in the pipeline. `$event` will be the error.
* `completeCalled` - The observable has completed. `$event` will be void.
*
* > Because of limitations to Angular's Structural Directives, in order to bind the events the desugared syntax must be used.
* This, for example, **will trigger** the event:
* > ```html
* ><ng-template [observe]="x$" let-source="source" (nextCalled)="onNext($event)">
* > ...
* ></ng-template>
* > ```
* >
* >This **will NOT trigger** the event:
* >```html
* > <div *observe="x$; let source = source" (nextCalled)="onNext($event)">...</div>
* >```
*/
set observeMerge(value) { this.input.next(value); }
static ngTemplateContextGuard(directive, context) { return true; }
observeInput(input) {
return merge(...input);
}
}
ObserveMergeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObserveMergeDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
ObserveMergeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ObserveMergeDirective, selector: "[observeMerge]", inputs: { observeMerge: "observeMerge" }, usesInheritance: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObserveMergeDirective, decorators: [{
type: Directive,
args: [{
selector: '[observeMerge]'
}]
}], propDecorators: { observeMerge: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1tZXJnZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItemVuL2NvcmUvc3JjL3J4anMvb2JzZXJ2ZS9kaXJlY3RpdmVzL29ic2VydmUtbWVyZ2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUcsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFpQixNQUFNLDZDQUE2QyxDQUFDOztBQVFuRzs7Ozs7OztHQU9HO0FBSUgsTUFBTSxPQUFPLHFCQUNSLFNBQVEscUJBQXdFO0lBSnJGOztRQU1jLGFBQVEsR0FBRyxjQUFjLENBQUM7S0EyQ3ZDO0lBekNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWdDRztJQUNILElBQW9CLFlBQVksQ0FBQyxLQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBa0MsU0FBbUMsRUFBRSxPQUFnQixJQUF1QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFL0osWUFBWSxDQUFDLEtBQVE7UUFFM0IsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQXVDLENBQUM7SUFDakUsQ0FBQzs7bUhBN0NRLHFCQUFxQjt1R0FBckIscUJBQXFCOzRGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtpQkFDN0I7OEJBdUN1QixZQUFZO3NCQUEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE9ic2VydmVBcnJheURpcmVjdGl2ZSAgICAgICAgICAgICAgICB9IGZyb20gJy4uL2Fic3RyYWN0aW9uL29ic2VydmUtYXJyYXktYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmVzb2x2ZWRPYnNlcnZlQ29udGV4dCAgICAgICAgICAgICAgIH0gZnJvbSAnLi4vYWJzdHJhY3Rpb24vdHlwZXMvZ2VuZXJhbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlQXJyYXksIEVtaXR0ZWRBcnJheVR5cGVzT2YgfSBmcm9tICcuLi9hYnN0cmFjdGlvbi90eXBlcy9hcnJheXMnO1xuXG50eXBlIE9ic2VydmVNZXJnZUNvbnRleHQ8VCBleHRlbmRzIE9ic2VydmFibGVBcnJheT4gPSBSZXNvbHZlZE9ic2VydmVDb250ZXh0PEVtaXR0ZWRBcnJheVR5cGVzT2Y8VD4+ICYge1xuICAgIG9ic2VydmVNZXJnZTogRW1pdHRlZEFycmF5VHlwZXNPZjxUPlxufTtcblxuLyoqXG4gKiBEb2N1bWVudGF0aW9uIGluIHtAbGluayBPYnNlcnZlTWVyZ2VEaXJlY3RpdmUub2JzZXJ2ZU1lcmdlfSB0byBhbGxvdyBpbi10ZW1wbGF0ZSB0b29sdGlwcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgT2JzZXJ2ZU1lcmdlRGlyZWN0aXZlXG4gKiBAZXh0ZW5kcyB7T2JzZXJ2ZUFycmF5RGlyZWN0aXZlPFQsIEVtaXR0ZWRBcnJheVR5cGVzT2Y8VD4sIE9ic2VydmVNZXJnZUNvbnRleHQ8VD4+fVxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2Ygb2JzZXJ2YWJsZXMgdHVwbGUgcmVjZWl2ZWQgYnkgdGhlIGRpcmVjdGl2ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbb2JzZXJ2ZU1lcmdlXSdcbn0pXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZU1lcmdlRGlyZWN0aXZlPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPHVua25vd24+W10+XG4gICAgIGV4dGVuZHMgT2JzZXJ2ZUFycmF5RGlyZWN0aXZlPFQsIEVtaXR0ZWRBcnJheVR5cGVzT2Y8VD4sIE9ic2VydmVNZXJnZUNvbnRleHQ8VD4+XG57XG4gICAgcHJvdGVjdGVkIHNlbGVjdG9yID0gJ29ic2VydmVNZXJnZSc7XG5cbiAgICAvKipcbiAgICAgKiBDb21iaW5lcyBhbiBhcnJheSBvZiBvYnNlcnZhYmxlcyB1c2luZyByeGpzIHtAbGluayBodHRwczovL3J4anMuZGV2L2FwaS9pbmRleC9mdW5jdGlvbi9tZXJnZSBtZXJnZSgpfSBhbmQgZXhwb3NlcyB0aGUgZW1pdHRlZCB2YWx1ZXMgdG8gdGhlIHRlbXBsYXRlLlxuICAgICAqIFxuICAgICAqIEFueSB0ZW1wbGF0ZSBhc3NpZ25lZCB3aXRoIHRoZSBkaXJlY3RpdmUgd2lsbCByZW5kZXIgaW1tZWRpYXRlbHksIGFuZCBpdHMgdmlldyBjb250ZXh0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBlbWl0dGVkIHZhbHVlIG9uXG4gICAgICogZWFjaCBlbWlzc2lvbi4gVGhlIGRpcmVjdGl2ZSB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBzdWJzY3JpYmluZyBvbiBpbml0IGFuZCB1bnN1YnNjcmliaW5nIG9uIGRlc3Ryb3kuXG4gICAgICogXG4gICAgICogIyMgRmVhdHVyZXNcbiAgICAgKiBcbiAgICAgKiAjIyMjIFNoYXJlZCBvYnNlcnZhYmxlXG4gICAgICogVGhlIHdhdGNoZWQgb2JzZXJ2YWJsZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgbXVsdGljYXN0ZWQgc28gdGhhdCBhbnkgY2hpbGQgb2JzZXJ2YWJsZXMgY3JlYXRlZCBieSB0aGUgdGVtcGxhdGUgd2lsbCB1c2UgdGhlIHNhbWVcbiAgICAgKiBzdHJlYW0uXG4gICAgICogXG4gICAgICogVGhlIHNoYXJlZCBvYnNlcnZhYmxlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgYGxldCBzb3VyY2UgPSBzb3VyY2VgIG1pY3Jvc3ludGF4LlxuICAgICAqIFxuICAgICAqICMjIyMgT2JzZXJ2ZXIgZXZlbnRzXG4gICAgICogV2hlbmV2ZXIgdGhlIG9ic2VydmFibGUgY2hhbmdlcyBzdGF0ZSBvciBlbWl0cyBhIHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyBldmVudCBpcyBlbWl0dGVkOiAgXG4gICAgICogYG5leHRDYWxsZWRgIC0gQSB2YWx1ZSBoYXMgYmVlbiBlbWl0dGVkLiBgJGV2ZW50YCB3aWxsIGJlIHRoZSBlbWl0dGVkIHZhbHVlLiAgXG4gICAgICogYGVycm9yQ2FsbGVkYCAtIEFuIGVycm9yIGhhcyBvY2N1cmVkIGluIHRoZSBwaXBlbGluZS4gYCRldmVudGAgd2lsbCBiZSB0aGUgZXJyb3IuICBcbiAgICAgKiBgY29tcGxldGVDYWxsZWRgIC0gVGhlIG9ic2VydmFibGUgaGFzIGNvbXBsZXRlZC4gYCRldmVudGAgd2lsbCBiZSB2b2lkLlxuICAgICAqXG4gICAgICogPiBCZWNhdXNlIG9mIGxpbWl0YXRpb25zIHRvIEFuZ3VsYXIncyBTdHJ1Y3R1cmFsIERpcmVjdGl2ZXMsIGluIG9yZGVyIHRvIGJpbmQgdGhlIGV2ZW50cyB0aGUgZGVzdWdhcmVkIHN5bnRheCBtdXN0IGJlIHVzZWQuXG4gICAgICogVGhpcywgZm9yIGV4YW1wbGUsICoqd2lsbCB0cmlnZ2VyKiogdGhlIGV2ZW50OlxuICAgICAqID4gYGBgaHRtbFxuICAgICAqID48bmctdGVtcGxhdGUgW29ic2VydmVdPVwieCRcIiBsZXQtc291cmNlPVwic291cmNlXCIgKG5leHRDYWxsZWQpPVwib25OZXh0KCRldmVudClcIj5cbiAgICAgKiA+ICAgIC4uLlxuICAgICAqID48L25nLXRlbXBsYXRlPlxuICAgICAqID4gYGBgXG4gICAgICogPlxuICAgICAqID5UaGlzICoqd2lsbCBOT1QgdHJpZ2dlcioqIHRoZSBldmVudDpcbiAgICAgKiA+YGBgaHRtbFxuICAgICAqID4gPGRpdiAqb2JzZXJ2ZT1cIngkOyBsZXQgc291cmNlID0gc291cmNlXCIgKG5leHRDYWxsZWQpPVwib25OZXh0KCRldmVudClcIj4uLi48L2Rpdj5cbiAgICAgKiA+YGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNldCBvYnNlcnZlTWVyZ2UodmFsdWU6IFQpIHsgdGhpcy5pbnB1dC5uZXh0KHZhbHVlKTsgfVxuICAgIFxuICAgIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPHVua25vd24+W10+KGRpcmVjdGl2ZTogT2JzZXJ2ZU1lcmdlRGlyZWN0aXZlPFQ+LCBjb250ZXh0OiB1bmtub3duKTogY29udGV4dCBpcyBPYnNlcnZlTWVyZ2VDb250ZXh0PFQ+IHsgcmV0dXJuIHRydWU7IH1cbiAgICBcbiAgICBwcm90ZWN0ZWQgb2JzZXJ2ZUlucHV0KGlucHV0OiBUKTogT2JzZXJ2YWJsZTxFbWl0dGVkQXJyYXlUeXBlc09mPFQ+PlxuICAgIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKC4uLmlucHV0KSBhcyBPYnNlcnZhYmxlPEVtaXR0ZWRBcnJheVR5cGVzT2Y8VD4+O1xuICAgIH1cbn1cbiJdfQ==