Skip to content

Commit 317f725

Browse files
committed
feat: add remove() method for queries, removeOnDestroy option for queries
1 parent 3e6563e commit 317f725

File tree

6 files changed

+67
-8
lines changed

6 files changed

+67
-8
lines changed

.changeset/beige-states-film.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"mobx-tanstack-query": minor
3+
---
4+
5+
added `removeOnDestroy` to remove query after destroy or abortSignal aborted

.changeset/true-showers-look.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"mobx-tanstack-query": minor
3+
---
4+
5+
added `remove()` method for `Query/InfiniteQuery` to remove query

src/inifinite-query.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@ import {
3131
InfiniteQueryFlattenConfig,
3232
InfiniteQueryInvalidateParams,
3333
InfiniteQueryOptions,
34+
InfiniteQueryRemoveParams,
3435
InfiniteQueryResetParams,
3536
InfiniteQueryStartParams,
3637
InfiniteQueryUpdateOptionsAllVariants,
3738
} from './inifinite-query.types';
3839
import { Query } from './query';
40+
import { QueryClient } from './query-client';
3941
import { AnyQueryClient, QueryClientHooks } from './query-client.types';
4042
import { QueryFeatures } from './query.types';
4143

@@ -581,6 +583,10 @@ export class InfiniteQuery<
581583
return await Query.prototype.reset.call(this, params);
582584
}
583585

586+
remove(params?: InfiniteQueryRemoveParams) {
587+
return Query.prototype.remove.call(this, params);
588+
}
589+
584590
async invalidate(options?: InfiniteQueryInvalidateParams) {
585591
return await Query.prototype.invalidate.call(this, options);
586592
}
@@ -616,17 +622,28 @@ export class InfiniteQuery<
616622

617623
let isNeedToReset =
618624
this.config.resetOnDestroy || this.config.resetOnDispose;
625+
let isNeedToRemove = this.config.removeOnDestroy;
626+
627+
if (this.queryClient instanceof QueryClient) {
628+
if (isNeedToReset === undefined) {
629+
isNeedToReset =
630+
this.queryClient.queryFeatures.resetOnDestroy ||
631+
this.queryClient.queryFeatures.resetOnDispose;
632+
}
619633

620-
if ('queryFeatures' in this.queryClient && !isNeedToReset) {
621-
isNeedToReset =
622-
this.queryClient.queryFeatures.resetOnDestroy ||
623-
this.queryClient.queryFeatures.resetOnDispose;
634+
if (isNeedToRemove === undefined) {
635+
isNeedToRemove = this.queryClient.queryFeatures.removeOnDestroy;
636+
}
624637
}
625638

626639
if (isNeedToReset) {
627640
this.reset();
628641
}
629642

643+
if (isNeedToRemove) {
644+
this.remove();
645+
}
646+
630647
delete this._observerSubscription;
631648
this.hooks?.onInfiniteQueryDestroy?.(this);
632649
}

src/inifinite-query.types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { AnyQueryClient } from './query-client.types';
1313
import {
1414
QueryFeatures,
1515
QueryInvalidateParams,
16+
QueryRemoveParams,
1617
QueryResetParams,
1718
} from './query.types';
1819

@@ -34,6 +35,7 @@ export interface InfiniteQueryInvalidateParams extends QueryInvalidateParams {}
3435
export type MobxInfiniteQueryInvalidateParams = InfiniteQueryInvalidateParams;
3536

3637
export interface InfiniteQueryResetParams extends QueryResetParams {}
38+
export interface InfiniteQueryRemoveParams extends QueryRemoveParams {}
3739

3840
/**
3941
* @deprecated ⚠️ use `InfiniteQueryResetParams`. This type will be removed in next major release

src/query.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
QueryFeatures,
3636
QueryInvalidateParams,
3737
QueryOptions,
38+
QueryRemoveParams,
3839
QueryResetParams,
3940
QueryStartParams,
4041
QueryUpdateOptionsAllVariants,
@@ -588,6 +589,14 @@ export class Query<
588589
);
589590
}
590591

592+
remove(params?: QueryRemoveParams) {
593+
return this.queryClient.removeQueries({
594+
queryKey: this.options.queryKey,
595+
exact: true,
596+
...params,
597+
});
598+
}
599+
591600
async cancel(options?: CancelOptions) {
592601
return await this.queryClient.cancelQueries(
593602
{
@@ -624,17 +633,28 @@ export class Query<
624633

625634
let isNeedToReset =
626635
this.config.resetOnDestroy || this.config.resetOnDispose;
636+
let isNeedToRemove = this.config.removeOnDestroy;
627637

628-
if (this.queryClient instanceof QueryClient && !isNeedToReset) {
629-
isNeedToReset =
630-
this.queryClient.queryFeatures.resetOnDestroy ||
631-
this.queryClient.queryFeatures.resetOnDispose;
638+
if (this.queryClient instanceof QueryClient) {
639+
if (isNeedToReset === undefined) {
640+
isNeedToReset =
641+
this.queryClient.queryFeatures.resetOnDestroy ||
642+
this.queryClient.queryFeatures.resetOnDispose;
643+
}
644+
645+
if (isNeedToRemove === undefined) {
646+
isNeedToRemove = this.queryClient.queryFeatures.removeOnDestroy;
647+
}
632648
}
633649

634650
if (isNeedToReset) {
635651
this.reset();
636652
}
637653

654+
if (isNeedToRemove) {
655+
this.remove();
656+
}
657+
638658
delete this._observerSubscription;
639659

640660
this.hooks?.onQueryDestroy?.(this);

src/query.types.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ export type MobxQueryInvalidateParams = QueryInvalidateParams;
2121
export interface QueryResetParams
2222
extends Partial<Omit<QueryFilters, 'queryKey' | 'exact'>> {}
2323

24+
export interface QueryRemoveParams
25+
extends Partial<Omit<QueryFilters, 'queryKey' | 'exact'>> {}
26+
2427
/**
2528
* @deprecated ⚠️ use `QueryResetParams`. This type will be removed in next major release
2629
*/
@@ -111,6 +114,13 @@ export interface QueryFeatures {
111114
*/
112115
resetOnDestroy?: boolean;
113116

117+
/**
118+
* Removes query when destroy or abort signal is called
119+
*
120+
* It uses [queryClient.removeQueries](https://tanstack.com/query/v5/docs/reference/QueryClient#queryclientremovequeries)
121+
*/
122+
removeOnDestroy?: boolean;
123+
114124
/**
115125
* Enable query only if result is requested
116126
*/

0 commit comments

Comments
 (0)