@astral/mobx-query 1.5.0 → 1.6.0
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/AdaptableMap/AdaptableMap.d.ts +29 -0
- package/AdaptableMap/AdaptableMap.js +77 -0
- package/AdaptableMap/index.d.ts +1 -0
- package/AdaptableMap/index.js +1 -0
- package/AuxiliaryQuery/AuxiliaryQuery.d.ts +10 -10
- package/AuxiliaryQuery/AuxiliaryQuery.js +8 -8
- package/DataStorage/DataStorage.d.ts +8 -9
- package/DataStorage/DataStorage.js +9 -9
- package/InfiniteQuery/InfiniteQuery.d.ts +38 -25
- package/InfiniteQuery/InfiniteQuery.js +16 -13
- package/MobxQuery/MobxQuery.d.ts +34 -23
- package/MobxQuery/MobxQuery.js +84 -55
- package/Mutation/Mutation.d.ts +6 -6
- package/Mutation/Mutation.js +3 -3
- package/Query/Query.d.ts +32 -19
- package/Query/Query.js +12 -9
- package/QueryContainer/QueryContainer.d.ts +8 -8
- package/QueryContainer/QueryContainer.js +8 -8
- package/README.md +3 -3
- package/StatusStorage/StatusStorage.d.ts +5 -6
- package/StatusStorage/StatusStorage.js +6 -6
- package/StorageFactory/StorageFactory.d.ts +4 -8
- package/StorageFactory/StorageFactory.js +10 -10
- package/package.json +1 -1
- package/types.d.ts +1 -1
|
@@ -13,27 +13,27 @@ export declare abstract class QueryContainer<TError, TAuxiliary extends QueryCon
|
|
|
13
13
|
protected readonly auxiliary: TAuxiliary;
|
|
14
14
|
protected constructor(statusStorage: StatusStorage<TError>, backgroundStatusStorage: StatusStorage<TError> | null, auxiliary: TAuxiliary);
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Флаг загрузки данных
|
|
17
17
|
*/
|
|
18
18
|
get isLoading(): boolean;
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Флаг обозначающий, что последний запрос был зафейлен
|
|
21
21
|
*/
|
|
22
22
|
get isError(): boolean;
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* Данные о последней ошибке
|
|
25
25
|
*/
|
|
26
26
|
get error(): TError | undefined;
|
|
27
27
|
/**
|
|
28
|
-
*
|
|
28
|
+
* Флаг обозначающий, что последний запрос был успешно завершен
|
|
29
29
|
*/
|
|
30
30
|
get isSuccess(): boolean;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Флаг, обозначающий простаивание, т.е. запроса еще не было
|
|
33
33
|
*/
|
|
34
34
|
get isIdle(): boolean;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* Статусы, изменяющиеся после первого успешного запроса в режиме isBackground: true
|
|
37
37
|
* @example
|
|
38
38
|
* const query = mobxQuery.createQuery(
|
|
39
39
|
* ['some cache key'],
|
|
@@ -50,8 +50,8 @@ export declare abstract class QueryContainer<TError, TAuxiliary extends QueryCon
|
|
|
50
50
|
* console.log(query.isLoading); // не изменялся
|
|
51
51
|
* console.log(query.isSuccess); // остался неизменным - true
|
|
52
52
|
*
|
|
53
|
-
* console.log(query.
|
|
54
|
-
* console.log(query.
|
|
53
|
+
* console.log(query.background.isLoading); // переключался в true на момент обновления
|
|
54
|
+
* console.log(query.background.isSuccess); // true
|
|
55
55
|
*
|
|
56
56
|
* @exception isBackground:false (а так же по умолчанию) background не доступен, и равен null
|
|
57
57
|
* @exception Mutation не доступен в мутации и равен null
|
|
@@ -17,37 +17,37 @@ export class QueryContainer {
|
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Флаг загрузки данных
|
|
21
21
|
*/
|
|
22
22
|
get isLoading() {
|
|
23
23
|
return this.statusStorage.isLoading;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Флаг обозначающий, что последний запрос был зафейлен
|
|
27
27
|
*/
|
|
28
28
|
get isError() {
|
|
29
29
|
return this.statusStorage.isError;
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Данные о последней ошибке
|
|
33
33
|
*/
|
|
34
34
|
get error() {
|
|
35
35
|
return this.statusStorage.error;
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* Флаг обозначающий, что последний запрос был успешно завершен
|
|
39
39
|
*/
|
|
40
40
|
get isSuccess() {
|
|
41
41
|
return this.statusStorage.isSuccess;
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
|
-
*
|
|
44
|
+
* Флаг, обозначающий простаивание, т.е. запроса еще не было
|
|
45
45
|
*/
|
|
46
46
|
get isIdle() {
|
|
47
47
|
return this.auxiliary.isIdle;
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
|
-
*
|
|
50
|
+
* Статусы, изменяющиеся после первого успешного запроса в режиме isBackground: true
|
|
51
51
|
* @example
|
|
52
52
|
* const query = mobxQuery.createQuery(
|
|
53
53
|
* ['some cache key'],
|
|
@@ -64,8 +64,8 @@ export class QueryContainer {
|
|
|
64
64
|
* console.log(query.isLoading); // не изменялся
|
|
65
65
|
* console.log(query.isSuccess); // остался неизменным - true
|
|
66
66
|
*
|
|
67
|
-
* console.log(query.
|
|
68
|
-
* console.log(query.
|
|
67
|
+
* console.log(query.background.isLoading); // переключался в true на момент обновления
|
|
68
|
+
* console.log(query.background.isSuccess); // true
|
|
69
69
|
*
|
|
70
70
|
* @exception isBackground:false (а так же по умолчанию) background не доступен, и равен null
|
|
71
71
|
* @exception Mutation не доступен в мутации и равен null
|
package/README.md
CHANGED
|
@@ -345,7 +345,7 @@ console.log(query.error); // 'foo'
|
|
|
345
345
|
## Режим фонового обновления
|
|
346
346
|
`Query` и `InfiniteQuery` имеют режим фонового обновления. Предполагается, что будет хорошо подходить для обновления данных через websocket.
|
|
347
347
|
|
|
348
|
-
В этом режиме, основные статусные флаги `isSuccess`, `isLoading`, `isError`, `error` будут изменяться до первого успешного запроса. Последующие запросы уже будут изменять статусные флаги под полем `
|
|
348
|
+
В этом режиме, основные статусные флаги `isSuccess`, `isLoading`, `isError`, `error` будут изменяться до первого успешного запроса. Последующие запросы уже будут изменять статусные флаги под полем `background`
|
|
349
349
|
|
|
350
350
|
```ts
|
|
351
351
|
const query = mobxQuery.createQuery(
|
|
@@ -363,8 +363,8 @@ await query.async();
|
|
|
363
363
|
console.log(query.isLoading); // не изменялся
|
|
364
364
|
console.log(query.isSuccess); // остался неизменным - true
|
|
365
365
|
|
|
366
|
-
console.log(query.
|
|
367
|
-
console.log(query.
|
|
366
|
+
console.log(query.background.isLoading); // переключался в true на момент обновления
|
|
367
|
+
console.log(query.background.isSuccess); // true
|
|
368
368
|
```
|
|
369
369
|
|
|
370
370
|
# Тестирование
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import { StorageFactory } from '../StorageFactory';
|
|
2
|
-
import { type CacheKey } from '../types';
|
|
3
2
|
export declare class StatusStorage<TError> {
|
|
4
3
|
constructor();
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
5
|
+
* Флаг обозначающий загрузку данных
|
|
7
6
|
*/
|
|
8
7
|
isLoading: boolean;
|
|
9
8
|
/**
|
|
10
|
-
*
|
|
9
|
+
* Флаг обозначающий, что последний запрос был зафейлен
|
|
11
10
|
*/
|
|
12
11
|
isError: boolean;
|
|
13
12
|
/**
|
|
14
|
-
*
|
|
13
|
+
* Данные о последней ошибке
|
|
15
14
|
*/
|
|
16
15
|
error?: TError;
|
|
17
16
|
/**
|
|
18
|
-
*
|
|
17
|
+
* Флаг, обозначающий успешность завершения последнего запроса
|
|
19
18
|
*/
|
|
20
19
|
isSuccess: boolean;
|
|
21
20
|
}
|
|
22
21
|
export declare class StatusStorageFactory extends StorageFactory<StatusStorage<void>> {
|
|
23
22
|
constructor();
|
|
24
|
-
getStorage: <TError>(
|
|
23
|
+
getStorage: <TError>(keyHash: string) => StatusStorage<TError>;
|
|
25
24
|
}
|
|
@@ -3,19 +3,19 @@ import { StorageFactory } from '../StorageFactory';
|
|
|
3
3
|
export class StatusStorage {
|
|
4
4
|
constructor() {
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Флаг обозначающий загрузку данных
|
|
7
7
|
*/
|
|
8
8
|
this.isLoading = false;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Флаг обозначающий, что последний запрос был зафейлен
|
|
11
11
|
*/
|
|
12
12
|
this.isError = false;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Данные о последней ошибке
|
|
15
15
|
*/
|
|
16
16
|
this.error = undefined;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Флаг, обозначающий успешность завершения последнего запроса
|
|
19
19
|
*/
|
|
20
20
|
this.isSuccess = false;
|
|
21
21
|
makeObservable(this, {
|
|
@@ -29,8 +29,8 @@ export class StatusStorage {
|
|
|
29
29
|
export class StatusStorageFactory extends StorageFactory {
|
|
30
30
|
constructor() {
|
|
31
31
|
super(() => new StatusStorage());
|
|
32
|
-
this.getStorage = (
|
|
33
|
-
return this.getInternalStorage(
|
|
32
|
+
this.getStorage = (keyHash) => {
|
|
33
|
+
return this.getInternalStorage(keyHash);
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
export declare abstract class StorageFactory<TStorage> {
|
|
1
|
+
export declare abstract class StorageFactory<TStorage extends {}> {
|
|
3
2
|
private readonly createStorage;
|
|
3
|
+
private readonly adaptableMap;
|
|
4
4
|
protected constructor(createStorage: () => TStorage);
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Фабричный метод получения/создания инстанса хранилища по ключу
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* фабричный метод получения/создания инстанса хранилища по ключу
|
|
11
|
-
*/
|
|
12
|
-
protected getInternalStorage: (key: CacheKey[]) => TStorage | undefined;
|
|
8
|
+
getInternalStorage: (keyHash: string) => TStorage;
|
|
13
9
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
+
import { AdaptableMap } from '../AdaptableMap';
|
|
1
2
|
export class StorageFactory {
|
|
2
3
|
constructor(createStorage) {
|
|
3
4
|
this.createStorage = createStorage;
|
|
5
|
+
this.adaptableMap = new AdaptableMap();
|
|
4
6
|
/**
|
|
5
|
-
*
|
|
7
|
+
* Фабричный метод получения/создания инстанса хранилища по ключу
|
|
6
8
|
*/
|
|
7
|
-
this.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (!this.storageMap.has(keyHash)) {
|
|
14
|
-
this.storageMap.set(keyHash, this.createStorage());
|
|
9
|
+
this.getInternalStorage = (keyHash) => {
|
|
10
|
+
const storage = this.adaptableMap.get(keyHash);
|
|
11
|
+
if (!storage) {
|
|
12
|
+
const createdStorage = this.createStorage();
|
|
13
|
+
this.adaptableMap.set(keyHash, createdStorage);
|
|
14
|
+
return createdStorage;
|
|
15
15
|
}
|
|
16
|
-
return
|
|
16
|
+
return storage;
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
}
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export type QueryBaseActions<TResult, TError, TExecutorParams = void> = {
|
|
|
44
44
|
/**
|
|
45
45
|
* политика получения данных.
|
|
46
46
|
* @enum cache-first - данные сначала берутся из кеша, если их нет, тогда идет обращение к сети, ответ записывается в кэш
|
|
47
|
-
* @enum network-only - данные всегда
|
|
47
|
+
* @enum network-only - данные всегда берутся из сети, при этом ответ записывается в кэш
|
|
48
48
|
*/
|
|
49
49
|
export type FetchPolicy = 'network-only' | 'cache-first';
|
|
50
50
|
/**
|