@schoolbelle/common
Version:
213 lines (207 loc) • 5.8 kB
JavaScript
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