UNPKG

@schoolbelle/common

Version:

213 lines (207 loc) 5.8 kB
import { Subject, BehaviorSubject } from 'rxjs'; import { concatMap, switchMap, share, finalize, mergeMap, throttleTime } from 'rxjs/operators'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @enum {string} */ const QueueActions = { RESET: 'RESET', ADD: 'ADD', }; /** * @template T */ class ObservableCascadeQueue { constructor() { this._commands = new Subject(); this._queues = new BehaviorSubject(new Subject()); this.queue$ = this._queues.asObservable().pipe(switchMap((/** * @param {?} queue * @return {?} */ (queue) => queue.pipe(concatMap((/** * @param {?} item * @return {?} */ item => item))))), share()); this.sizeChangeEvent = new Subject(); this._size = 0; this._commands.asObservable().subscribe((/** * @param {?} command * @return {?} */ command => { switch (command && command.action) { case QueueActions.RESET: this._queues.next(new Subject()); break; case QueueActions.ADD: this._queues.value.next(command.payload); break; default: this._queues.value.error(`[ObservableQueue] unknown command: ${JSON.stringify(command)}`); } })); this.queue$.subscribe(); } /** * @return {?} */ get size() { return this._size; } ; /** * @param {?} v * @return {?} */ set size(v) { this._size = v; this.sizeChangeEvent.next(v); } /** * @return {?} */ get onSizeChange() { return this.sizeChangeEvent.asObservable(); } // add(item: ObservableInput<T>): this { /** * @template THIS * @this {THIS} * @param {?} item * @return {THIS} */ add(item) { setTimeout((/** * @return {?} */ () => { (/** @type {?} */ (this)).size++; item = item.pipe(finalize((/** * @return {?} */ () => (/** @type {?} */ (this)).size--))); (/** @type {?} */ (this))._commands.next({ action: QueueActions.ADD, payload: item }); })); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @return {THIS} */ reset() { (/** @type {?} */ (this)).size = 0; (/** @type {?} */ (this))._commands.next({ action: QueueActions.RESET }); return (/** @type {?} */ (this)); } /** * @return {?} */ destroy() { this._commands.complete(); this._queues.value.complete(); this._queues.complete(); } /** * @return {?} */ asObservable() { return this.queue$; } } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @enum {string} */ const QueueActions$1 = { RESET: 'RESET', ADD: 'ADD', }; /** * @template T */ class ObservableThottleQueue { constructor() { this._commands = new Subject(); this._queues = new BehaviorSubject(new Subject()); this.queue$ = this._queues.asObservable().pipe(switchMap((/** * @param {?} queue * @return {?} */ (queue) => queue.pipe(throttleTime(100), mergeMap((/** * @param {?} item * @return {?} */ item => item), 5) // tap(e=>console.log((<any>e).option.text, (<any>e).type, (<any>e).checking)) ))), share()); this._commands.asObservable().subscribe((/** * @param {?} command * @return {?} */ command => { switch (command && command.action) { case QueueActions$1.RESET: this._queues.next(new Subject()); break; case QueueActions$1.ADD: this._queues.value.next(command.payload); break; default: this._queues.value.error(`[ObservableQueue] unknown command: ${JSON.stringify(command)}`); } })); this.queue$.subscribe(); } /** * @template THIS * @this {THIS} * @param {?} item * @return {THIS} */ add(item) { setTimeout((/** * @return {?} */ () => (/** @type {?} */ (this))._commands.next({ action: QueueActions$1.ADD, payload: item }))); // this._commands.next({action: QueueActions.ADD, payload: item}); return (/** @type {?} */ (this)); } /** * @template THIS * @this {THIS} * @return {THIS} */ reset() { (/** @type {?} */ (this))._commands.next({ action: QueueActions$1.RESET }); return (/** @type {?} */ (this)); } /** * @return {?} */ destroy() { this._commands.complete(); this._queues.value.complete(); this._queues.complete(); } /** * @return {?} */ asObservable() { return this.queue$; } } /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { ObservableCascadeQueue, ObservableThottleQueue }; //# sourceMappingURL=schoolbelle-common-observable-queue.js.map