@astral/mobx-query 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DataStorage/DataStorage.d.ts +1 -1
- package/InfiniteQuery/InfiniteQuery.d.ts +6 -2
- package/InfiniteQuery/InfiniteQuery.js +9 -0
- package/MobxQuery/MobxQuery.d.ts +7 -4
- package/MobxQuery/MobxQuery.js +6 -3
- package/Mutation/Mutation.d.ts +1 -1
- package/Query/Query.d.ts +6 -2
- package/Query/Query.js +7 -0
- package/README.md +9 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FetchPolicy, QueryBaseActions, Sync, SyncParams } from '../types';
|
|
2
|
-
import { DataStorage } from '../DataStorage';
|
|
1
|
+
import type { FetchPolicy, QueryBaseActions, Sync, SyncParams } from '../types';
|
|
2
|
+
import type { DataStorage } from '../DataStorage';
|
|
3
3
|
export declare const DEFAULT_INFINITE_ITEMS_COUNT = 30;
|
|
4
4
|
export type InfiniteParams = {
|
|
5
5
|
offset: number;
|
|
@@ -82,6 +82,10 @@ export declare class InfiniteQuery<TResult, TError = void> implements QueryBaseA
|
|
|
82
82
|
* @description обработчик успешного запроса, проверяет что мы достигли предела
|
|
83
83
|
*/
|
|
84
84
|
private submitSuccess;
|
|
85
|
+
/**
|
|
86
|
+
* @description форс метод для установки данных
|
|
87
|
+
*/
|
|
88
|
+
forceUpdate: (data: TResult[]) => void;
|
|
85
89
|
/**
|
|
86
90
|
* @description метод для обогащения параметров текущими значениями для инфинити
|
|
87
91
|
*/
|
|
@@ -46,6 +46,15 @@ export class InfiniteQuery {
|
|
|
46
46
|
this.isEndReached = true;
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
|
+
/**
|
|
50
|
+
* @description форс метод для установки данных
|
|
51
|
+
*/
|
|
52
|
+
this.forceUpdate = (data) => {
|
|
53
|
+
this.offset = 0;
|
|
54
|
+
this.isEndReached = false;
|
|
55
|
+
this.auxiliary.submitSuccess();
|
|
56
|
+
this.submitSuccess(data);
|
|
57
|
+
};
|
|
49
58
|
/**
|
|
50
59
|
* @description метод для инвалидации данных
|
|
51
60
|
*/
|
package/MobxQuery/MobxQuery.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import type { QueryExecutor, QueryParams } from '../Query';
|
|
2
|
+
import { Query } from '../Query';
|
|
3
|
+
import type { InfiniteExecutor, InfiniteQueryParams } from '../InfiniteQuery';
|
|
4
|
+
import { InfiniteQuery } from '../InfiniteQuery';
|
|
5
|
+
import type { MutationExecutor, MutationParams } from '../Mutation';
|
|
6
|
+
import { Mutation } from '../Mutation';
|
|
7
|
+
import type { CacheKey, FetchPolicy } from '../types';
|
|
5
8
|
/**
|
|
6
9
|
* @description стандартный обработчик ошибки запроса,
|
|
7
10
|
* будет вызван, если при вызове sync не был передан отдельный onError параметр
|
package/MobxQuery/MobxQuery.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Query } from '../Query';
|
|
2
|
-
import { InfiniteQuery
|
|
2
|
+
import { InfiniteQuery } from '../InfiniteQuery';
|
|
3
3
|
import { Mutation } from '../Mutation';
|
|
4
4
|
import { DataStorageFactory } from '../DataStorage';
|
|
5
5
|
/**
|
|
@@ -95,8 +95,11 @@ export class MobxQuery {
|
|
|
95
95
|
*/
|
|
96
96
|
this.createInfiniteQuery = (key, executor, params) => {
|
|
97
97
|
const fetchPolicy = (params === null || params === void 0 ? void 0 : params.fetchPolicy) || this.defaultFetchPolicy || '';
|
|
98
|
-
return this.getCachedQuery(key, () =>
|
|
99
|
-
|
|
98
|
+
return this.getCachedQuery(key, () => {
|
|
99
|
+
var _a;
|
|
100
|
+
return new InfiniteQuery(executor, Object.assign(Object.assign({}, params), { onError: ((params === null || params === void 0 ? void 0 : params.onError) ||
|
|
101
|
+
this.defaultErrorHandler), enabledAutoFetch: (_a = params === null || params === void 0 ? void 0 : params.enabledAutoFetch) !== null && _a !== void 0 ? _a : this.defaultEnabledAutoFetch, dataStorage: this.infiniteQueryDataStorageFactory.getStorage(key), fetchPolicy: fetchPolicy }));
|
|
102
|
+
}, fetchPolicy);
|
|
100
103
|
};
|
|
101
104
|
/**
|
|
102
105
|
* @description метод создания мутации, не кешируется
|
package/Mutation/Mutation.d.ts
CHANGED
package/Query/Query.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FetchPolicy, QueryBaseActions, Sync, SyncParams } from '../types';
|
|
2
|
-
import { DataStorage } from '../DataStorage';
|
|
1
|
+
import type { FetchPolicy, QueryBaseActions, Sync, SyncParams } from '../types';
|
|
2
|
+
import type { DataStorage } from '../DataStorage';
|
|
3
3
|
/**
|
|
4
4
|
* @description исполнитель запроса
|
|
5
5
|
*/
|
|
@@ -68,6 +68,10 @@ export declare class Query<TResult, TError = void> implements QueryBaseActions<T
|
|
|
68
68
|
* @description обработчик успешного ответа
|
|
69
69
|
*/
|
|
70
70
|
private submitSuccess;
|
|
71
|
+
/**
|
|
72
|
+
* @description форс метод для установки данных
|
|
73
|
+
*/
|
|
74
|
+
forceUpdate: (data: TResult) => void;
|
|
71
75
|
/**
|
|
72
76
|
* @description метод для переиспользования синхронной логики запроса
|
|
73
77
|
*/
|
package/Query/Query.js
CHANGED
|
@@ -38,6 +38,13 @@ export class Query {
|
|
|
38
38
|
this.isInvalid = false;
|
|
39
39
|
return resData;
|
|
40
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* @description форс метод для установки данных
|
|
43
|
+
*/
|
|
44
|
+
this.forceUpdate = (data) => {
|
|
45
|
+
this.auxiliary.submitSuccess();
|
|
46
|
+
this.submitSuccess(data);
|
|
47
|
+
};
|
|
41
48
|
/**
|
|
42
49
|
* @description метод для переиспользования синхронной логики запроса
|
|
43
50
|
*/
|
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
- [Автоматический](#3-автоматический)
|
|
20
20
|
- [Инвалидация данных](#инвалидация-данных)
|
|
21
21
|
- [Особенности инвалидации](#особенности-инвалидации)
|
|
22
|
+
- [Ручная установка данных в кэш](#ручная-установка-данных-в-кэш)
|
|
22
23
|
- [InfiniteQuery](#infinitequery)
|
|
23
24
|
- [isEndReached](#isendreached)
|
|
24
25
|
- [Mutation](#mutation)
|
|
@@ -180,6 +181,14 @@ mobxQuery.invalidate(['key one']); // ключ не совпадает, query Н
|
|
|
180
181
|
mobxQuery.invalidateQueries();
|
|
181
182
|
```
|
|
182
183
|
|
|
184
|
+
# Ручная установка данных в кэш
|
|
185
|
+
|
|
186
|
+
Для установки данных, без исполнения executor, используйте метод `forceUpdate`. При вызове все статусные флаги устанавливаются как success состояние
|
|
187
|
+
|
|
188
|
+
```ts
|
|
189
|
+
query.forceUpdate('foo');
|
|
190
|
+
```
|
|
191
|
+
|
|
183
192
|
# InfiniteQuery
|
|
184
193
|
Существует необходимость постепенного запроса массивов данных, в постраничном режиме. Типичный пример, инфинити скролл, когда новая пачка данных запрашивается, в момент когда пользователь докрутил список до конца.
|
|
185
194
|
Для удобства, мы создали специальный `query`, который содержит дополнительный метод `fetchMore` и при вызове оного, происходит запрос с увеличенными счетчиками. Данные ответа на этот запрос, будут сконкатенированы с уже имеющимся. В случае, если количество данных меньше, чем длина страницы, будет считаться что мы дошли до конца списка.
|