Refactored to use URLs at all times

This commit is contained in:
squidfunk
2020-02-22 15:56:08 +01:00
parent eb82c8d586
commit c79b786ea6
9 changed files with 25 additions and 29 deletions

View File

@@ -68,7 +68,7 @@ export function watchDocumentSwitch(
): Observable<Document> {
return location$
.pipe(
startWith(location), // TODO: getLocation should return URL or Location
startWith(getLocation()),
distinctUntilKeyChanged("pathname"),
skip(1),
@@ -81,7 +81,7 @@ export function watchDocumentSwitch(
.pipe<Document, Document>(
pluck("response"),
catchError(() => {
setLocation(url.href) // TODO: setLocation should accept URL or location
setLocation(url)
return NEVER
})
)

View File

@@ -20,8 +20,7 @@
* IN THE SOFTWARE.
*/
import { Subject, fromEvent } from "rxjs"
import { map } from "rxjs/operators"
import { Subject } from "rxjs"
/* ----------------------------------------------------------------------------
* Functions
@@ -30,19 +29,24 @@ import { map } from "rxjs/operators"
/**
* Retrieve location
*
* @return Location
* This function will return a `URL` object (and not `Location`) in order to
* normalize typings across the application. Furthermore, locations need to be
* tracked without setting them and `Location` is a singleton which represents
* the current location.
*
* @return URL
*/
export function getLocation(): string {
return location.href
export function getLocation(): URL {
return new URL(location.href)
}
/**
* Set location
*
* @param value - New location
* @param url - URL to change to
*/
export function setLocation(value: string): void {
location.href = value
export function setLocation(url: URL): void {
location.href = url.href
}
/* ------------------------------------------------------------------------- */
@@ -53,13 +57,5 @@ export function setLocation(value: string): void {
* @return Location subject
*/
export function watchLocation(): Subject<URL> {
const location$ = new Subject<URL>()
// fromEvent<PopStateEvent>(window, "popstate")
// .pipe(
// map(getLocation)
// )
// .subscribe(location$)
/* Return location subject */
return location$
return new Subject<URL>()
}