diff --git a/src/connectFactoryObservable.ts b/src/connectFactoryObservable.ts index 6712d1d..3975d62 100644 --- a/src/connectFactoryObservable.ts +++ b/src/connectFactoryObservable.ts @@ -1,6 +1,6 @@ import { Observable } from "rxjs" import { useEffect, useState } from "react" -import reactOperator from "./react-operator" +import reactOperator, { batchUpdates } from "./react-operator" export function connectFactoryObservable< I, @@ -48,7 +48,9 @@ export function connectFactoryObservable< }, suspenseTime) } - const subscription = getReactObservable$(...input).subscribe(value => { + const subscription = batchUpdates( + getReactObservable$(...input), + ).subscribe(value => { setValue(value) if (timeoutToken !== null) clearTimeout(timeoutToken) }) diff --git a/src/connectObservable.ts b/src/connectObservable.ts index c653815..1cc18f8 100644 --- a/src/connectObservable.ts +++ b/src/connectObservable.ts @@ -1,6 +1,6 @@ import { Observable } from "rxjs" import { useEffect, useState } from "react" -import reactOperator from "./react-operator" +import reactOperator, { batchUpdates } from "./react-operator" export function connectObservable( observable: Observable, @@ -13,7 +13,7 @@ export function connectObservable( reactObservable$.getCurrentValue(), ) useEffect(() => { - const subscription = reactObservable$.subscribe(setValue) + const subscription = batchUpdates(reactObservable$).subscribe(setValue) return () => subscription.unsubscribe() }, []) return value diff --git a/src/react-operator.ts b/src/react-operator.ts index e120b85..214d807 100644 --- a/src/react-operator.ts +++ b/src/react-operator.ts @@ -5,9 +5,9 @@ export interface ReactObservable extends Observable { getCurrentValue: () => O | IO } -const batchUpdates: (source: Observable) => Observable = debounceTime( - 0, -) +export const batchUpdates: ( + source: Observable, +) => Observable = debounceTime(0) const GRACE_PERIOD = 100 const reactOperator = ( @@ -15,7 +15,6 @@ const reactOperator = ( initialValue: I, teardown?: () => void, ): ReactObservable => { - const batchedSource$ = batchUpdates(source$) let subject: ReplaySubject | undefined let subscription: Subscription | undefined let timeoutToken: NodeJS.Timeout | undefined = undefined @@ -31,7 +30,7 @@ const reactOperator = ( if (!subject || hasError) { hasError = false subject = new ReplaySubject(1) - subscription = batchedSource$.subscribe({ + subscription = source$.subscribe({ next(value) { currentValue = value subject!.next(value)