sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
29 lines (26 loc) • 1.01 kB
text/typescript
import {type SanityClient} from '@sanity/client'
import {EMPTY, merge, type Observable} from 'rxjs'
import {switchMap} from 'rxjs/operators'
import {type DocumentStoreExtraOptions} from '../getPairListener'
import {type IdPair} from '../types'
import {memoize} from '../utils/createMemoizer'
import {type RemoteSnapshotVersionEvent} from './checkoutPair'
import {memoizedPair} from './memoizedPair'
import {memoizeKeyGen} from './memoizeKeyGen'
/** @internal */
export const remoteSnapshots = memoize(
(
client: SanityClient,
idPair: IdPair,
typeName: string,
serverActionsEnabled: Observable<boolean>,
pairListenerOptions?: DocumentStoreExtraOptions,
): Observable<RemoteSnapshotVersionEvent> => {
return memoizedPair(client, idPair, typeName, serverActionsEnabled, pairListenerOptions).pipe(
switchMap(({published, draft, version}) =>
merge(published.remoteSnapshot$, draft.remoteSnapshot$, version?.remoteSnapshot$ ?? EMPTY),
),
)
},
memoizeKeyGen,
)