Skip to content

Commit 225df21

Browse files
committed
fix: typings for MobxQuery
1 parent c04a55f commit 225df21

File tree

4 files changed

+118
-30
lines changed

4 files changed

+118
-30
lines changed

src/mobx-infinite-query.test.ts

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ describe('MobxInfiniteQuery', () => {
311311

312312
mobxQuery.dispose();
313313
});
314+
314315
it('should call queryFn after fetchNextPage call (x3 times)', async () => {
315316
const mobxQuery = new MobxInfiniteQueryMock({
316317
queryKey: ['test'],
@@ -408,4 +409,87 @@ describe('MobxInfiniteQuery', () => {
408409

409410
mobxQuery.dispose();
410411
});
412+
413+
describe('"enabled" reactive parameter', () => {
414+
it.skip('should be reactive after change queryKey', async () => {
415+
const mobxQuery = new MobxInfiniteQueryMock({
416+
queryKey: ['test', 0 as number] as const,
417+
enabled: ({ queryKey }) => queryKey[1] > 0,
418+
queryFn: () => 100,
419+
});
420+
421+
mobxQuery.update({ queryKey: ['test', 1] as const });
422+
423+
await when(() => !mobxQuery._rawResult.isFetching);
424+
425+
expect(mobxQuery.spies.queryFn).toBeCalledTimes(1);
426+
expect(mobxQuery.spies.queryFn).nthReturnedWith(1, 100);
427+
428+
mobxQuery.dispose();
429+
});
430+
431+
it.skip('should be reactive dependent on another query (runs before declartion)', async () => {
432+
const disabledMobxQuery = new MobxInfiniteQueryMock({
433+
queryKey: ['test', 0 as number] as const,
434+
enabled: ({ queryKey }) => queryKey[1] > 0,
435+
queryFn: () => 100,
436+
});
437+
438+
disabledMobxQuery.update({ queryKey: ['test', 1] as const });
439+
440+
const dependentMobxQuery = new MobxInfiniteQueryMock({
441+
options: () => ({
442+
enabled: !!disabledMobxQuery.options.enabled,
443+
queryKey: [...disabledMobxQuery.options.queryKey, 'dependent'],
444+
}),
445+
queryFn: ({ queryKey }) => queryKey,
446+
});
447+
448+
await when(() => !disabledMobxQuery._rawResult.isLoading);
449+
await when(() => !dependentMobxQuery._rawResult.isLoading);
450+
451+
expect(dependentMobxQuery.spies.queryFn).toBeCalledTimes(1);
452+
expect(dependentMobxQuery.spies.queryFn).nthReturnedWith(1, [
453+
'test',
454+
1,
455+
'dependent',
456+
]);
457+
458+
disabledMobxQuery.dispose();
459+
dependentMobxQuery.dispose();
460+
});
461+
462+
it.skip('should be reactive dependent on another query (runs after declaration)', async () => {
463+
const tempDisabledMobxQuery = new MobxInfiniteQueryMock({
464+
queryKey: ['test', 0 as number] as const,
465+
enabled: ({ queryKey }) => queryKey[1] > 0,
466+
queryFn: () => 100,
467+
});
468+
469+
const dependentMobxQuery = new MobxInfiniteQueryMock({
470+
options: () => ({
471+
enabled: !!tempDisabledMobxQuery.options.enabled,
472+
queryKey: [...tempDisabledMobxQuery.options.queryKey, 'dependent'],
473+
}),
474+
queryFn: ({ queryKey }) => queryKey,
475+
});
476+
477+
tempDisabledMobxQuery.update({ queryKey: ['test', 1] as const });
478+
479+
await when(() => !tempDisabledMobxQuery._rawResult.isLoading);
480+
await when(() => !dependentMobxQuery._rawResult.isLoading);
481+
482+
expect(dependentMobxQuery.spies.queryFn).toBeCalledTimes(1);
483+
// результат с 0 потому что options.enabled у первой квери - это функция и
484+
// !!tempDisabledMobxQuery.options.enabled будет всегда true
485+
expect(dependentMobxQuery.spies.queryFn).nthReturnedWith(1, [
486+
'test',
487+
0,
488+
'dependent',
489+
]);
490+
491+
tempDisabledMobxQuery.dispose();
492+
dependentMobxQuery.dispose();
493+
});
494+
});
411495
});

src/mobx-inifinite-query.types.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,22 @@ export interface MobxInfiniteQueryOptions<
5454
TPageParam
5555
> {}
5656

57+
export interface MobxInfiniteQueryUpdateOptions<
58+
TData,
59+
TError = DefaultError,
60+
TQueryKey extends QueryKey = QueryKey,
61+
TPageParam = unknown,
62+
> extends Partial<
63+
InfiniteQueryObserverOptions<
64+
TData,
65+
TError,
66+
InfiniteData<TData>,
67+
InfiniteData<TData>,
68+
TQueryKey,
69+
TPageParam
70+
>
71+
> {}
72+
5773
export interface MobxInfiniteQueryConfig<
5874
TData,
5975
TError = DefaultError,
@@ -119,19 +135,3 @@ export interface MobxInfiniteQueryConfig<
119135
*/
120136
enableOnDemand?: boolean;
121137
}
122-
123-
export interface MobxInfiniteQueryUpdateOptions<
124-
TData,
125-
TError = DefaultError,
126-
TQueryKey extends QueryKey = QueryKey,
127-
TPageParam = unknown,
128-
> extends Partial<
129-
InfiniteQueryObserverOptions<
130-
TData,
131-
TError,
132-
InfiniteData<TData>,
133-
InfiniteData<TData>,
134-
TQueryKey,
135-
TPageParam
136-
>
137-
> {}

src/mobx-query.test.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import {
22
DefaultError,
33
QueryClient,
44
QueryKey,
5-
QueryObserverOptions,
65
QueryObserverResult,
76
RefetchOptions,
87
SetDataOptions,
@@ -12,7 +11,12 @@ import { observable, reaction, runInAction, when } from 'mobx';
1211
import { describe, expect, it, vi } from 'vitest';
1312

1413
import { MobxQuery } from './mobx-query';
15-
import { MobxQueryConfig, MobxQueryInvalidateParams } from './mobx-query.types';
14+
import {
15+
MobxQueryConfig,
16+
MobxQueryDynamicOptions,
17+
MobxQueryInvalidateParams,
18+
MobxQueryUpdateOptions,
19+
} from './mobx-query.types';
1620

1721
class MobxQueryMock<
1822
TData,
@@ -67,9 +71,9 @@ class MobxQueryMock<
6771
}
6872

6973
update(
70-
options: Partial<
71-
QueryObserverOptions<TData, TError, TQueryKey, TData, QueryKey, never>
72-
>,
74+
options:
75+
| MobxQueryUpdateOptions<TData, TError, TQueryKey>
76+
| MobxQueryDynamicOptions<TData, TError, TQueryKey>,
7377
): void {
7478
const result = super.update(options);
7579
this.spies.update.mockReturnValue(result)(options);
@@ -190,7 +194,7 @@ describe('MobxQuery', () => {
190194
describe('"enabled" reactive parameter', () => {
191195
it('should be reactive after change queryKey', async () => {
192196
const mobxQuery = new MobxQueryMock({
193-
queryKey: ['test', 0] as const,
197+
queryKey: ['test', 0 as number] as const,
194198
enabled: ({ queryKey }) => queryKey[1] > 0,
195199
queryFn: () => 100,
196200
});
@@ -207,7 +211,7 @@ describe('MobxQuery', () => {
207211

208212
it('should be reactive dependent on another query (runs before declartion)', async () => {
209213
const disabledMobxQuery = new MobxQueryMock({
210-
queryKey: ['test', 0] as const,
214+
queryKey: ['test', 0 as number] as const,
211215
enabled: ({ queryKey }) => queryKey[1] > 0,
212216
queryFn: () => 100,
213217
});
@@ -238,7 +242,7 @@ describe('MobxQuery', () => {
238242

239243
it('should be reactive dependent on another query (runs after declaration)', async () => {
240244
const tempDisabledMobxQuery = new MobxQueryMock({
241-
queryKey: ['test', 0] as const,
245+
queryKey: ['test', 0 as number] as const,
242246
enabled: ({ queryKey }) => queryKey[1] > 0,
243247
queryFn: () => 100,
244248
});

src/mobx-query.types.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,6 @@ export interface MobxQueryDynamicOptions<
3030
enabled?: boolean;
3131
}
3232

33-
export type MobxQueryUpdateOptions<
34-
TData,
35-
TError = DefaultError,
36-
TQueryKey extends QueryKey = QueryKey,
37-
> = Partial<QueryObserverOptions<TData, TError, TQueryKey>>;
38-
3933
export interface MobxQueryOptions<
4034
TData,
4135
TError = DefaultError,
@@ -48,6 +42,12 @@ export interface MobxQueryOptions<
4842
TQueryKey
4943
> {}
5044

45+
export type MobxQueryUpdateOptions<
46+
TData,
47+
TError = DefaultError,
48+
TQueryKey extends QueryKey = QueryKey,
49+
> = Partial<QueryObserverOptions<TData, TError, TData, TData, TQueryKey>>;
50+
5151
export interface MobxQueryConfig<
5252
TData,
5353
TError = DefaultError,

0 commit comments

Comments
 (0)