Skip to content

Commit cc9eaa5

Browse files
committed
feat: add hooks for MobxQueryClient
1 parent 5e76d2d commit cc9eaa5

File tree

4 files changed

+38
-4
lines changed

4 files changed

+38
-4
lines changed

src/mobx-inifinite-query.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
MobxInfiniteQueryResetParams,
3030
MobxInfiniteQueryUpdateOptions,
3131
} from './mobx-inifinite-query.types';
32-
import { MobxQueryClient } from './mobx-query-client';
32+
import { MobxQueryClient, MobxQueryClientHooks } from './mobx-query-client';
3333

3434
export class MobxInfiniteQuery<
3535
TData,
@@ -66,6 +66,7 @@ export class MobxInfiniteQuery<
6666
TPageParam
6767
>['enabled'];
6868
private _observerSubscription?: VoidFunction;
69+
private hooks?: MobxQueryClientHooks;
6970

7071
constructor(
7172
protected config: MobxInfiniteQueryConfig<
@@ -85,6 +86,8 @@ export class MobxInfiniteQuery<
8586
this._result = undefined as any;
8687
this.isResultRequsted = false;
8788
this.isEnabledOnResultDemand = config.enableOnDemand ?? false;
89+
this.hooks =
90+
'hooks' in this.queryClient ? this.queryClient.hooks : undefined;
8891

8992
if (
9093
queryClient instanceof MobxQueryClient &&
@@ -174,6 +177,7 @@ export class MobxInfiniteQuery<
174177
this.abortController.signal.addEventListener('abort', this.handleAbort);
175178

176179
this.config.onInit?.(this);
180+
this.hooks?.onInfiniteQueryInit?.(this);
177181
}
178182

179183
protected createQueryHash(
@@ -351,6 +355,7 @@ export class MobxInfiniteQuery<
351355

352356
destroy() {
353357
this.abortController.abort();
358+
this.hooks?.onInfiniteQueryDestroy?.(this);
354359
}
355360

356361
/**

src/mobx-mutation.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { LinkedAbortController } from 'linked-abort-controller';
1010
import { action, makeObservable, observable, reaction } from 'mobx';
1111

1212
import { MobxMutationConfig } from './mobx-mutation.types';
13-
import { MobxQueryClient } from './mobx-query-client';
13+
import { MobxQueryClient, MobxQueryClientHooks } from './mobx-query-client';
1414

1515
export class MobxMutation<
1616
TData = unknown,
@@ -28,6 +28,7 @@ export class MobxMutation<
2828
result: MutationObserverResult<TData, TError, TVariables, TContext>;
2929

3030
private _observerSubscription?: VoidFunction;
31+
private hooks?: MobxQueryClientHooks;
3132

3233
constructor(
3334
protected config: MobxMutationConfig<TData, TVariables, TError, TContext>,
@@ -47,6 +48,8 @@ export class MobxMutation<
4748
makeObservable(this);
4849

4950
this.mutationOptions = this.queryClient.defaultMutationOptions(restOptions);
51+
this.hooks =
52+
'hooks' in this.queryClient ? this.queryClient.hooks : undefined;
5053

5154
this.mutationObserver = new MutationObserver<
5255
TData,
@@ -74,6 +77,7 @@ export class MobxMutation<
7477
});
7578

7679
config.onInit?.(this);
80+
this.hooks?.onMutationInit?.(this);
7781
}
7882

7983
async mutate(
@@ -149,6 +153,7 @@ export class MobxMutation<
149153

150154
destroy() {
151155
this.abortController.abort();
156+
this.hooks?.onMutationDestroy?.(this);
152157
}
153158

154159
/**

src/mobx-query-client.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,33 @@ import {
55
QueryClientConfig,
66
} from '@tanstack/query-core';
77

8+
import { MobxInfiniteQuery } from './mobx-inifinite-query';
9+
import { MobxMutation } from './mobx-mutation';
810
import { MobxMutationFeatures } from './mobx-mutation.types';
11+
import { MobxQuery } from './mobx-query';
912
import { MobxQueryFeatures } from './mobx-query.types';
1013

11-
interface MobxDefaultOptions<TError = DefaultError>
14+
export interface MobxDefaultOptions<TError = DefaultError>
1215
extends Omit<DefaultOptions<TError>, 'queries' | 'mutations'> {
1316
queries?: DefaultOptions<TError>['queries'] & MobxQueryFeatures;
1417
mutations?: DefaultOptions<TError>['mutations'] & MobxMutationFeatures;
1518
}
1619

20+
export interface MobxQueryClientHooks {
21+
onQueryInit?: (query: MobxQuery<any, any, any>) => void;
22+
onInfiniteQueryInit?: (query: MobxInfiniteQuery<any, any, any, any>) => void;
23+
onMutationInit?: (query: MobxMutation<any, any, any, any>) => void;
24+
onQueryDestroy?: (query: MobxQuery<any, any, any>) => void;
25+
onInfiniteQueryDestroy?: (
26+
query: MobxInfiniteQuery<any, any, any, any>,
27+
) => void;
28+
onMutationDestroy?: (query: MobxMutation<any, any, any, any>) => void;
29+
}
30+
1731
export interface MobxQueryClientConfig
1832
extends Omit<QueryClientConfig, 'defaultOptions'> {
1933
defaultOptions?: MobxDefaultOptions;
34+
hooks?: MobxQueryClientHooks;
2035
}
2136

2237
export class MobxQueryClient extends QueryClient {
@@ -42,6 +57,10 @@ export class MobxQueryClient extends QueryClient {
4257
return this.getDefaultOptions().queries ?? {};
4358
}
4459

60+
get hooks(): MobxQueryClientHooks | undefined {
61+
return this.config.hooks;
62+
}
63+
4564
get mutationFeatures(): MobxMutationFeatures {
4665
return this.getDefaultOptions().mutations ?? {};
4766
}

src/mobx-query.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
runInAction,
1919
} from 'mobx';
2020

21-
import { MobxQueryClient } from './mobx-query-client';
21+
import { MobxQueryClient, MobxQueryClientHooks } from './mobx-query-client';
2222
import {
2323
MobxQueryConfig,
2424
MobxQueryDynamicOptions,
@@ -48,6 +48,7 @@ export class MobxQuery<
4848

4949
private _originEnabled: MobxQueryOptions<TData, TError, TQueryKey>['enabled'];
5050
private _observerSubscription?: VoidFunction;
51+
private hooks?: MobxQueryClientHooks;
5152

5253
constructor(protected config: MobxQueryConfig<TData, TError, TQueryKey>) {
5354
const {
@@ -60,6 +61,8 @@ export class MobxQuery<
6061
this._result = undefined as any;
6162
this.isResultRequsted = false;
6263
this.isEnabledOnResultDemand = config.enableOnDemand ?? false;
64+
this.hooks =
65+
'hooks' in this.queryClient ? this.queryClient.hooks : undefined;
6366

6467
if (
6568
queryClient instanceof MobxQueryClient &&
@@ -149,6 +152,7 @@ export class MobxQuery<
149152
this.abortController.signal.addEventListener('abort', this.handleAbort);
150153

151154
this.config.onInit?.(this);
155+
this.hooks?.onQueryInit?.(this);
152156
}
153157

154158
async refetch(options?: RefetchOptions) {
@@ -305,6 +309,7 @@ export class MobxQuery<
305309

306310
destroy() {
307311
this.abortController.abort();
312+
this.hooks?.onQueryDestroy?.(this);
308313
}
309314

310315
/**

0 commit comments

Comments
 (0)