Skip to content

Commit e3a13b2

Browse files
committed
feat: queryOptions utility fn (#2)
1 parent c7a77f7 commit e3a13b2

File tree

7 files changed

+42
-12
lines changed

7 files changed

+42
-12
lines changed

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export * from './mobx-mutation.types';
33
export * from './mobx-query.types';
44
export * from './mobx-query';
55
export * from './mobx-query-client';
6+
export * from './mobx-query-client.types';
67
export * from './mobx-inifinite-query';
78
export * from './mobx-inifinite-query.types';
89
export * from './query-options';

src/mobx-inifinite-query.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,9 @@ export class MobxInfiniteQuery<
410410
[Symbol.dispose](): void {
411411
this.destroy();
412412
}
413+
414+
// Firefox fix (Symbol.dispose is undefined in FF)
415+
[Symbol.for('Symbol.dispose')](): void {
416+
this.destroy();
417+
}
413418
}

src/mobx-mutation.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,4 +208,9 @@ export class MobxMutation<
208208
[Symbol.dispose](): void {
209209
this.destroy();
210210
}
211+
212+
// Firefox fix (Symbol.dispose is undefined in FF)
213+
[Symbol.for('Symbol.dispose')](): void {
214+
this.destroy();
215+
}
211216
}

src/mobx-query-client.types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import type { QueryClient } from '@tanstack/query-core';
2+
3+
import type { MobxQueryClient } from './mobx-query-client';
4+
5+
export type AnyQueryClient = MobxQueryClient | QueryClient;

src/mobx-query.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
} from 'mobx';
2020

2121
import { MobxQueryClient, MobxQueryClientHooks } from './mobx-query-client';
22+
import { AnyQueryClient } from './mobx-query-client.types';
2223
import {
2324
MobxQueryConfig,
2425
MobxQueryDynamicOptions,
@@ -28,6 +29,7 @@ import {
2829
MobxQueryStartParams,
2930
MobxQueryUpdateOptions,
3031
} from './mobx-query.types';
32+
import { QueryOptionsParams } from './query-options';
3133

3234
export class MobxQuery<
3335
TData,
@@ -59,13 +61,26 @@ export class MobxQuery<
5961
private _observerSubscription?: VoidFunction;
6062
private hooks?: MobxQueryClientHooks;
6163

62-
constructor(protected config: MobxQueryConfig<TData, TError, TQueryKey>) {
64+
protected config: MobxQueryConfig<TData, TError, TQueryKey>;
65+
66+
constructor(
67+
queryClient: AnyQueryClient,
68+
config: QueryOptionsParams<TData, TError, TQueryKey>,
69+
);
70+
constructor(config: MobxQueryConfig<TData, TError, TQueryKey>);
71+
72+
constructor(...args: any[]) {
73+
const [queryClient, config] =
74+
args.length === 2 ? args : [args[0].queryClient, args[0]];
6375
const {
64-
queryClient,
6576
queryKey: queryKeyOrDynamicQueryKey,
6677
options: getDynamicOptions,
6778
...restOptions
6879
} = config;
80+
this.config = {
81+
...config,
82+
queryClient,
83+
};
6984
this.abortController = new LinkedAbortController(config.abortSignal);
7085
this.queryClient = queryClient;
7186
this._result = undefined as any;
@@ -371,4 +386,9 @@ export class MobxQuery<
371386
[Symbol.dispose](): void {
372387
this.destroy();
373388
}
389+
390+
// Firefox fix (Symbol.dispose is undefined in FF)
391+
[Symbol.for('Symbol.dispose')](): void {
392+
this.destroy();
393+
}
374394
}

src/mobx-query.types.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ import {
22
DefaultedQueryObserverOptions,
33
DefaultError,
44
InvalidateQueryFilters,
5-
QueryClient,
65
QueryFilters,
76
QueryKey,
87
QueryObserverOptions,
98
RefetchOptions,
109
} from '@tanstack/query-core';
1110

1211
import type { MobxQuery } from './mobx-query';
13-
import { MobxQueryClient } from './mobx-query-client';
12+
import { AnyQueryClient } from './mobx-query-client.types';
1413

1514
export interface MobxQueryInvalidateParams
1615
extends Partial<Omit<InvalidateQueryFilters, 'queryKey' | 'exact'>> {}
@@ -89,7 +88,7 @@ export interface MobxQueryConfig<
8988
>
9089
>,
9190
MobxQueryFeatures {
92-
queryClient: QueryClient | MobxQueryClient;
91+
queryClient: AnyQueryClient;
9392
/**
9493
* TanStack Query manages query caching for you based on query keys.
9594
* Query keys have to be an Array at the top level, and can be as simple as an Array with a single string, or as complex as an array of many strings and nested objects.

src/query-options.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,11 @@ import { DefaultError, QueryKey } from '@tanstack/query-core';
22

33
import { MobxQueryConfig } from './mobx-query.types';
44

5-
type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
6-
7-
interface QueryOptionsParams<
5+
export interface QueryOptionsParams<
86
TData,
97
TError = DefaultError,
108
TQueryKey extends QueryKey = QueryKey,
11-
> extends PartialKeys<
12-
MobxQueryConfig<TData, TError, TQueryKey>,
13-
'queryClient'
14-
> {}
9+
> extends Omit<MobxQueryConfig<TData, TError, TQueryKey>, 'queryClient'> {}
1510

1611
export function queryOptions<
1712
TData,

0 commit comments

Comments
 (0)