Skip to content

Commit 782b70e

Browse files
committed
WatchedQuery now extends BaseObserver.
1 parent 75897f4 commit 782b70e

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

packages/react/src/WatchedQuery.ts

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { AbstractPowerSyncDatabase, CompilableQuery } from '@powersync/common';
1+
import { AbstractPowerSyncDatabase, BaseListener, BaseObserver, CompilableQuery } from '@powersync/common';
22
import { AdditionalOptions } from './hooks/useQuery';
33

44
export class Query<T> {
@@ -7,9 +7,11 @@ export class Query<T> {
77
queryParameters: any[];
88
}
99

10-
export class WatchedQuery {
11-
listeners = new Set<() => void>();
10+
export interface WatchedQueryListener extends BaseListener {
11+
onUpdate: () => void;
12+
}
1213

14+
export class WatchedQuery extends BaseObserver<WatchedQueryListener> {
1315
readyPromise: Promise<void>;
1416
isReady: boolean = false;
1517
currentData: any[] | undefined;
@@ -27,6 +29,7 @@ export class WatchedQuery {
2729
private disposer: () => void;
2830

2931
constructor(db: AbstractPowerSyncDatabase, query: Query<unknown>, options: AdditionalOptions, disposer: () => void) {
32+
super();
3033
this.db = db;
3134
this.query = query;
3235
this.options = options;
@@ -65,12 +68,12 @@ export class WatchedQuery {
6568
return release;
6669
}
6770

68-
addListener(l: () => void) {
69-
this.listeners.add(l);
71+
registerListener(listener: Partial<WatchedQueryListener>): () => void {
72+
const disposer = super.registerListener(listener);
7073

7174
this.maybeListen();
7275
return () => {
73-
this.listeners.delete(l);
76+
disposer();
7477
this.maybeDispose();
7578
};
7679
}
@@ -142,9 +145,7 @@ export class WatchedQuery {
142145
this.currentError = undefined;
143146
this.resolveReady?.();
144147

145-
for (let listener of this.listeners) {
146-
listener();
147-
}
148+
this.iterateListeners((l) => l?.onUpdate());
148149
}
149150

150151
private setError(error: any) {
@@ -153,9 +154,7 @@ export class WatchedQuery {
153154
this.currentError = error;
154155
this.resolveReady?.();
155156

156-
for (let listener of this.listeners) {
157-
listener();
158-
}
157+
this.iterateListeners((l) => l?.onUpdate());
159158
}
160159

161160
private maybeDispose() {

packages/react/src/hooks/useSuspenseQuery.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,12 @@ export const useSuspenseQuery = <T = any>(
4848
const [_counter, setUpdateCounter] = React.useState(0);
4949

5050
React.useEffect(() => {
51-
const dispose = q.addListener(() => {
52-
setUpdateCounter((counter) => {
53-
return counter + 1;
54-
});
51+
const dispose = q.registerListener({
52+
onUpdate: () => {
53+
setUpdateCounter((counter) => {
54+
return counter + 1;
55+
});
56+
}
5557
});
5658

5759
releaseTemporaryHold.current?.();

0 commit comments

Comments
 (0)