Skip to content

Commit 9d67d8b

Browse files
committed
feat: allow customization of hydrate / dehydrate options
and make sure we fall back to the defaultShouldDehydrate function, which only dehydrates successful queries
1 parent 4cad0d4 commit 9d67d8b

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

packages/react-query-next-experimental/src/ReactQueryStreamedHydration.tsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
'use client'
22

3-
import type { DehydratedState, QueryClient } from '@tanstack/react-query'
4-
import { dehydrate, hydrate, useQueryClient } from '@tanstack/react-query'
3+
import type {
4+
DehydratedState,
5+
DehydrateOptions,
6+
HydrateOptions,
7+
QueryClient,
8+
} from '@tanstack/react-query'
9+
import {
10+
defaultShouldDehydrateQuery,
11+
dehydrate,
12+
hydrate,
13+
useQueryClient,
14+
} from '@tanstack/react-query'
515
import * as React from 'react'
616
import type { HydrationStreamProviderProps } from './HydrationStreamProvider'
717
import { createHydrationStreamProvider } from './HydrationStreamProvider'
@@ -16,6 +26,10 @@ const stream = createHydrationStreamProvider<DehydratedState>()
1626
export function ReactQueryStreamedHydration(props: {
1727
children: React.ReactNode
1828
queryClient?: QueryClient
29+
options?: {
30+
hydrate?: HydrateOptions
31+
dehydrate?: DehydrateOptions
32+
}
1933
transformer?: HydrationStreamProviderProps<DehydratedState>['transformer']
2034
}) {
2135
const queryClient = useQueryClient(props.queryClient)
@@ -46,12 +60,14 @@ export function ReactQueryStreamedHydration(props: {
4660
/**
4761
* Dehydrated state of the client where we only include the queries that were added/updated since the last flush
4862
*/
63+
const shouldDehydrate =
64+
props.options?.dehydrate?.shouldDehydrateQuery ??
65+
defaultShouldDehydrateQuery
66+
4967
const dehydratedState = dehydrate(queryClient, {
68+
...props.options?.dehydrate,
5069
shouldDehydrateQuery(query) {
51-
return (
52-
trackedKeys.has(query.queryHash) &&
53-
query.state.status !== 'pending'
54-
)
70+
return trackedKeys.has(query.queryHash) && shouldDehydrate(query)
5571
},
5672
})
5773
trackedKeys.clear()
@@ -65,7 +81,7 @@ export function ReactQueryStreamedHydration(props: {
6581
// Happens in browser:
6682
onEntries={(entries) => {
6783
for (const hydratedState of entries) {
68-
hydrate(queryClient, hydratedState)
84+
hydrate(queryClient, hydratedState, props.options?.hydrate)
6985
}
7086
}}
7187
// Handle BigInts etc using superjson

0 commit comments

Comments
 (0)