Skip to content

Commit 5394172

Browse files
committed
feat(useQueries): combine
make sure combinedResult stays in sync with result
1 parent e946171 commit 5394172

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

packages/query-core/src/queriesObserver.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ export class QueriesObserver<
3232
TCombinedResult = QueryObserverResult[],
3333
> extends Subscribable<QueriesObserverListener> {
3434
#client: QueryClient
35-
#result: QueryObserverResult[]
35+
#result!: QueryObserverResult[]
3636
#queries: QueryObserverOptions[]
3737
#observers: QueryObserver[]
3838
#options?: QueriesObserverOptions<TCombinedResult>
39-
#combinedResult?: TCombinedResult
39+
#combinedResult!: TCombinedResult
4040

4141
constructor(
4242
client: QueryClient,
@@ -47,12 +47,17 @@ export class QueriesObserver<
4747

4848
this.#client = client
4949
this.#queries = []
50-
this.#result = []
5150
this.#observers = []
5251

52+
this.#setResult([])
5353
this.setQueries(queries, options)
5454
}
5555

56+
#setResult(value: QueryObserverResult[]) {
57+
this.#result = value
58+
this.#combinedResult = this.#combineResult(value)
59+
}
60+
5661
protected onSubscribe(): void {
5762
if (this.listeners.length === 1) {
5863
this.#observers.forEach((observer) => {
@@ -107,7 +112,7 @@ export class QueriesObserver<
107112
}
108113

109114
this.#observers = newObservers
110-
this.#result = newResult
115+
this.#setResult(newResult)
111116

112117
if (!this.hasListeners()) {
113118
return
@@ -127,7 +132,7 @@ export class QueriesObserver<
127132
})
128133
}
129134

130-
getCurrentResult(): TCombinedResult | undefined {
135+
getCurrentResult(): TCombinedResult {
131136
return this.#combinedResult
132137
}
133138

@@ -153,9 +158,7 @@ export class QueriesObserver<
153158
const newResult = (this.#options?.combine?.(input) ??
154159
input) as TCombinedResult
155160

156-
this.#combinedResult = replaceEqualDeep(this.#combinedResult, newResult)
157-
158-
return this.#combinedResult
161+
return replaceEqualDeep(this.#combinedResult, newResult)
159162
}
160163

161164
#findMatchingObservers(
@@ -220,7 +223,7 @@ export class QueriesObserver<
220223
#onUpdate(observer: QueryObserver, result: QueryObserverResult): void {
221224
const index = this.#observers.indexOf(observer)
222225
if (index !== -1) {
223-
this.#result = replaceAt(this.#result, index, result)
226+
this.#setResult(replaceAt(this.#result, index, result))
224227
this.#notify()
225228
}
226229
}

0 commit comments

Comments
 (0)