Refactored instant loading and some other components

This commit is contained in:
squidfunk
2021-02-12 12:12:49 +01:00
parent 884330da3b
commit 9c9ea8a64d
33 changed files with 463 additions and 150 deletions

View File

@@ -20,8 +20,14 @@
* IN THE SOFTWARE.
*/
import { Observable, fromEvent, merge } from "rxjs"
import { filter, map, mapTo, startWith } from "rxjs/operators"
import { NEVER, Observable, fromEvent, merge } from "rxjs"
import {
filter,
map,
mapTo,
startWith,
switchMap
} from "rxjs/operators"
/* ----------------------------------------------------------------------------
* Functions
@@ -57,3 +63,24 @@ export function watchPrint(): Observable<void> {
mapTo(undefined)
)
}
/* ------------------------------------------------------------------------- */
/**
* Toggle an observable with another one
*
* @template T - Data type
*
* @param toggle$ - Toggle observable
* @param factory - Observable factory
*
* @returns Toggled observable
*/
export function at<T>(
toggle$: Observable<boolean>, factory: () => Observable<T>
): Observable<T> {
return toggle$
.pipe(
switchMap(active => active ? factory() : NEVER)
)
}