@zajno/common 1.5.2 → 1.5.5
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/coverage/clover.xml +134 -119
- package/coverage/coverage-final.json +5 -5
- package/coverage/lcov-report/async/index.html +1 -1
- package/coverage/lcov-report/async/timeout.ts.html +12 -12
- package/coverage/lcov-report/index.html +36 -36
- package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
- package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
- package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
- package/coverage/lcov-report/src/async/index.html +1 -1
- package/coverage/lcov-report/src/async/timeout.ts.html +10 -10
- package/coverage/lcov-report/src/cache.ts.html +1 -1
- package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
- package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
- package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
- package/coverage/lcov-report/src/dates/format.ts.html +1 -1
- package/coverage/lcov-report/src/dates/index.html +1 -1
- package/coverage/lcov-report/src/dates/index.ts.html +1 -1
- package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
- package/coverage/lcov-report/src/dates/period.ts.html +1 -1
- package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
- package/coverage/lcov-report/src/dates/types.ts.html +1 -1
- package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
- package/coverage/lcov-report/src/disposer.ts.html +1 -1
- package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
- package/coverage/lcov-report/src/event.ts.html +1 -1
- package/coverage/lcov-report/src/fields/index.html +14 -14
- package/coverage/lcov-report/src/fields/update.ts.html +40 -19
- package/coverage/lcov-report/src/functions.ts.html +1 -1
- package/coverage/lcov-report/src/index.html +19 -19
- package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
- package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
- package/coverage/lcov-report/src/logger/console.ts.html +1 -1
- package/coverage/lcov-report/src/logger/index.html +1 -1
- package/coverage/lcov-report/src/logger/index.ts.html +1 -1
- package/coverage/lcov-report/src/logger/named.ts.html +1 -1
- package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
- package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
- package/coverage/lcov-report/src/math/calc.ts.html +1 -1
- package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
- package/coverage/lcov-report/src/math/index.html +1 -1
- package/coverage/lcov-report/src/math/index.ts.html +1 -1
- package/coverage/lcov-report/src/observersMap.ts.html +1 -1
- package/coverage/lcov-report/src/observingCache.ts.html +27 -12
- package/coverage/lcov-report/src/tempoCache.ts.html +1 -1
- package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
- package/coverage/lcov-report/src/types.ts.html +1 -1
- package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
- package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
- package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
- package/coverage/lcov-report/src/validation/index.html +1 -1
- package/coverage/lcov-report/src/validation/index.ts.html +1 -1
- package/coverage/lcov-report/src/validation/types.ts.html +1 -1
- package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
- package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +106 -34
- package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +13 -13
- package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/TextModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/index.html +19 -19
- package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
- package/coverage/lcov-report/validation/index.html +1 -1
- package/coverage/lcov-report/validation/index.ts.html +6 -6
- package/coverage/lcov-report/viewModels/CommonModel.ts.html +1 -1
- package/coverage/lcov-report/viewModels/LoadingModel.ts.html +129 -21
- package/coverage/lcov-report/viewModels/SelectModel.ts.html +54 -21
- package/coverage/lcov-report/viewModels/TextModel.ts.html +1 -1
- package/coverage/lcov-report/viewModels/index.html +23 -83
- package/coverage/lcov.info +308 -266
- package/lib/fields/update.d.ts +5 -4
- package/lib/fields/update.d.ts.map +1 -1
- package/lib/fields/update.js +13 -7
- package/lib/fields/update.js.map +1 -1
- package/lib/observingCache.d.ts +1 -1
- package/lib/observingCache.d.ts.map +1 -1
- package/lib/observingCache.js +8 -2
- package/lib/observingCache.js.map +1 -1
- package/lib/viewModels/LoadingModel.d.ts +12 -3
- package/lib/viewModels/LoadingModel.d.ts.map +1 -1
- package/lib/viewModels/LoadingModel.js +33 -16
- package/lib/viewModels/LoadingModel.js.map +1 -1
- package/lib/viewModels/types.d.ts +4 -1
- package/lib/viewModels/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/fields/update.ts +18 -11
- package/src/observingCache.ts +7 -2
- package/src/viewModels/LoadingModel.ts +41 -17
- package/src/viewModels/__tests__/common.test.ts +27 -8
- package/src/viewModels/types.ts +5 -1
package/lib/fields/update.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare function updateField<T>(target: T, source: Partial<T>, diff: Part
|
|
|
9
9
|
export declare function updateFieldExtended<T>(target: T, source: Partial<T>, diff: Partial<T>, get: Fields.Getter<T>, set: Fields.Setter<T>, hasChanged?: null | Fields.Comparer<T>): boolean;
|
|
10
10
|
export declare type UpdateArrayOptions<T> = {
|
|
11
11
|
additive?: boolean;
|
|
12
|
+
unshift?: boolean;
|
|
12
13
|
clone?: boolean;
|
|
13
14
|
comparator?: Comparator<T>;
|
|
14
15
|
updater?: Fields.Updater<T>;
|
|
@@ -16,11 +17,11 @@ export declare type UpdateArrayOptions<T> = {
|
|
|
16
17
|
hooks?: UpdateArrayHooks<T>;
|
|
17
18
|
};
|
|
18
19
|
export declare type UpdateArrayHooks<T> = {
|
|
19
|
-
onAdded?: (item: T) => void;
|
|
20
|
-
onDeleted?: (item: T) => void;
|
|
21
|
-
onUpdated?: (previous: T, next: T) => void;
|
|
20
|
+
onAdded?: (item: T, index?: number) => void;
|
|
21
|
+
onDeleted?: (item: T, index?: number) => void;
|
|
22
|
+
onUpdated?: (previous: T, next: T, index?: number) => void;
|
|
22
23
|
};
|
|
23
|
-
export declare function updateArray<T>(target: T[] | null, source: T[], options?: UpdateArrayOptions<T>): {
|
|
24
|
+
export declare function updateArray<T>(target: T[] | null, source: T[] | null, options?: UpdateArrayOptions<T>): {
|
|
24
25
|
changed: number;
|
|
25
26
|
result: T[];
|
|
26
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,yBAAiB,MAAM,CAAC;IACpB,KAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,KAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,KAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAC9E,KAAY,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;CACxD;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,GAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAQ,GAAG,OAAO,CAEnJ;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EACrB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EACrB,UAAU,GAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAQ,GAC7C,OAAO,CAcT;AAKD,oBAAY,kBAAkB,CAAC,CAAC,IAAI;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,oBAAY,gBAAgB,CAAC,CAAC,IAAI;IAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,yBAAiB,MAAM,CAAC;IACpB,KAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,KAAY,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;IACnE,KAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAC9E,KAAY,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;CACxD;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,GAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAQ,GAAG,OAAO,CAEnJ;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EACrB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EACrB,UAAU,GAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAQ,GAC7C,OAAO,CAcT;AAKD,oBAAY,kBAAkB,CAAC,CAAC,IAAI;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,oBAAY,gBAAgB,CAAC,CAAC,IAAI;IAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF,wBAAgB,WAAW,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAClB,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAClB,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAChC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,CAAA;CAAE,CA8DlC"}
|
package/lib/fields/update.js
CHANGED
|
@@ -39,26 +39,32 @@ function updateArray(target, source, options) {
|
|
|
39
39
|
if (source.find(item => comparator(item, result[i])) == null) {
|
|
40
40
|
// DELETE
|
|
41
41
|
const removed = result.splice(i, 1);
|
|
42
|
-
functions_1.safeCall(onDeleted, removed[0]);
|
|
42
|
+
functions_1.safeCall(onDeleted, removed[0], i);
|
|
43
43
|
++changed;
|
|
44
44
|
--i;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
+
const unshift = (options === null || options === void 0 ? void 0 : options.unshift) || false;
|
|
48
49
|
// add all new elements and update existing
|
|
49
|
-
source.forEach(
|
|
50
|
-
const existingIndex = result.findIndex(
|
|
50
|
+
source.forEach(item => {
|
|
51
|
+
const existingIndex = result.findIndex(i => comparator(item, i));
|
|
51
52
|
const existingItem = result[existingIndex];
|
|
52
53
|
if (existingIndex < 0) {
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
if (unshift) {
|
|
55
|
+
result.unshift(item);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
result.push(item);
|
|
59
|
+
}
|
|
60
|
+
functions_1.safeCall(onAdded, item, unshift ? 0 : result.length - 1);
|
|
55
61
|
++changed;
|
|
56
62
|
}
|
|
57
63
|
else if (typeof existingItem === 'object') {
|
|
58
64
|
const before = onUpdate != null ? { ...existingItem } : undefined;
|
|
59
|
-
result[existingIndex] = updater(existingItem,
|
|
65
|
+
result[existingIndex] = updater(existingItem, item);
|
|
60
66
|
if (onUpdate != null) {
|
|
61
|
-
onUpdate(before, result[existingIndex]);
|
|
67
|
+
onUpdate(before, result[existingIndex], existingIndex);
|
|
62
68
|
}
|
|
63
69
|
}
|
|
64
70
|
});
|
package/lib/fields/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":";;;AAAA,4CAAwC;AAWxC,SAAgB,WAAW,CAAI,MAAS,EAAE,MAAkB,EAAE,IAAgB,EAAE,GAAY,EAAE,aAAwC,IAAI;IACtI,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AACpG,CAAC;AAFD,kCAEC;AAED,SAAgB,mBAAmB,CAC/B,MAAS,EACT,MAAkB,EAClB,IAAgB,EAChB,GAAqB,EACrB,GAAqB,EACrB,aAAwC,IAAI;IAG5C,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC,EAAK,EAAE,EAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErE,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACzD,OAAO,GAAG,IAAI,CAAC;QACf,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACvB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;KAC5B;IAED,OAAO,OAAO,CAAC;AAEnB,CAAC;AArBD,kDAqBC;AAED,MAAM,iBAAiB,GAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AACjE,MAAM,cAAc,GAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/fields/update.ts"],"names":[],"mappings":"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"}
|
package/lib/observingCache.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare class ObservingCache<T> extends Disposable implements IObservingC
|
|
|
21
21
|
useUpdater(updater: Fields.Updater<T>): this;
|
|
22
22
|
getIsCached(key: string): boolean;
|
|
23
23
|
getCurent(key: string): T;
|
|
24
|
-
get(key: string, overrideStrategy?: ObserveStrategy): DeferredGetter<T>;
|
|
24
|
+
get(key: string, overrideStrategy?: ObserveStrategy, observingStartedPromise?: (p: Promise<void>) => void): DeferredGetter<T>;
|
|
25
25
|
populate: (key: string, item: T) => void;
|
|
26
26
|
invalidate: (key: string) => void;
|
|
27
27
|
private _fetch;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observingCache.d.ts","sourceRoot":"","sources":["../src/observingCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAgB,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"observingCache.d.ts","sourceRoot":"","sources":["../src/observingCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAgB,cAAc,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,oBAAY,KAAK,GAAG,MAAM,IAAI,CAAC;AAC/B,oBAAY,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvG,aAAK,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,eAAe,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACvC;AAED,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,UAAW,YAAW,eAAe,CAAC,CAAC,CAAC;IAU/D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IARxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAE1C,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAwC;IAElF,OAAO,CAAC,QAAQ,CAA2B;gBAEtB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IASxC,IAAW,YAAY,WAAoC;IAC3D,IAAW,cAAc,WAAoC;IAE7D,oBAAoB,CAAC,OAAO,EAAE,eAAe;IAa7C,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAMrC,WAAW,CAAC,GAAG,EAAE,MAAM;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM;IAIrB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,eAAe,EAAE,uBAAuB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC;IAuB7H,QAAQ,QAAS,MAAM,QAAQ,CAAC,UAE9B;IAEF,UAAU,QAAS,MAAM,UAGvB;IAEF,OAAO,CAAC,MAAM,CAwBZ;IAEF,OAAO,CAAC,UAAU,CAIhB;IAEF,OAAO,CAAC,WAAW,CAYhB;CACN"}
|
package/lib/observingCache.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ObservingCache = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const mobx_1 = require("mobx");
|
|
5
6
|
const disposer_1 = require("./disposer");
|
|
6
7
|
const cache_1 = require("./cache");
|
|
7
8
|
const observersMap_1 = require("./observersMap");
|
|
9
|
+
const logger_1 = tslib_1.__importDefault(require("./logger"));
|
|
8
10
|
class ObservingCache extends disposer_1.Disposable {
|
|
9
11
|
constructor(fetcher) {
|
|
10
12
|
super();
|
|
@@ -89,7 +91,7 @@ class ObservingCache extends disposer_1.Disposable {
|
|
|
89
91
|
getCurent(key) {
|
|
90
92
|
return this._cache.getCurrent(key, false);
|
|
91
93
|
}
|
|
92
|
-
get(key, overrideStrategy) {
|
|
94
|
+
get(key, overrideStrategy, observingStartedPromise) {
|
|
93
95
|
if (overrideStrategy !== undefined) {
|
|
94
96
|
this._observeStrategyOverrides[key] = overrideStrategy;
|
|
95
97
|
}
|
|
@@ -99,7 +101,11 @@ class ObservingCache extends disposer_1.Disposable {
|
|
|
99
101
|
if (this._cache.hasKey(key)) {
|
|
100
102
|
// the request has been initiated already
|
|
101
103
|
const timeout = getObserveTimeout(strategy);
|
|
102
|
-
this._observers.enable(key, true, timeout);
|
|
104
|
+
const promise = this._observers.enable(key, true, timeout);
|
|
105
|
+
if (observingStartedPromise) {
|
|
106
|
+
observingStartedPromise(promise);
|
|
107
|
+
}
|
|
108
|
+
promise.catch(err => logger_1.default.error('[ObservingCache] Error on starting observe', key, strategy, err));
|
|
103
109
|
}
|
|
104
110
|
}
|
|
105
111
|
return this._cache.getDeferred(key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observingCache.js","sourceRoot":"","sources":["../src/observingCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observingCache.js","sourceRoot":"","sources":["../src/observingCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class LoadingModel
|
|
1
|
+
import { IResetableModel, IValueModel } from './types';
|
|
2
|
+
export declare class LoadingModel implements IValueModel<boolean>, IResetableModel {
|
|
3
|
+
private readonly _number;
|
|
3
4
|
get isLoading(): boolean;
|
|
5
|
+
get value(): boolean;
|
|
6
|
+
set value(v: boolean);
|
|
4
7
|
useLoading<T>(cb: () => (T | Promise<T>)): Promise<T>;
|
|
5
8
|
useLoading<T>(cb: () => (T | Promise<T>), exclusive: false): Promise<T>;
|
|
6
|
-
useLoading<T>(cb: () => (T | Promise<T>), exclusive: true
|
|
9
|
+
useLoading<T>(cb: () => (T | Promise<T>), exclusive: true): Promise<T | false>;
|
|
10
|
+
useLoading<T>(cb: () => (T | Promise<T>), exclusive: 'throw'): Promise<T>;
|
|
11
|
+
reset: () => void;
|
|
7
12
|
}
|
|
13
|
+
export declare function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>)): Promise<T>;
|
|
14
|
+
export declare function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>), exclusive: false): Promise<T>;
|
|
15
|
+
export declare function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>), exclusive: true): Promise<T | false>;
|
|
16
|
+
export declare function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>), exclusive: 'throw'): Promise<T>;
|
|
8
17
|
//# sourceMappingURL=LoadingModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/LoadingModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LoadingModel.d.ts","sourceRoot":"","sources":["../../src/viewModels/LoadingModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,YAAa,YAAW,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe;IAEtE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C,IAAW,SAAS,YAAqC;IAEzD,IAAW,KAAK,IAAI,OAAO,CAA2B;IACtD,IAAW,KAAK,CAAC,CAAC,EAAE,OAAO,EAM1B;IAEY,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACrD,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;IACvE,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC;IAC9E,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAM/E,KAAK,aAA8B;CAC7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACpG,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACtH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAC7H,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,25 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LoadingModel = void 0;
|
|
3
|
+
exports.withLoading = exports.LoadingModel = void 0;
|
|
4
4
|
const NumberModel_1 = require("./NumberModel");
|
|
5
|
-
class LoadingModel
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
const res = await cb();
|
|
17
|
-
return res;
|
|
5
|
+
class LoadingModel {
|
|
6
|
+
constructor() {
|
|
7
|
+
this._number = new NumberModel_1.NumberModel(0);
|
|
8
|
+
this.reset = () => this._number.reset();
|
|
9
|
+
}
|
|
10
|
+
get isLoading() { return this._number.value > 0; }
|
|
11
|
+
get value() { return this.isLoading; }
|
|
12
|
+
set value(v) {
|
|
13
|
+
if (v) {
|
|
14
|
+
this._number.increment();
|
|
18
15
|
}
|
|
19
|
-
|
|
20
|
-
this.decrement();
|
|
16
|
+
else {
|
|
17
|
+
this._number.decrement();
|
|
21
18
|
}
|
|
22
19
|
}
|
|
20
|
+
useLoading(cb, exclusive = false) {
|
|
21
|
+
return withLoading(this, cb, exclusive);
|
|
22
|
+
}
|
|
23
23
|
}
|
|
24
24
|
exports.LoadingModel = LoadingModel;
|
|
25
|
+
async function withLoading(model, cb, exclusive = false) {
|
|
26
|
+
if (exclusive && model.value) {
|
|
27
|
+
if (exclusive === 'throw') {
|
|
28
|
+
throw new Error('Operation cannot be started because another one is in progress already.');
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
model.value = true;
|
|
33
|
+
try {
|
|
34
|
+
const res = await cb();
|
|
35
|
+
return res;
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
model.value = false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.withLoading = withLoading;
|
|
25
42
|
//# sourceMappingURL=LoadingModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadingModel.js","sourceRoot":"","sources":["../../src/viewModels/LoadingModel.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;
|
|
1
|
+
{"version":3,"file":"LoadingModel.js","sourceRoot":"","sources":["../../src/viewModels/LoadingModel.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAG5C,MAAa,YAAY;IAAzB;QAEqB,YAAO,GAAG,IAAI,yBAAW,CAAC,CAAC,CAAC,CAAC;QAsBvC,UAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IArBG,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzD,IAAW,KAAK,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,IAAW,KAAK,CAAC,CAAU;QACvB,IAAI,CAAC,EAAE;YACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;SAC5B;aAAM;YACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;SAC5B;IACL,CAAC;IAOM,UAAU,CAAI,EAA0B,EAAE,YAA+B,KAAK;QACjF,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,SAAgB,CAAC,CAAC;IACnD,CAAC;CAGJ;AAzBD,oCAyBC;AAOM,KAAK,UAAU,WAAW,CAAgB,KAA2B,EAAE,EAA0B,EAAE,YAA+B,KAAK;IAC1I,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE;QAC1B,IAAI,SAAS,KAAK,OAAO,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;SAC9F;QACD,OAAO,KAAK,CAAC;KAChB;IAED,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAEnB,IAAI;QACA,MAAM,GAAG,GAAG,MAAM,EAAE,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC;KACd;YAAS;QACN,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;KACvB;AACL,CAAC;AAhBD,kCAgBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/viewModels/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/viewModels/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,mBAAmB,CAAC,MAAM;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW,CAAC,MAAM,CAAE,SAAQ,mBAAmB,CAAC,MAAM,CAAC;IACpE,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC7B"}
|
package/package.json
CHANGED
package/src/fields/update.ts
CHANGED
|
@@ -41,6 +41,7 @@ const DefaultUpdater: Fields.Updater<any> = (v1, v2) => Object.assign(v1, v2);
|
|
|
41
41
|
|
|
42
42
|
export type UpdateArrayOptions<T> = {
|
|
43
43
|
additive?: boolean,
|
|
44
|
+
unshift?: boolean,
|
|
44
45
|
clone?: boolean,
|
|
45
46
|
comparator?: Comparator<T>,
|
|
46
47
|
updater?: Fields.Updater<T>,
|
|
@@ -49,14 +50,14 @@ export type UpdateArrayOptions<T> = {
|
|
|
49
50
|
};
|
|
50
51
|
|
|
51
52
|
export type UpdateArrayHooks<T> = {
|
|
52
|
-
onAdded?: (item: T) => void,
|
|
53
|
-
onDeleted?: (item: T) => void,
|
|
54
|
-
onUpdated?: (previous: T, next: T) => void,
|
|
53
|
+
onAdded?: (item: T, index?: number) => void,
|
|
54
|
+
onDeleted?: (item: T, index?: number) => void,
|
|
55
|
+
onUpdated?: (previous: T, next: T, index?: number) => void,
|
|
55
56
|
};
|
|
56
57
|
|
|
57
58
|
export function updateArray<T>(
|
|
58
59
|
target: T[] | null,
|
|
59
|
-
source: T[],
|
|
60
|
+
source: T[] | null,
|
|
60
61
|
options?: UpdateArrayOptions<T>,
|
|
61
62
|
): { changed: number, result: T[] } {
|
|
62
63
|
if (!source) {
|
|
@@ -80,7 +81,7 @@ export function updateArray<T>(
|
|
|
80
81
|
if (source.find(item => comparator(item, result[i])) == null) {
|
|
81
82
|
// DELETE
|
|
82
83
|
const removed = result.splice(i, 1);
|
|
83
|
-
safeCall(onDeleted, removed[0]);
|
|
84
|
+
safeCall(onDeleted, removed[0], i);
|
|
84
85
|
|
|
85
86
|
++changed;
|
|
86
87
|
--i;
|
|
@@ -88,19 +89,25 @@ export function updateArray<T>(
|
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
const unshift = options?.unshift || false;
|
|
93
|
+
|
|
91
94
|
// add all new elements and update existing
|
|
92
|
-
source.forEach(
|
|
93
|
-
const existingIndex = result.findIndex(
|
|
95
|
+
source.forEach(item => {
|
|
96
|
+
const existingIndex = result.findIndex(i => comparator(item, i));
|
|
94
97
|
const existingItem = result[existingIndex];
|
|
95
98
|
if (existingIndex < 0) {
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
if (unshift) {
|
|
100
|
+
result.unshift(item);
|
|
101
|
+
} else {
|
|
102
|
+
result.push(item);
|
|
103
|
+
}
|
|
104
|
+
safeCall(onAdded, item, unshift ? 0 : result.length - 1);
|
|
98
105
|
++changed;
|
|
99
106
|
} else if (typeof existingItem === 'object') {
|
|
100
107
|
const before = onUpdate != null ? { ...existingItem } : undefined;
|
|
101
|
-
result[existingIndex] = updater(existingItem,
|
|
108
|
+
result[existingIndex] = updater(existingItem, item);
|
|
102
109
|
if (onUpdate != null) {
|
|
103
|
-
onUpdate(before!, result[existingIndex]);
|
|
110
|
+
onUpdate(before!, result[existingIndex], existingIndex);
|
|
104
111
|
}
|
|
105
112
|
}
|
|
106
113
|
});
|
package/src/observingCache.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Disposable } from './disposer';
|
|
|
3
3
|
import { PromiseCache, DeferredGetter } from './cache';
|
|
4
4
|
import { ObserversMap } from './observersMap';
|
|
5
5
|
import { Fields } from './fields';
|
|
6
|
+
import logger from './logger';
|
|
6
7
|
|
|
7
8
|
export type Unsub = () => void;
|
|
8
9
|
export type Fetcher<T> = (key: string, cb: (val: T) => Promise<void> | void) => Unsub | Promise<Unsub>;
|
|
@@ -62,7 +63,7 @@ export class ObservingCache<T> extends Disposable implements IObservingCache<T>
|
|
|
62
63
|
return this._cache.getCurrent(key, false);
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
get(key: string, overrideStrategy?: ObserveStrategy): DeferredGetter<T> {
|
|
66
|
+
get(key: string, overrideStrategy?: ObserveStrategy, observingStartedPromise?: (p: Promise<void>) => void): DeferredGetter<T> {
|
|
66
67
|
if (overrideStrategy !== undefined) {
|
|
67
68
|
this._observeStrategyOverrides[key] = overrideStrategy;
|
|
68
69
|
}
|
|
@@ -74,7 +75,11 @@ export class ObservingCache<T> extends Disposable implements IObservingCache<T>
|
|
|
74
75
|
if (this._cache.hasKey(key)) {
|
|
75
76
|
// the request has been initiated already
|
|
76
77
|
const timeout = getObserveTimeout(strategy);
|
|
77
|
-
this._observers.enable(key, true, timeout);
|
|
78
|
+
const promise = this._observers.enable(key, true, timeout);
|
|
79
|
+
if (observingStartedPromise) {
|
|
80
|
+
observingStartedPromise(promise);
|
|
81
|
+
}
|
|
82
|
+
promise.catch(err => logger.error('[ObservingCache] Error on starting observe', key, strategy, err));
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
85
|
|
|
@@ -1,28 +1,52 @@
|
|
|
1
1
|
import { NumberModel } from './NumberModel';
|
|
2
|
+
import { IResetableModel, IValueModel } from './types';
|
|
2
3
|
|
|
3
|
-
export class LoadingModel
|
|
4
|
+
export class LoadingModel implements IValueModel<boolean>, IResetableModel {
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
private readonly _number = new NumberModel(0);
|
|
7
|
+
|
|
8
|
+
public get isLoading() { return this._number.value > 0; }
|
|
9
|
+
|
|
10
|
+
public get value(): boolean { return this.isLoading; }
|
|
11
|
+
public set value(v: boolean) {
|
|
12
|
+
if (v) {
|
|
13
|
+
this._number.increment();
|
|
14
|
+
} else {
|
|
15
|
+
this._number.decrement();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
6
18
|
|
|
7
19
|
public async useLoading<T>(cb: () => (T | Promise<T>)): Promise<T>;
|
|
8
20
|
public async useLoading<T>(cb: () => (T | Promise<T>), exclusive: false): Promise<T>;
|
|
9
|
-
public async useLoading<T>(cb: () => (T | Promise<T>), exclusive: true
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
public async useLoading<T>(cb: () => (T | Promise<T>), exclusive: true): Promise<T | false>;
|
|
22
|
+
public async useLoading<T>(cb: () => (T | Promise<T>), exclusive: 'throw'): Promise<T>;
|
|
23
|
+
|
|
24
|
+
public useLoading<T>(cb: () => (T | Promise<T>), exclusive: boolean | 'throw' = false): Promise<T | false> {
|
|
25
|
+
return withLoading(this, cb, exclusive as any);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public reset = () => this._number.reset();
|
|
29
|
+
}
|
|
18
30
|
|
|
19
|
-
|
|
31
|
+
export function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>)): Promise<T>;
|
|
32
|
+
export function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>), exclusive: false): Promise<T>;
|
|
33
|
+
export function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>), exclusive: true): Promise<T | false>;
|
|
34
|
+
export function withLoading<T>(model: IValueModel<boolean>, cb: () => (T | Promise<T>), exclusive: 'throw'): Promise<T>;
|
|
20
35
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.decrement();
|
|
36
|
+
export async function withLoading<T>(this: void, model: IValueModel<boolean>, cb: () => (T | Promise<T>), exclusive: boolean | 'throw' = false): Promise<T | false> {
|
|
37
|
+
if (exclusive && model.value) {
|
|
38
|
+
if (exclusive === 'throw') {
|
|
39
|
+
throw new Error('Operation cannot be started because another one is in progress already.');
|
|
26
40
|
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
model.value = true;
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const res = await cb();
|
|
48
|
+
return res;
|
|
49
|
+
} finally {
|
|
50
|
+
model.value = false;
|
|
27
51
|
}
|
|
28
52
|
}
|
|
@@ -51,19 +51,18 @@ describe('CommonModel', () => {
|
|
|
51
51
|
});
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
-
describe('LoadingModel', () => {
|
|
54
|
+
describe('LoadingModel works', () => {
|
|
55
|
+
const worker = async () => {
|
|
56
|
+
await setTimeoutAsync(100);
|
|
57
|
+
return 100;
|
|
58
|
+
};
|
|
55
59
|
|
|
56
|
-
it('
|
|
60
|
+
it('basic', async () => {
|
|
57
61
|
|
|
58
62
|
const m = new LoadingModel();
|
|
59
|
-
expect(m.value).toBe(
|
|
63
|
+
expect(m.value).toBe(false);
|
|
60
64
|
expect(m.isLoading).toBeFalsy();
|
|
61
65
|
|
|
62
|
-
const worker = async () => {
|
|
63
|
-
await setTimeoutAsync(100);
|
|
64
|
-
return 100;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
66
|
const promise = m.useLoading(worker);
|
|
68
67
|
expect(m.isLoading).toBeTruthy();
|
|
69
68
|
|
|
@@ -71,6 +70,26 @@ describe('LoadingModel', () => {
|
|
|
71
70
|
|
|
72
71
|
expect(m.isLoading).toBeFalsy();
|
|
73
72
|
});
|
|
73
|
+
|
|
74
|
+
it('with exclusive', async () => {
|
|
75
|
+
const m = new LoadingModel();
|
|
76
|
+
|
|
77
|
+
const first = m.useLoading(worker, true);
|
|
78
|
+
expect(m.isLoading).toBeTruthy();
|
|
79
|
+
|
|
80
|
+
const second = m.useLoading(worker, true);
|
|
81
|
+
expect(m.isLoading).toBeTruthy();
|
|
82
|
+
|
|
83
|
+
await expect(() => m.useLoading(worker, 'throw')).rejects.toThrow();
|
|
84
|
+
|
|
85
|
+
expect(m.isLoading).toBeTruthy();
|
|
86
|
+
|
|
87
|
+
await expect(second).resolves.toBe(false);
|
|
88
|
+
await expect(first).resolves.toBe(100);
|
|
89
|
+
|
|
90
|
+
expect(m.value).toBe(false);
|
|
91
|
+
expect(m.isLoading).toBeFalsy();
|
|
92
|
+
});
|
|
74
93
|
});
|
|
75
94
|
|
|
76
95
|
describe('Others', () => {
|