mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-06-14 11:52:32 +03:00
Make UI observables hot
This commit is contained in:
parent
85a18c64fa
commit
4b6e0808d1
@ -21,7 +21,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Observable, fromEvent } from "rxjs"
|
import { Observable, fromEvent } from "rxjs"
|
||||||
import { filter, map, startWith } from "rxjs/operators"
|
import {
|
||||||
|
filter,
|
||||||
|
map,
|
||||||
|
shareReplay,
|
||||||
|
startWith
|
||||||
|
} from "rxjs/operators"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* Data
|
* Data
|
||||||
@ -39,12 +44,13 @@ const hash$ = fromEvent<HashChangeEvent>(window, "hashchange")
|
|||||||
/**
|
/**
|
||||||
* Create an observable emitting changes in location hashes
|
* Create an observable emitting changes in location hashes
|
||||||
*
|
*
|
||||||
* @return Hash change observable
|
* @return Location hash observable
|
||||||
*/
|
*/
|
||||||
export function fromLocationHash(): Observable<string> {
|
export function fromLocationHash(): Observable<string> {
|
||||||
return hash$.pipe(
|
return hash$.pipe(
|
||||||
startWith(document.location.hash),
|
|
||||||
map(() => document.location.hash),
|
map(() => document.location.hash),
|
||||||
filter(hash => hash.length > 0)
|
startWith(document.location.hash),
|
||||||
|
filter(hash => hash.length > 0),
|
||||||
|
shareReplay({ bufferSize: 1, refCount: true })
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,8 @@
|
|||||||
* IN THE SOFTWARE.
|
* IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { equals } from "ramda"
|
|
||||||
import { Observable, fromEvent, merge } from "rxjs"
|
import { Observable, fromEvent, merge } from "rxjs"
|
||||||
import { distinctUntilChanged, map, startWith } from "rxjs/operators"
|
import { map, shareReplay, startWith } from "rxjs/operators"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* Data
|
* Data
|
||||||
@ -97,7 +96,7 @@ export function fromViewportOffset(): Observable<ViewportOffset> {
|
|||||||
return merge(scroll$, resize$).pipe(
|
return merge(scroll$, resize$).pipe(
|
||||||
map(getViewportOffset),
|
map(getViewportOffset),
|
||||||
startWith(getViewportOffset()),
|
startWith(getViewportOffset()),
|
||||||
distinctUntilChanged<ViewportOffset>(equals)
|
shareReplay({ bufferSize: 1, refCount: true })
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,6 +109,6 @@ export function fromViewportSize(): Observable<ViewportSize> {
|
|||||||
return resize$.pipe(
|
return resize$.pipe(
|
||||||
map(getViewportSize),
|
map(getViewportSize),
|
||||||
startWith(getViewportSize()),
|
startWith(getViewportSize()),
|
||||||
distinctUntilChanged<ViewportSize>(equals)
|
shareReplay({ bufferSize: 1, refCount: true })
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Observable, fromEventPattern } from "rxjs"
|
import { Observable, fromEventPattern } from "rxjs"
|
||||||
import { startWith } from "rxjs/operators"
|
import { shareReplay, startWith } from "rxjs/operators"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* Functions
|
* Functions
|
||||||
@ -39,6 +39,7 @@ export function fromMediaQuery(query: string): Observable<boolean> {
|
|||||||
return fromEventPattern<boolean>(next =>
|
return fromEventPattern<boolean>(next =>
|
||||||
media.addListener(() => next(media.matches))
|
media.addListener(() => next(media.matches))
|
||||||
).pipe(
|
).pipe(
|
||||||
startWith(media.matches)
|
startWith(media.matches),
|
||||||
|
shareReplay({ bufferSize: 1, refCount: true })
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user