Skip to content

Commit 4acc11e

Browse files
authoredMar 6, 2024
fix(core): clean up edit state listeners (#5911)
1 parent b625213 commit 4acc11e

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed
 

‎packages/sanity/src/core/hooks/useEditState.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {useMemoObservable} from 'react-rx'
2-
import {merge, timer} from 'rxjs'
3-
import {debounce, share, skip, take} from 'rxjs/operators'
2+
import {debounce, merge, share, skip, take, timer} from 'rxjs'
43

54
import {type EditStateFor, useDocumentStore} from '../store'
65

@@ -13,8 +12,9 @@ export function useEditState(
1312
const documentStore = useDocumentStore()
1413

1514
return useMemoObservable(() => {
16-
const base = documentStore.pair.editState(publishedDocId, docTypeName).pipe(share())
1715
if (priority === 'low') {
16+
const base = documentStore.pair.editState(publishedDocId, docTypeName).pipe(share())
17+
1818
return merge(
1919
base.pipe(take(1)),
2020
base.pipe(
@@ -23,6 +23,7 @@ export function useEditState(
2323
),
2424
)
2525
}
26+
2627
return documentStore.pair.editState(publishedDocId, docTypeName)
2728
}, [documentStore.pair, publishedDocId, docTypeName, priority]) as EditStateFor
2829
}

‎packages/sanity/src/core/store/_legacy/document/document-pair/checkoutPair.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {type SanityClient} from '@sanity/client'
22
import {type Mutation} from '@sanity/mutator'
33
import {type SanityDocument} from '@sanity/types'
4-
import {EMPTY, from, merge, type Observable} from 'rxjs'
4+
import {EMPTY, from, merge, type Observable, Subject} from 'rxjs'
55
import {filter, map, mergeMap, mergeMapTo, share, tap} from 'rxjs/operators'
66

77
import {
@@ -63,6 +63,7 @@ export interface Pair {
6363
transactionsPendingEvents$: Observable<PendingMutationsEvent>
6464
published: DocumentVersion
6565
draft: DocumentVersion
66+
complete: () => void
6667
}
6768

6869
function setVersion<T>(version: 'draft' | 'published') {
@@ -105,7 +106,10 @@ function submitCommitRequest(client: SanityClient, request: CommitRequest) {
105106
export function checkoutPair(client: SanityClient, idPair: IdPair): Pair {
106107
const {publishedId, draftId} = idPair
107108

108-
const listenerEvents$ = getPairListener(client, idPair).pipe(share())
109+
const listenerEventsConnector = new Subject<ListenerEvent>()
110+
const listenerEvents$ = getPairListener(client, idPair).pipe(
111+
share({connector: () => listenerEventsConnector}),
112+
)
109113

110114
const reconnect$ = listenerEvents$.pipe(
111115
filter((ev) => ev.type === 'reconnect'),
@@ -146,5 +150,6 @@ export function checkoutPair(client: SanityClient, idPair: IdPair): Pair {
146150
consistency$: published.consistency$,
147151
remoteSnapshot$: published.remoteSnapshot$.pipe(map(setVersion('published'))),
148152
},
153+
complete: () => listenerEventsConnector.complete(),
149154
}
150155
}

‎packages/sanity/src/core/store/_legacy/document/document-pair/memoizedPair.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ export const memoizedPair: (
1414
) => Observable<Pair> = memoize(
1515
(client: SanityClient, idPair: IdPair, _typeName: string): Observable<Pair> => {
1616
return new Observable<Pair>((subscriber) => {
17-
subscriber.next(checkoutPair(client, idPair))
17+
const pair = checkoutPair(client, idPair)
18+
subscriber.next(pair)
19+
20+
return pair.complete
1821
}).pipe(publishReplay(1), refCount())
1922
},
2023
memoizeKeyGen,

0 commit comments

Comments
 (0)
Please sign in to comment.