From bf8bed36efb1c4ba4b97c8a95049f17b2260ef7e Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 10 Oct 2019 20:41:57 +0200 Subject: [PATCH] Update drr equality (#1469) * Update drr equality * null === null * Array length compare * isFunction(next.eq) * Just JSON.stringify on compare * Add distinctUntilChanged in rpc-core * prev/next -> a/b --- packages/api-derive/src/util/drr.ts | 4 +++- packages/rpc-core/src/index.ts | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/api-derive/src/util/drr.ts b/packages/api-derive/src/util/drr.ts index 028a0585df..156d75b898 100644 --- a/packages/api-derive/src/util/drr.ts +++ b/packages/api-derive/src/util/drr.ts @@ -22,7 +22,9 @@ export const drr = (): DrrResult => (source$: Observable): Observable throw error; }), - distinctUntilChanged(), + distinctUntilChanged((a: any, b: any): boolean => + JSON.stringify({ value: a }) === JSON.stringify({ value: b }) + ), publishReplay(1), refCount() ); diff --git a/packages/rpc-core/src/index.ts b/packages/rpc-core/src/index.ts index 281b212058..ec8f1df039 100644 --- a/packages/rpc-core/src/index.ts +++ b/packages/rpc-core/src/index.ts @@ -10,7 +10,7 @@ import { RpcInterfaceMethod } from './types'; import memoizee from 'memoizee'; import { combineLatest, from, Observable, Observer, of, throwError } from 'rxjs'; -import { catchError, map, publishReplay, refCount, switchMap } from 'rxjs/operators'; +import { catchError, distinctUntilChanged, map, publishReplay, refCount, switchMap } from 'rxjs/operators'; import interfaces from '@polkadot/jsonrpc'; import { Option, StorageKey, Vec, createClass } from '@polkadot/types'; import { createTypeUnsafe } from '@polkadot/types/codec'; @@ -250,6 +250,10 @@ export default class Rpc implements RpcInterface { ); }; }).pipe( + // Duplicated in api-derive/util/drr + distinctUntilChanged((a: any, b: any): boolean => + JSON.stringify({ value: a }) === JSON.stringify({ value: b }) + ), publishReplay(1), refCount() );