From 8e4723e991844cf944eeb7a9ba6d5f5ea2712795 Mon Sep 17 00:00:00 2001 From: Josep M Sobrepere Date: Mon, 4 May 2020 23:09:02 +0200 Subject: [PATCH] Only batch updates for the React subscription --- src/connectFactoryObservable.ts | 6 ++++-- src/connectObservable.ts | 4 ++-- src/react-operator.ts | 9 ++++----- 3 files changed, 10 insertions(+), 9 deletions(-) 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)