From a1c64db22f0cdd7417e0d136c528eae1fe9322e4 Mon Sep 17 00:00:00 2001 From: Josep M Sobrepere Date: Wed, 27 May 2020 22:32:23 +0200 Subject: [PATCH] v0.1.3 --- package-lock.json | 2 +- package.json | 2 +- src/connectFactoryObservable.ts | 5 ++--- src/operators/distinct-share-replay.ts | 15 +++++++++++---- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index ea57366..3155dd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@josepot/react-rxjs", - "version": "0.1.2", + "version": "0.1.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d77de02..1fa300e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.2", + "version": "0.1.3", "repository": { "type": "git", "url": "git+https://github.com/josepot/react-rxjs.git" diff --git a/src/connectFactoryObservable.ts b/src/connectFactoryObservable.ts index 2b0a33f..2c1c9ef 100644 --- a/src/connectFactoryObservable.ts +++ b/src/connectFactoryObservable.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from "react" import { Observable, of } from "rxjs" -import { finalize, delay, takeUntil } from "rxjs/operators" +import { delay, takeUntil } from "rxjs/operators" import { StaticObservableOptions, defaultStaticOptions, @@ -43,10 +43,9 @@ export function connectFactoryObservable< } const reactObservable$ = getObservable(...input).pipe( - finalize(() => { + distinctShareReplay(compare, () => { cache.delete(key) }), - distinctShareReplay(compare), ) cache.set(key, reactObservable$) diff --git a/src/operators/distinct-share-replay.ts b/src/operators/distinct-share-replay.ts index f8059e1..c6a5f4e 100644 --- a/src/operators/distinct-share-replay.ts +++ b/src/operators/distinct-share-replay.ts @@ -1,12 +1,19 @@ import { Observable, ReplaySubject, concat, NEVER } from "rxjs" -import { distinctUntilChanged, multicast, refCount } from "rxjs/operators" +import { + distinctUntilChanged, + multicast, + refCount, + finalize, +} from "rxjs/operators" -const distinctShareReplay = (compare?: (a: T, b: T) => boolean) => ( - source$: Observable, -): Observable => +const distinctShareReplay = ( + compare?: (a: T, b: T) => boolean, + tearDown?: () => void, +) => (source$: Observable): Observable => source$.pipe( distinctUntilChanged(compare), innerSource => concat(innerSource, NEVER), + tearDown ? finalize(tearDown) : x => x, multicast(() => new ReplaySubject(1)), refCount(), )