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
37 lines (31 loc) • 1.11 kB
text/typescript
import {useMemo} from 'react'
import {useClient} from '../../hooks'
import {useDocumentPreviewStore, useResourceCache} from '../../store'
import {useWorkspace} from '../../studio'
import {RELEASES_STUDIO_CLIENT_OPTIONS} from '../util/releasesClient'
import {createReleaseStore} from './createReleaseStore'
import {type ReleaseStore} from './types'
/** @internal */
export function useReleasesStore(): ReleaseStore {
const resourceCache = useResourceCache()
const workspace = useWorkspace()
const previewStore = useDocumentPreviewStore()
const studioClient = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)
return useMemo(() => {
const releaseStore =
resourceCache.get<ReleaseStore>({
dependencies: [workspace, previewStore],
namespace: 'ReleasesStore',
}) ||
createReleaseStore({
client: studioClient,
previewStore,
})
resourceCache.set({
dependencies: [workspace, previewStore],
namespace: 'ReleasesStore',
value: releaseStore,
})
return releaseStore
}, [resourceCache, workspace, studioClient, previewStore])
}