Skip to content

Commit 2b8b722

Browse files
refactor(svelte-5-adapter): simplify createBaseQuery (#7808)
* refactor: simplify createBaseQuery * Don't take snapshot of queryKey
1 parent 33e2054 commit 2b8b722

File tree

3 files changed

+26
-59
lines changed

3 files changed

+26
-59
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { notifyManager } from '@tanstack/query-core'
2-
import { untrack } from 'svelte'
32
import { useIsRestoring } from './useIsRestoring'
43
import { useQueryClient } from './useQueryClient'
54
import type {
@@ -32,81 +31,53 @@ export function createBaseQuery<
3231
const isRestoring = useIsRestoring()
3332

3433
/** Creates a store that has the default options applied */
35-
function updateOptions() {
36-
const queryKey: TQueryKey = $state.snapshot(options().queryKey) as any // remove proxy prevent reactive query in DevTools
37-
const defaultedOptions = client.defaultQueryOptions({
38-
...options(),
39-
queryKey: queryKey,
40-
})
41-
defaultedOptions._optimisticResults = 'optimistic'
42-
if (isRestoring()) {
43-
defaultedOptions._optimisticResults = 'isRestoring'
44-
}
45-
46-
defaultedOptions.structuralSharing = false
47-
48-
return defaultedOptions
49-
}
34+
const defaultedOptions = $derived(() => {
35+
const defaultOptions = client.defaultQueryOptions(options())
36+
defaultOptions._optimisticResults = isRestoring()
37+
? 'isRestoring'
38+
: 'optimistic'
39+
defaultOptions.structuralSharing = false
40+
return defaultOptions
41+
})
5042

51-
const defaultedOptionsStore = updateOptions
5243
/** Creates the observer */
5344
const observer = new Observer<
5445
TQueryFnData,
5546
TError,
5647
TData,
5748
TQueryData,
5849
TQueryKey
59-
>(client, defaultedOptionsStore())
50+
>(client, defaultedOptions())
6051

6152
const result = $state<QueryObserverResult<TData, TError>>(
62-
observer.getOptimisticResult(defaultedOptionsStore()),
53+
observer.getOptimisticResult(defaultedOptions()),
6354
)
6455

65-
function upResult(r: QueryObserverResult<TData, TError>) {
56+
function updateResult(r: QueryObserverResult<TData, TError>) {
6657
Object.assign(result, r)
6758
}
6859

6960
$effect(() => {
70-
let un = () => undefined
71-
if (!isRestoring()) {
72-
{
73-
// @ts-expect-error
74-
un = observer.subscribe((v) => {
61+
const unsubscribe = isRestoring()
62+
? () => undefined
63+
: observer.subscribe(() => {
7564
notifyManager.batchCalls(() => {
76-
const temp = observer.getOptimisticResult(defaultedOptionsStore())
77-
upResult(temp)
65+
updateResult(observer.getOptimisticResult(defaultedOptions()))
7866
})()
7967
})
80-
}
81-
}
8268

8369
observer.updateResult()
84-
return () => {
85-
un()
86-
}
70+
return () => unsubscribe()
8771
})
8872

8973
/** Subscribe to changes in result and defaultedOptionsStore */
9074
$effect.pre(() => {
91-
observer.setOptions(defaultedOptionsStore(), { listeners: false })
92-
upResult(observer.getOptimisticResult(defaultedOptionsStore()))
93-
// result = observer.getOptimisticResult(defaultedOptionsStore()) //prevent lag , somehow observer.subscribe does not return
75+
observer.setOptions(defaultedOptions(), { listeners: false })
76+
updateResult(observer.getOptimisticResult(defaultedOptions()))
9477
})
9578

96-
const final_ = $state({ value: result })
97-
98-
// update result
99-
$effect(() => {
100-
// svelte does not need this with it is proxy state and fine-grained reactivity?
101-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
102-
if (result !== null)
103-
untrack(() => {
104-
const v = !defaultedOptionsStore().notifyOnChangeProps
105-
? observer.trackResult(result)
106-
: result
107-
108-
final_.value = Object.assign(final_.value, v)
109-
})
110-
})
111-
return final_.value
79+
// Handle result property usage tracking
80+
return !defaultedOptions().notifyOnChangeProps
81+
? observer.trackResult(result)
82+
: result
11283
}

packages/svelte-query/tests/createQuery/BaseExample.svelte

+2-4
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
const query = createQuery(options, queryClient)
1818
1919
$effect(() => {
20-
states.value = [
21-
...untrack(() => states.value),
22-
$state.snapshot(query) as QueryObserverResult,
23-
]
20+
// @ts-expect-error
21+
states.value = [...untrack(() => states.value), $state.snapshot(query)]
2422
})
2523
</script>
2624

packages/svelte-query/tests/createQuery/DisabledExample.svelte

+2-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@
2727
)
2828
2929
$effect(() => {
30-
states.value = [
31-
...untrack(() => states.value),
32-
$state.snapshot(query) as QueryObserverResult,
33-
]
30+
// @ts-expect-error
31+
states.value = [...untrack(() => states.value), $state.snapshot(query)]
3432
})
3533
</script>
3634

0 commit comments

Comments
 (0)