Skip to content

Commit 8296859

Browse files
committed
feat: use source in release store
1 parent f3c3c43 commit 8296859

File tree

2 files changed

+16
-20
lines changed

2 files changed

+16
-20
lines changed

packages/core/src/releases/releasesStore.test.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {of, Subject} from 'rxjs'
33
import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'
44

55
import {getClientState} from '../client/clientStore'
6+
import {sourceFor} from '../config/sanityConfig'
67
import {createSanityInstance, type SanityInstance} from '../store/createSanityInstance'
78
import {type StateSource} from '../store/createStateSourceAction'
89
import {listenQuery} from '../utils/listenQuery'
@@ -20,6 +21,7 @@ vi.mock('../utils/listenQuery', () => ({
2021
let consoleErrorSpy: ReturnType<typeof vi.spyOn>
2122

2223
describe('releasesStore', () => {
24+
const source = sourceFor({projectId: 'test', dataset: 'test'})
2325
let instance: SanityInstance
2426
const mockClient = {} as SanityClient
2527

@@ -58,7 +60,7 @@ describe('releasesStore', () => {
5860

5961
vi.mocked(listenQuery).mockReturnValue(of(mockReleases))
6062

61-
const state = getActiveReleasesState(instance, {})
63+
const state = getActiveReleasesState(instance, {source})
6264

6365
await new Promise((resolve) => setTimeout(resolve, 0))
6466

@@ -72,7 +74,7 @@ describe('releasesStore', () => {
7274
const releasesSubject = new Subject<ReleaseDocument[]>()
7375
vi.mocked(listenQuery).mockReturnValue(releasesSubject.asObservable())
7476

75-
const state = getActiveReleasesState(instance, {})
77+
const state = getActiveReleasesState(instance, {source})
7678

7779
// Initial state should be default
7880
expect(state.getCurrent()).toBeUndefined() // Default initial state
@@ -116,7 +118,7 @@ describe('releasesStore', () => {
116118
// Configure listenQuery to return an empty array
117119
vi.mocked(listenQuery).mockReturnValue(of([]))
118120

119-
const state = getActiveReleasesState(instance, {})
121+
const state = getActiveReleasesState(instance, {source})
120122

121123
await new Promise((resolve) => setTimeout(resolve, 0))
122124

@@ -127,7 +129,7 @@ describe('releasesStore', () => {
127129
it('should handle null/undefined from listenQuery by defaulting to empty array', async () => {
128130
// Test null case
129131
vi.mocked(listenQuery).mockReturnValue(of(null))
130-
const state = getActiveReleasesState(instance, {})
132+
const state = getActiveReleasesState(instance, {source})
131133
await new Promise((resolve) => setTimeout(resolve, 0))
132134
expect(state.getCurrent()).toEqual([])
133135
expect(consoleErrorSpy).not.toHaveBeenCalled()
@@ -146,7 +148,7 @@ describe('releasesStore', () => {
146148
vi.mocked(listenQuery).mockReturnValue(subject.asObservable())
147149

148150
// initialize the store
149-
const state = getActiveReleasesState(instance, {})
151+
const state = getActiveReleasesState(instance, {source})
150152

151153
// Error the subject
152154
subject.error(error)

packages/react/src/hooks/releases/useActiveReleases.ts

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1-
import {
2-
getActiveReleasesState,
3-
type ReleaseDocument,
4-
type SanityInstance,
5-
type StateSource,
6-
} from '@sanity/sdk'
7-
import {filter, firstValueFrom} from 'rxjs'
1+
import {getActiveReleasesState, type ReleaseDocument} from '@sanity/sdk'
2+
import {useMemo} from 'react'
83

9-
import {createStateSourceHook} from '../helpers/createStateSourceHook'
4+
import {useSanityInstanceAndSource} from '../context/useSanityInstance'
5+
import {useStoreState} from '../helpers/useStoreState'
106

117
/**
128
* @public
@@ -30,10 +26,8 @@ type UseActiveReleases = {
3026
* const activeReleases = useActiveReleases()
3127
* ```
3228
*/
33-
export const useActiveReleases: UseActiveReleases = createStateSourceHook({
34-
getState: getActiveReleasesState as (instance: SanityInstance) => StateSource<ReleaseDocument[]>,
35-
shouldSuspend: (instance: SanityInstance) =>
36-
getActiveReleasesState(instance, {}).getCurrent() === undefined,
37-
suspender: (instance: SanityInstance) =>
38-
firstValueFrom(getActiveReleasesState(instance, {}).observable.pipe(filter(Boolean))),
39-
})
29+
export const useActiveReleases: UseActiveReleases = () => {
30+
const [instance, source] = useSanityInstanceAndSource({})
31+
const state = useMemo(() => getActiveReleasesState(instance, {source}), [instance, source])
32+
return useStoreState(state)
33+
}

0 commit comments

Comments
 (0)