UNPKG

@zodiac-ui/ng-observable

Version:

Create powerful reactive components with Angular. AoT compatible and Ivy ready.

96 lines 7.95 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Observable, Subject } from "rxjs"; import { applyMixins, mixins } from "./internals/apply-mixins"; import { Callable } from "./internals/callable"; // WARNING: interface has both a type and a value, skipping emit /** * A subject that implements both `Subject<T>` and `Function` interfaces. Using this subject in place of a normal * method turns all invocations of that method into an observable stream without needing to modify the source of * the caller. When called with multiple arguments it will emit the arguments as an array. * * \@usageNotes * * Basic usage * * ```ts * const subject = new InvokeSubject<string>() // single argument * const subject2 = new InvokeSubject<[string, number]>() // multiple arguments * * subject("message") * subject2("message", 42) * * // with custom invoke function * const subject3 = new InvokeSubject<string>(function () { * subject3.next("message") // call "next" to emit value * }) * ``` * * Convert `\@HostListener` and `(event)` bindings into observable streams * * ```ts * \@Component({ * template: `<input type="text" (input)="inputChanges($event)" />` * }) * export class MyComponent implements OnDestroy { * \@HostListener("click", ["$event"]) * readonly hostClick = new InvokeSubject<MouseEvent>() * readonly inputChanges = new InvokeSubject<Event>() * * constructor() { * hostClick.subscribe(event => console.log(event)) * inputChanges.subscribe(event => console.log(event)) * } * } * ``` * * \@publicApi * @template T */ var InvokeSubject = /** @class */ (function (_super) { tslib_1.__extends(InvokeSubject, _super); /** * Creates a new `InvokeSubject` instance * * @param nextFn A function to be called when the subject is invoked * */ function InvokeSubject(nextFn) { var _this = _super.call(this, nextFn ? nextFn : (/** * @param {...?} args * @return {?} */ function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } /** @type {?} */ var len = args.length; if (len === 0) { _this.next(); } else if (len === 1) { _this.next(args[0]); } else { _this.next(args); } })) || this; Object.assign(_this, new Subject()); return _this; } var _a; _a = mixins; InvokeSubject[_a] = applyMixins(InvokeSubject, [Observable, Subject]); return InvokeSubject; }(Callable)); export { InvokeSubject }; if (false) { /* Skipping unnamed member: private static [mixins] = applyMixins(InvokeSubject, [Observable, Subject])*/ } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlLXN1YmplY3QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL25nLW9ic2VydmFibGUvIiwic291cmNlcyI6WyJsaWIvaW52b2tlLXN1YmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUQvQztJQUFzQyx5Q0FBbUI7SUFHckQ7Ozs7O09BS0c7SUFDSCx1QkFBWSxNQUFrQjtRQUE5QixZQUNJLGtCQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Ozs7UUFBQztZQUFDLGNBQVk7aUJBQVosVUFBWSxFQUFaLHFCQUFZLEVBQVosSUFBWTtnQkFBWix5QkFBWTs7O2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDdkIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNYLEtBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTthQUNkO2lCQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDbEIsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNyQjtpQkFBTTtnQkFDSCxLQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ2xCO1FBQ0wsQ0FBQyxDQUFBLENBQUMsU0FFTDtRQURHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQTs7SUFDdEMsQ0FBQzs7U0FwQmUsTUFBTTtJQUFQLGlCQUFRLEdBQUcsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBcUIvRSxvQkFBQztDQUFBLEFBdEJELENBQXNDLFFBQVEsR0FzQjdDO1NBdEJZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIlxyXG5pbXBvcnQgeyBhcHBseU1peGlucywgbWl4aW5zIH0gZnJvbSBcIi4vaW50ZXJuYWxzL2FwcGx5LW1peGluc1wiXHJcbmltcG9ydCB7IENhbGxhYmxlIH0gZnJvbSBcIi4vaW50ZXJuYWxzL2NhbGxhYmxlXCJcclxuXHJcbmV4cG9ydCB0eXBlIE5leHRGbjxUPiA9IChuZXh0OiBUKSA9PiB2b2lkXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVN1YmplY3Q8VD4gZXh0ZW5kcyBTdWJqZWN0PFQ+IHtcclxuICAgIChuZXh0OiBUKTogdm9pZFxyXG4gICAgKC4uLm5leHQ6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IFQgOiBuZXZlcltdKTogdm9pZFxyXG59XHJcblxyXG4vKipcclxuICogQSBzdWJqZWN0IHRoYXQgaW1wbGVtZW50cyBib3RoIGBTdWJqZWN0PFQ+YCBhbmQgYEZ1bmN0aW9uYCBpbnRlcmZhY2VzLiBVc2luZyB0aGlzIHN1YmplY3QgaW4gcGxhY2Ugb2YgYSBub3JtYWxcclxuICogbWV0aG9kIHR1cm5zIGFsbCBpbnZvY2F0aW9ucyBvZiB0aGF0IG1ldGhvZCBpbnRvIGFuIG9ic2VydmFibGUgc3RyZWFtIHdpdGhvdXQgbmVlZGluZyB0byBtb2RpZnkgdGhlIHNvdXJjZSBvZlxyXG4gKiB0aGUgY2FsbGVyLiBXaGVuIGNhbGxlZCB3aXRoIG11bHRpcGxlIGFyZ3VtZW50cyBpdCB3aWxsIGVtaXQgdGhlIGFyZ3VtZW50cyBhcyBhbiBhcnJheS5cclxuICpcclxuICogQHVzYWdlTm90ZXNcclxuICpcclxuICogQmFzaWMgdXNhZ2VcclxuICpcclxuICogYGBgdHNcclxuICogY29uc3Qgc3ViamVjdCA9IG5ldyBJbnZva2VTdWJqZWN0PHN0cmluZz4oKSAvLyBzaW5nbGUgYXJndW1lbnRcclxuICogY29uc3Qgc3ViamVjdDIgPSBuZXcgSW52b2tlU3ViamVjdDxbc3RyaW5nLCBudW1iZXJdPigpIC8vIG11bHRpcGxlIGFyZ3VtZW50c1xyXG4gKlxyXG4gKiBzdWJqZWN0KFwibWVzc2FnZVwiKVxyXG4gKiBzdWJqZWN0MihcIm1lc3NhZ2VcIiwgNDIpXHJcbiAqXHJcbiAqIC8vIHdpdGggY3VzdG9tIGludm9rZSBmdW5jdGlvblxyXG4gKiBjb25zdCBzdWJqZWN0MyA9IG5ldyBJbnZva2VTdWJqZWN0PHN0cmluZz4oZnVuY3Rpb24gKCkge1xyXG4gKiAgICAgc3ViamVjdDMubmV4dChcIm1lc3NhZ2VcIikgLy8gY2FsbCBcIm5leHRcIiB0byBlbWl0IHZhbHVlXHJcbiAqIH0pXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBDb252ZXJ0IGBASG9zdExpc3RlbmVyYCBhbmQgYChldmVudClgIGJpbmRpbmdzIGludG8gb2JzZXJ2YWJsZSBzdHJlYW1zXHJcbiAqXHJcbiAqIGBgYHRzXHJcbiAqIEBDb21wb25lbnQoe1xyXG4gKiAgICAgdGVtcGxhdGU6IGA8aW5wdXQgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwiaW5wdXRDaGFuZ2VzKCRldmVudClcIiAvPmBcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICogICAgIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAqICAgICByZWFkb25seSBob3N0Q2xpY2sgPSBuZXcgSW52b2tlU3ViamVjdDxNb3VzZUV2ZW50PigpXHJcbiAqICAgICByZWFkb25seSBpbnB1dENoYW5nZXMgPSBuZXcgSW52b2tlU3ViamVjdDxFdmVudD4oKVxyXG4gKlxyXG4gKiAgICAgY29uc3RydWN0b3IoKSB7XHJcbiAqICAgICAgICAgaG9zdENsaWNrLnN1YnNjcmliZShldmVudCA9PiBjb25zb2xlLmxvZyhldmVudCkpXHJcbiAqICAgICAgICAgaW5wdXRDaGFuZ2VzLnN1YnNjcmliZShldmVudCA9PiBjb25zb2xlLmxvZyhldmVudCkpXHJcbiAqICAgICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwdWJsaWNBcGlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBJbnZva2VTdWJqZWN0PFQ+IGV4dGVuZHMgQ2FsbGFibGU8TmV4dEZuPFQ+PiB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBbbWl4aW5zXSA9IGFwcGx5TWl4aW5zKEludm9rZVN1YmplY3QsIFtPYnNlcnZhYmxlLCBTdWJqZWN0XSlcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgYEludm9rZVN1YmplY3RgIGluc3RhbmNlXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5leHRGbiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdWJqZWN0IGlzIGludm9rZWRcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKG5leHRGbj86IE5leHRGbjxUPikge1xyXG4gICAgICAgIHN1cGVyKG5leHRGbiA/IG5leHRGbiA6ICguLi5hcmdzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gYXJncy5sZW5ndGhcclxuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KClcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dChhcmdzWzBdKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KGFyZ3MpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IFN1YmplY3QoKSlcclxuICAgIH1cclxufVxyXG4iXX0=