@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.
@@ -1,4 +1,4 @@
1
- import { CacheKey } from '../types';
1
+ import type { CacheKey } from '../types';
2
2
  /**
3
3
  * @description хранилище данных, предназначено для обеспечения единого интерфейса при работе с данными
4
4
  */
@@ -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
  */
@@ -1,7 +1,10 @@
1
- import { Query, QueryExecutor, QueryParams } from '../Query';
2
- import { InfiniteExecutor, InfiniteQuery, InfiniteQueryParams } from '../InfiniteQuery';
3
- import { Mutation, MutationExecutor, MutationParams } from '../Mutation';
4
- import { CacheKey, FetchPolicy } from '../types';
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 параметр
@@ -1,5 +1,5 @@
1
1
  import { Query } from '../Query';
2
- import { InfiniteQuery, } from '../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, () => new InfiniteQuery(executor, Object.assign(Object.assign({}, params), { onError: ((params === null || params === void 0 ? void 0 : params.onError) ||
99
- this.defaultErrorHandler), enabledAutoFetch: (params === null || params === void 0 ? void 0 : params.enabledAutoFetch) || this.defaultEnabledAutoFetch, dataStorage: this.infiniteQueryDataStorageFactory.getStorage(key), fetchPolicy: fetchPolicy })), fetchPolicy);
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 метод создания мутации, не кешируется
@@ -1,4 +1,4 @@
1
- import { QueryBaseActions, Sync, SyncParams } from '../types';
1
+ import type { QueryBaseActions, Sync, SyncParams } from '../types';
2
2
  /**
3
3
  * @description исполнитель запроса
4
4
  */
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` и при вызове оного, происходит запрос с увеличенными счетчиками. Данные ответа на этот запрос, будут сконкатенированы с уже имеющимся. В случае, если количество данных меньше, чем длина страницы, будет считаться что мы дошли до конца списка.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astral/mobx-query",
3
- "version": "1.2.2",
3
+ "version": "1.3.1",
4
4
  "browser": "./index.js",
5
5
  "main": "./index.js",
6
6
  "dependencies": {