diff --git a/packages/common/infra/src/page/record-list.ts b/packages/common/infra/src/page/record-list.ts index 5153548953..52c31c1958 100644 --- a/packages/common/infra/src/page/record-list.ts +++ b/packages/common/infra/src/page/record-list.ts @@ -1,4 +1,5 @@ -import { Observable } from 'rxjs'; +import { isEqual } from 'lodash-es'; +import { distinctUntilChanged, map, Observable } from 'rxjs'; import { LiveData } from '../livedata'; import { @@ -15,12 +16,10 @@ export class PageRecordList { ) {} public readonly records = LiveData.from( - new Observable(subscriber => { + new Observable(subscriber => { const emit = () => { subscriber.next( - this.workspace.docCollection.meta.docMetas.map( - v => new PageRecord(v.id, this.workspace, this.localState) - ) + this.workspace.docCollection.meta.docMetas.map(v => v.id) ); }; @@ -31,7 +30,12 @@ export class PageRecordList { return () => { dispose(); }; - }), + }).pipe( + distinctUntilChanged((p, c) => isEqual(p, c)), + map(ids => + ids.map(id => new PageRecord(id, this.workspace, this.localState)) + ) + ), [] );