UNPKG

@bespunky/angular-zen

Version:

The Angular tools you always wished were there.

67 lines 8.76 kB
import { concat } 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 ObserveConcatDirective.observeConcat} to allow in-template tooltips. * * @export * @class ObserveConcatDirective * @extends {ObserveArrayDirective<T, EmittedArrayTypesOf<T>, ObserveConcatContext<T>>} * @template T The type of observables tuple received by the directive. */ export class ObserveConcatDirective extends ObserveArrayDirective { constructor() { super(...arguments); this.selector = 'observeConcat'; } /** * Concats an array of observables using rxjs {@link https://rxjs.dev/api/index/function/concat concat()} 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 observeConcat(value) { this.input.next(value); } static ngTemplateContextGuard(directive, context) { return true; } observeInput(input) { return concat(...input); } } ObserveConcatDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObserveConcatDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); ObserveConcatDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ObserveConcatDirective, selector: "[observeConcat]", inputs: { observeConcat: "observeConcat" }, usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObserveConcatDirective, decorators: [{ type: Directive, args: [{ selector: '[observeConcat]' }] }], propDecorators: { observeConcat: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZS1jb25jYXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXplbi9jb3JlL3NyYy9yeGpzL29ic2VydmUvZGlyZWN0aXZlcy9vYnNlcnZlLWNvbmNhdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBSSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUcsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFRckY7Ozs7Ozs7R0FPRztBQUlILE1BQU0sT0FBTyxzQkFDUixTQUFRLHFCQUF5RTtJQUp0Rjs7UUFNYyxhQUFRLEdBQUcsZUFBZSxDQUFDO0tBMkN4QztJQXpDRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQ0c7SUFDSCxJQUFvQixhQUFhLENBQUMsS0FBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RSxNQUFNLENBQUMsc0JBQXNCLENBQWtDLFNBQW9DLEVBQUUsT0FBZ0IsSUFBd0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWpLLFlBQVksQ0FBQyxLQUFRO1FBRTNCLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUF1QyxDQUFDO0lBQ2xFLENBQUM7O29IQTdDUSxzQkFBc0I7d0dBQXRCLHNCQUFzQjs0RkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxpQkFBaUI7aUJBQzlCOzhCQXVDdUIsYUFBYTtzQkFBaEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGNvbmNhdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCAgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE9ic2VydmVBcnJheURpcmVjdGl2ZSAgfSBmcm9tICcuLi9hYnN0cmFjdGlvbi9vYnNlcnZlLWFycmF5LWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc29sdmVkT2JzZXJ2ZUNvbnRleHQgfSBmcm9tICcuLi9hYnN0cmFjdGlvbi90eXBlcy9nZW5lcmFsJztcbmltcG9ydCB7IEVtaXR0ZWRBcnJheVR5cGVzT2YgICAgfSBmcm9tICcuLi9hYnN0cmFjdGlvbi90eXBlcy9hcnJheXMnO1xuXG50eXBlIE9ic2VydmVDb25jYXRDb250ZXh0PFRJbnB1dCBleHRlbmRzIE9ic2VydmFibGU8dW5rbm93bj5bXT4gPSBSZXNvbHZlZE9ic2VydmVDb250ZXh0PEVtaXR0ZWRBcnJheVR5cGVzT2Y8VElucHV0Pj4gJiB7XG4gICAgb2JzZXJ2ZUNvbmNhdDogRW1pdHRlZEFycmF5VHlwZXNPZjxUSW5wdXQ+XG59O1xuXG4vKipcbiAqIERvY3VtZW50YXRpb24gaW4ge0BsaW5rIE9ic2VydmVDb25jYXREaXJlY3RpdmUub2JzZXJ2ZUNvbmNhdH0gdG8gYWxsb3cgaW4tdGVtcGxhdGUgdG9vbHRpcHMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIE9ic2VydmVDb25jYXREaXJlY3RpdmVcbiAqIEBleHRlbmRzIHtPYnNlcnZlQXJyYXlEaXJlY3RpdmU8VCwgRW1pdHRlZEFycmF5VHlwZXNPZjxUPiwgT2JzZXJ2ZUNvbmNhdENvbnRleHQ8VD4+fVxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2Ygb2JzZXJ2YWJsZXMgdHVwbGUgcmVjZWl2ZWQgYnkgdGhlIGRpcmVjdGl2ZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbb2JzZXJ2ZUNvbmNhdF0nXG59KVxuZXhwb3J0IGNsYXNzIE9ic2VydmVDb25jYXREaXJlY3RpdmU8VCBleHRlbmRzIE9ic2VydmFibGU8dW5rbm93bj5bXT5cbiAgICAgZXh0ZW5kcyBPYnNlcnZlQXJyYXlEaXJlY3RpdmU8VCwgRW1pdHRlZEFycmF5VHlwZXNPZjxUPiwgT2JzZXJ2ZUNvbmNhdENvbnRleHQ8VD4+XG57XG4gICAgcHJvdGVjdGVkIHNlbGVjdG9yID0gJ29ic2VydmVDb25jYXQnO1xuXG4gICAgLyoqXG4gICAgICogQ29uY2F0cyBhbiBhcnJheSBvZiBvYnNlcnZhYmxlcyB1c2luZyByeGpzIHtAbGluayBodHRwczovL3J4anMuZGV2L2FwaS9pbmRleC9mdW5jdGlvbi9jb25jYXQgY29uY2F0KCl9IGFuZCBleHBvc2VzIHRoZSBlbWl0dGVkIHZhbHVlcyB0byB0aGUgdGVtcGxhdGUuXG4gICAgICogXG4gICAgICogQW55IHRlbXBsYXRlIGFzc2lnbmVkIHdpdGggdGhlIGRpcmVjdGl2ZSB3aWxsIHJlbmRlciBpbW1lZGlhdGVseSwgYW5kIGl0cyB2aWV3IGNvbnRleHQgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGVtaXR0ZWQgdmFsdWUgb25cbiAgICAgKiBlYWNoIGVtaXNzaW9uLiBUaGUgZGlyZWN0aXZlIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHN1YnNjcmliaW5nIG9uIGluaXQgYW5kIHVuc3Vic2NyaWJpbmcgb24gZGVzdHJveS5cbiAgICAgKiBcbiAgICAgKiAjIyBGZWF0dXJlc1xuICAgICAqIFxuICAgICAqICMjIyMgU2hhcmVkIG9ic2VydmFibGVcbiAgICAgKiBUaGUgd2F0Y2hlZCBvYnNlcnZhYmxlIHdpbGwgYXV0b21hdGljYWxseSBiZSBtdWx0aWNhc3RlZCBzbyB0aGF0IGFueSBjaGlsZCBvYnNlcnZhYmxlcyBjcmVhdGVkIGJ5IHRoZSB0ZW1wbGF0ZSB3aWxsIHVzZSB0aGUgc2FtZVxuICAgICAqIHN0cmVhbS5cbiAgICAgKiBcbiAgICAgKiBUaGUgc2hhcmVkIG9ic2VydmFibGUgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIHRoZSBgbGV0IHNvdXJjZSA9IHNvdXJjZWAgbWljcm9zeW50YXguXG4gICAgICogXG4gICAgICogIyMjIyBPYnNlcnZlciBldmVudHNcbiAgICAgKiBXaGVuZXZlciB0aGUgb2JzZXJ2YWJsZSBjaGFuZ2VzIHN0YXRlIG9yIGVtaXRzIGEgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGlzIGVtaXR0ZWQ6ICBcbiAgICAgKiBgbmV4dENhbGxlZGAgLSBBIHZhbHVlIGhhcyBiZWVuIGVtaXR0ZWQuIGAkZXZlbnRgIHdpbGwgYmUgdGhlIGVtaXR0ZWQgdmFsdWUuICBcbiAgICAgKiBgZXJyb3JDYWxsZWRgIC0gQW4gZXJyb3IgaGFzIG9jY3VyZWQgaW4gdGhlIHBpcGVsaW5lLiBgJGV2ZW50YCB3aWxsIGJlIHRoZSBlcnJvci4gIFxuICAgICAqIGBjb21wbGV0ZUNhbGxlZGAgLSBUaGUgb2JzZXJ2YWJsZSBoYXMgY29tcGxldGVkLiBgJGV2ZW50YCB3aWxsIGJlIHZvaWQuXG4gICAgICpcbiAgICAgKiA+IEJlY2F1c2Ugb2YgbGltaXRhdGlvbnMgdG8gQW5ndWxhcidzIFN0cnVjdHVyYWwgRGlyZWN0aXZlcywgaW4gb3JkZXIgdG8gYmluZCB0aGUgZXZlbnRzIHRoZSBkZXN1Z2FyZWQgc3ludGF4IG11c3QgYmUgdXNlZC5cbiAgICAgKiBUaGlzLCBmb3IgZXhhbXBsZSwgKip3aWxsIHRyaWdnZXIqKiB0aGUgZXZlbnQ6XG4gICAgICogPiBgYGBodG1sXG4gICAgICogPjxuZy10ZW1wbGF0ZSBbb2JzZXJ2ZV09XCJ4JFwiIGxldC1zb3VyY2U9XCJzb3VyY2VcIiAobmV4dENhbGxlZCk9XCJvbk5leHQoJGV2ZW50KVwiPlxuICAgICAqID4gICAgLi4uXG4gICAgICogPjwvbmctdGVtcGxhdGU+XG4gICAgICogPiBgYGBcbiAgICAgKiA+XG4gICAgICogPlRoaXMgKip3aWxsIE5PVCB0cmlnZ2VyKiogdGhlIGV2ZW50OlxuICAgICAqID5gYGBodG1sXG4gICAgICogPiA8ZGl2ICpvYnNlcnZlPVwieCQ7IGxldCBzb3VyY2UgPSBzb3VyY2VcIiAobmV4dENhbGxlZCk9XCJvbk5leHQoJGV2ZW50KVwiPi4uLjwvZGl2PlxuICAgICAqID5gYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2V0IG9ic2VydmVDb25jYXQodmFsdWU6IFQpIHsgdGhpcy5pbnB1dC5uZXh0KHZhbHVlKTsgfVxuXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VCBleHRlbmRzIE9ic2VydmFibGU8dW5rbm93bj5bXT4oZGlyZWN0aXZlOiBPYnNlcnZlQ29uY2F0RGlyZWN0aXZlPFQ+LCBjb250ZXh0OiB1bmtub3duKTogY29udGV4dCBpcyBPYnNlcnZlQ29uY2F0Q29udGV4dDxUPiB7IHJldHVybiB0cnVlOyB9XG5cbiAgICBwcm90ZWN0ZWQgb2JzZXJ2ZUlucHV0KGlucHV0OiBUKTogT2JzZXJ2YWJsZTxFbWl0dGVkQXJyYXlUeXBlc09mPFQ+PlxuICAgIHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdCguLi5pbnB1dCkgYXMgT2JzZXJ2YWJsZTxFbWl0dGVkQXJyYXlUeXBlc09mPFQ+PjtcbiAgICB9XG59XG4iXX0=