Refactored search observable integration

This commit is contained in:
squidfunk
2020-02-13 16:49:08 +01:00
parent d8829769f8
commit e0e559b429
22 changed files with 507 additions and 93 deletions

View File

@@ -33,16 +33,18 @@ import { PackerMessage } from "../message"
/**
* Setup packer web worker
*
* @param worker - Worker instance
* @param options - Options
* @param url - Worker url
*
* @return Worker handler
*/
export function setupPackerWorker(
worker: Worker
url: string
): WorkerHandler<PackerMessage> {
const worker = new Worker(url)
/* Create communication channels */
const tx$ = new Subject<PackerMessage>()
const rx$ = watchWorker(worker, { message$: tx$ })
const rx$ = watchWorker(worker, { tx$ })
/* Return worker handler */
return { tx$, rx$ }

View File

@@ -20,21 +20,16 @@
* IN THE SOFTWARE.
*/
import { Observable, Subject } from "rxjs"
import { Subject } from "rxjs"
import { ajax } from "rxjs/ajax"
import { distinctUntilKeyChanged, map, pluck } from "rxjs/operators"
import { map, pluck } from "rxjs/operators"
import { SearchIndexOptions } from "modules"
import {
SearchQuery,
WorkerHandler,
watchWorker
} from "observables"
import { WorkerHandler, watchWorker } from "observables"
import {
SearchMessage,
SearchMessageType,
SearchQueryMessage,
SearchSetupMessage,
isSearchResultMessage
} from "../message"
@@ -44,11 +39,10 @@ import {
* ------------------------------------------------------------------------- */
/**
* Options
* Setup options
*/
interface Options {
interface SetupOptions {
base: string /* Base url */
query$: Observable<SearchQuery> /* Search query observable */
}
/* ----------------------------------------------------------------------------
@@ -64,7 +58,7 @@ interface Options {
* @return Worker handler
*/
export function setupSearchWorker(
url: string, { base, query$ }: Options
url: string, { base }: SetupOptions
): WorkerHandler<SearchMessage> {
const worker = new Worker(url)
const prefix = new URL(base, location.href)
@@ -100,17 +94,6 @@ export function setupSearchWorker(
)
.subscribe(tx$.next.bind(tx$))
/* Subscribe to search query */
query$
.pipe(
distinctUntilKeyChanged("value"),
map<SearchQuery, SearchQueryMessage>(query => ({
type: SearchMessageType.QUERY,
data: query.value
}))
)
.subscribe(tx$.next.bind(tx$))
/* Return worker handler */
return { tx$, rx$ }
}