diff --git a/.changeset/five-games-burn.md b/.changeset/five-games-burn.md new file mode 100644 index 0000000..93abf81 --- /dev/null +++ b/.changeset/five-games-burn.md @@ -0,0 +1,5 @@ +--- +"solid-relay": patch +--- + +Fix updating the params of `createLazyLoadQuery` and `createFragment` not resetting the data store diff --git a/src/primitives/createFragment.ts b/src/primitives/createFragment.ts index eebc1b9..ea0bf77 100644 --- a/src/primitives/createFragment.ts +++ b/src/primitives/createFragment.ts @@ -72,12 +72,6 @@ export function createFragmentInternal( ): DataStore | null | undefined> { const environment = useRelayEnvironment(); - const initialResult: FragmentResult = { - data: undefined, - error: undefined, - pending: false, - }; - type FragmentObserver = Parameters["subscribe"]>[0]; const resultUpdateObserver = { next(res) { @@ -115,7 +109,9 @@ export function createFragmentInternal( batch(() => { untrack(subscription)?.unsubscribe(); setSubscription(undefined); - setResult(initialResult); + setResult("data", undefined); + setResult("error", undefined); + setResult("pending", false); }); void environment(); @@ -165,7 +161,14 @@ export function createFragmentInternal( }, ); - const store = createDataStore>(initialResult, () => resource); + const store = createDataStore>( + { + data: undefined, + error: undefined, + pending: false, + }, + () => resource, + ); for (const args of setResultQueue) { store[1].apply(undefined, args as never); } diff --git a/src/primitives/createLazyLoadQuery.ts b/src/primitives/createLazyLoadQuery.ts index 3f29544..5098947 100644 --- a/src/primitives/createLazyLoadQuery.ts +++ b/src/primitives/createLazyLoadQuery.ts @@ -224,18 +224,21 @@ export function createLazyLoadQueryInternal(params onCleanup(retention.dispose); }); - const initialResult: QueryResult = { - data: undefined, - error: undefined, - pending: true, - }; const [result, setResult] = createDataStore>( - initialResult, + { + data: undefined, + error: undefined, + pending: true, + }, () => cacheEntry()?.resource, ); createComputed(() => { - setResult(initialResult); + batch(() => { + setResult("data", undefined); + setResult("error", undefined); + setResult("pending", true); + }); const operation = params.query(); const env = environment();