@sumaris-net/ngx-components 1.15.13 → 1.16.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/bundles/sumaris-net.ngx-components.umd.js +105 -62
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +3 -0
- package/esm2015/src/app/admin/services/person.service.js +5 -9
- package/esm2015/src/app/core/services/network.service.js +28 -19
- package/esm2015/src/app/core/services/network.utils.js +2 -2
- package/esm2015/src/app/shared/http/http.utils.js +31 -9
- package/esm2015/src/app/shared/services/job.utils.js +28 -21
- package/fesm2015/sumaris-net.ngx-components.js +88 -53
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/admin/services/person.service.d.ts +2 -1
- package/src/app/core/services/network.service.d.ts +8 -0
- package/src/app/core/services/network.utils.d.ts +1 -0
- package/src/app/shared/http/http.utils.d.ts +13 -1
- package/src/app/shared/services/job.utils.d.ts +4 -2
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { BehaviorSubject, defer } from 'rxjs';
|
|
3
|
-
import { isNil, isNotNil } from '../functions';
|
|
3
|
+
import { isNil, isNotNil, toNumber } from '../functions';
|
|
4
4
|
// @dynamic
|
|
5
5
|
export class JobUtils {
|
|
6
6
|
static defers(runnableList, opts) {
|
|
@@ -11,22 +11,24 @@ export class JobUtils {
|
|
|
11
11
|
}
|
|
12
12
|
static run(runnable, opts) {
|
|
13
13
|
const progression = new BehaviorSubject(0);
|
|
14
|
-
runnable(
|
|
14
|
+
runnable(Object.assign(Object.assign({}, opts), { progression }))
|
|
15
15
|
.then(() => {
|
|
16
|
-
if (opts
|
|
16
|
+
if (opts === null || opts === void 0 ? void 0 : opts.maxProgression)
|
|
17
17
|
progression.next(opts.maxProgression);
|
|
18
|
-
progression
|
|
18
|
+
if (opts === null || opts === void 0 ? void 0 : opts.progression)
|
|
19
|
+
opts.progression.complete();
|
|
19
20
|
})
|
|
20
21
|
.catch(err => progression.error(err));
|
|
21
22
|
return progression;
|
|
22
23
|
}
|
|
23
|
-
static fetchAllPages(loadPageFn,
|
|
24
|
+
static fetchAllPages(loadPageFn, opts) {
|
|
25
|
+
var _a;
|
|
24
26
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
27
|
const maxProgression = opts && opts.maxProgression || undefined;
|
|
26
28
|
let total;
|
|
27
|
-
let
|
|
29
|
+
let pageCount;
|
|
28
30
|
let progressionStep;
|
|
29
|
-
let
|
|
31
|
+
let currentPageDataCount;
|
|
30
32
|
const fetchSize = opts && opts.fetchSize || 1000;
|
|
31
33
|
let offset = 0;
|
|
32
34
|
let data = [];
|
|
@@ -36,37 +38,42 @@ export class JobUtils {
|
|
|
36
38
|
// Get some items, using paging
|
|
37
39
|
const res = yield loadPageFn(offset, fetchSize);
|
|
38
40
|
data = data.concat(res.data);
|
|
39
|
-
|
|
40
|
-
offset +=
|
|
41
|
+
currentPageDataCount = res.data && res.data.length || 0;
|
|
42
|
+
offset += currentPageDataCount;
|
|
41
43
|
// Set total count (only if not already set)
|
|
42
44
|
if (isNil(total) && isNotNil(res.total)) {
|
|
43
45
|
total = res.total;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
// Compute the number of page
|
|
47
|
+
pageCount = Math.round(res.total / fetchSize + 0.5); // Round to HALF_UP integer
|
|
48
|
+
// Compute step, by dividing maxProgression by number of page
|
|
49
|
+
const actualProgression = Math.max(0, toNumber(opts && ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.value), 0));
|
|
50
|
+
progressionStep = maxProgression
|
|
51
|
+
? (maxProgression - actualProgression) / pageCount
|
|
52
|
+
: undefined /*if 0 reset to undefined*/;
|
|
46
53
|
}
|
|
47
54
|
// Increment progression on each iteration (if possible)
|
|
48
|
-
if (isNotNil(progressionStep)) {
|
|
49
|
-
progression.next(progression.
|
|
55
|
+
if (opts && opts.progression && isNotNil(progressionStep)) {
|
|
56
|
+
opts.progression.next(opts.progression.value + progressionStep);
|
|
50
57
|
}
|
|
51
58
|
if (opts && opts.onPageLoaded)
|
|
52
59
|
opts.onPageLoaded(res);
|
|
53
|
-
} while (
|
|
60
|
+
} while (currentPageDataCount > 0 && ((isNil(total) && currentPageDataCount === fetchSize) || (isNotNil(total) && (offset < total))));
|
|
54
61
|
// Complete progression to reach progressionStep value (because of round)
|
|
55
62
|
if (isNotNil(progressionStep)) {
|
|
56
63
|
// If total return by loadAll was bad !
|
|
57
64
|
if (isNotNil(total) && data.length < total) {
|
|
58
65
|
console.warn(`A function loadAll() returned a bad total (less than all page's data)! Expected ${total} but fetch ${data.length}`);
|
|
59
66
|
total = data.length;
|
|
60
|
-
|
|
67
|
+
pageCount = Math.round(data.length / fetchSize + 0.5);
|
|
61
68
|
}
|
|
62
|
-
const lastProgressionStep = opts.maxProgression - (progressionStep *
|
|
63
|
-
if (lastProgressionStep > 0) {
|
|
64
|
-
progression.next(progression.
|
|
69
|
+
const lastProgressionStep = opts.maxProgression - (progressionStep * pageCount);
|
|
70
|
+
if (opts && opts.progression && lastProgressionStep > 0) {
|
|
71
|
+
opts.progression.next(opts.progression.value + lastProgressionStep);
|
|
65
72
|
}
|
|
66
73
|
}
|
|
67
74
|
// Or increment once
|
|
68
|
-
else if (opts.maxProgression) {
|
|
69
|
-
progression.next(
|
|
75
|
+
else if (opts && opts.progression && opts.maxProgression) {
|
|
76
|
+
opts.progression.next(opts.maxProgression);
|
|
70
77
|
}
|
|
71
78
|
return {
|
|
72
79
|
data,
|
|
@@ -75,4 +82,4 @@ export class JobUtils {
|
|
|
75
82
|
});
|
|
76
83
|
}
|
|
77
84
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvam9iLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBc0IsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFTN0MsV0FBVztBQUNYLE1BQU0sT0FBTyxRQUFRO0lBRW5CLE1BQU0sQ0FBQyxNQUFNLENBQTJDLFlBQTRDLEVBQUUsSUFBUTtRQUM1RyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUEyQyxRQUFzQyxFQUFFLElBQVE7UUFDckcsT0FBTyxLQUFLLENBQXFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQTJDLFFBQXNDLEVBQUUsSUFBTztRQUVsRyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuRCxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQzthQUN4QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWM7Z0JBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcs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YyxHQUFHLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLG1CQUFtQixHQUFHLENBQUMsRUFBRTtvQkFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztpQkFDaEU7YUFDRjtZQUNELG9CQUFvQjtpQkFDZixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzVCLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNoRTtZQUVELE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixLQUFLO2FBQ04sQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtMb2FkUmVzdWx0LCBMb2FkUmVzdWx0QnlQYWdlRm59IGZyb20gJy4vZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+ID0gKHByb2dyZXNzaW9uOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiwgb3B0cz86IE8pID0+IFByb21pc2U8dm9pZD47XG5leHBvcnQgaW50ZXJmYWNlIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucyB7XG4gIG1heFByb2dyZXNzaW9uPzogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgSm9iVXRpbHMge1xuXG4gIHN0YXRpYyBkZWZlcnM8TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGVMaXN0OiBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8+W10sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+W10ge1xuICAgIHJldHVybiBydW5uYWJsZUxpc3QubWFwKHJ1bm5hYmxlID0+IEpvYlV0aWxzLmRlZmVyKHJ1bm5hYmxlLCBvcHRzKSk7XG4gIH1cblxuICBzdGF0aWMgZGVmZXI8TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGU6IENhbGxhYmxlV2l0aFByb2dyZXNzaW9uRm48Tz4sIG9wdHM/OiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gZGVmZXI8T2JzZXJ2YWJsZTxudW1iZXI+PigoKSA9PiBKb2JVdGlscy5ydW4ocnVubmFibGUsIG9wdHMpKTtcbiAgfVxuXG4gIHN0YXRpYyBydW48TyBleHRlbmRzIENhbGxhYmxlV2l0aFByb2dyZXNzaW9uT3B0aW9ucz4ocnVubmFibGU6IENhbGxhYmxlV2l0aFByb2dyZXNzaW9uRm48Tz4sIG9wdHM6IE8pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuXG4gICAgY29uc3QgcHJvZ3Jlc3Npb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgcnVubmFibGUocHJvZ3Jlc3Npb24sIG9wdHMpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMubWF4UHJvZ3Jlc3Npb24pIHByb2dyZXNzaW9uLm5leHQob3B0cy5tYXhQcm9ncmVzc2lvbik7XG4gICAgICAgIHByb2dyZXNzaW9uLmNvbXBsZXRlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiBwcm9ncmVzc2lvbi5lcnJvcihlcnIpKTtcbiAgICByZXR1cm4gcHJvZ3Jlc3Npb247XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZmV0Y2hBbGxQYWdlczxUPihcbiAgICBsb2FkUGFnZUZuOiBMb2FkUmVzdWx0QnlQYWdlRm48VD4sXG4gICAgcHJvZ3Jlc3Npb246IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+LFxuICAgIG9wdHM/OiB7XG4gICAgICBtYXhQcm9ncmVzc2lvbj86IG51bWJlcjtcbiAgICAgIG9uUGFnZUxvYWRlZD86IChwYWdlUmVzdWx0OiBMb2FkUmVzdWx0PFQ+KSA9PiBhbnk7XG4gICAgICBsb2dQcmVmaXg/OiBzdHJpbmc7XG4gICAgICBmZXRjaFNpemU/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgY29uc3QgbWF4UHJvZ3Jlc3Npb24gPSBvcHRzICYmIG9wdHMubWF4UHJvZ3Jlc3Npb24gfHwgdW5kZWZpbmVkO1xuICAgIGxldCB0b3RhbDsgbGV0IGxvb3BDb3VudDsgbGV0IHByb2dyZXNzaW9uU3RlcDsgbGV0IGxvb3BEYXRhQ291bnQ6IG51bWJlcjtcbiAgICBjb25zdCBmZXRjaFNpemUgPSBvcHRzICYmIG9wdHMuZmV0Y2hTaXplIHx8IDEwMDA7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IGRhdGE6IFRbXSA9IFtdO1xuICAgIGRvIHtcblxuICAgICAgaWYgKG9wdHMgJiYgb3B0cy5sb2dQcmVmaXgpIGNvbnNvbGUuZGVidWcoYCR7b3B0cy5sb2dQcmVmaXh9IEZldGNoaW5nIHBhZ2UgIyR7b2Zmc2V0IC8gZmV0Y2hTaXplfS4uLmApO1xuXG4gICAgICAvLyBHZXQgc29tZSBpdGVtcywgdXNpbmcgcGFnaW5nXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBsb2FkUGFnZUZuKG9mZnNldCwgZmV0Y2hTaXplKTtcbiAgICAgIGRhdGEgPSBkYXRhLmNvbmNhdChyZXMuZGF0YSk7XG4gICAgICBsb29wRGF0YUNvdW50ID0gcmVzLmRhdGEgJiYgcmVzLmRhdGEubGVuZ3RoIHx8IDA7XG4gICAgICBvZmZzZXQgKz0gbG9vcERhdGFDb3VudDtcblxuICAgICAgLy8gU2V0IHRvdGFsIGNvdW50IChvbmx5IGlmIG5vdCBhbHJlYWR5IHNldClcbiAgICAgIGlmIChpc05pbCh0b3RhbCkgJiYgaXNOb3ROaWwocmVzLnRvdGFsKSkge1xuICAgICAgICB0b3RhbCA9IHJlcy50b3RhbDtcbiAgICAgICAgbG9vcENvdW50ID0gTWF0aC5yb3VuZChyZXMudG90YWwgLyBmZXRjaFNpemUgKyAwLjUpOyAvLyBSb3VuZCB0byBuZXh0IGludGVnZXJcbiAgICAgICAgcHJvZ3Jlc3Npb25TdGVwID0gbWF4UHJvZ3Jlc3Npb24gPyBtYXhQcm9ncmVzc2lvbiAvIGxvb3BDb3VudCA6IHVuZGVmaW5lZCAvKmlmIDAgcmVzZXQgdG8gdW5kZWZpbmVkKi87XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlbWVudCBwcm9ncmVzc2lvbiBvbiBlYWNoIGl0ZXJhdGlvbiAoaWYgcG9zc2libGUpXG4gICAgICBpZiAoaXNOb3ROaWwocHJvZ3Jlc3Npb25TdGVwKSkge1xuICAgICAgICBwcm9ncmVzc2lvbi5uZXh0KHByb2dyZXNzaW9uLmdldFZhbHVlKCkgKyBwcm9ncmVzc2lvblN0ZXApO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cyAmJiBvcHRzLm9uUGFnZUxvYWRlZCkgb3B0cy5vblBhZ2VMb2FkZWQocmVzKTtcblxuICAgIH0gd2hpbGUgKGxvb3BEYXRhQ291bnQgPiAwICYmICgoaXNOaWwodG90YWwpICYmIGxvb3BEYXRhQ291bnQgPT09IGZldGNoU2l6ZSkgfHwgKGlzTm90TmlsKHRvdGFsKSAmJiAob2Zmc2V0IDwgdG90YWwpKSkpO1xuXG4gICAgLy8gQ29tcGxldGUgcHJvZ3Jlc3Npb24gdG8gcmVhY2ggcHJvZ3Jlc3Npb25TdGVwIHZhbHVlIChiZWNhdXNlIG9mIHJvdW5kKVxuICAgIGlmIChpc05vdE5pbChwcm9ncmVzc2lvblN0ZXApKSB7XG5cbiAgICAgIC8vIElmIHRvdGFsIHJldHVybiBieSBsb2FkQWxsIHdhcyBiYWQgIVxuICAgICAgaWYgKGlzTm90TmlsKHRvdGFsKSAmJiBkYXRhLmxlbmd0aCA8IHRvdGFsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQSBmdW5jdGlvbiBsb2FkQWxsKCkgcmV0dXJuZWQgYSBiYWQgdG90YWwgKGxlc3MgdGhhbiBhbGwgcGFnZSdzIGRhdGEpISBFeHBlY3RlZCAke3RvdGFsfSBidXQgZmV0Y2ggJHtkYXRhLmxlbmd0aH1gKTtcbiAgICAgICAgdG90YWwgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgbG9vcENvdW50ID0gTWF0aC5yb3VuZChkYXRhLmxlbmd0aCAvIGZldGNoU2l6ZSArIDAuNSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxhc3RQcm9ncmVzc2lvblN0ZXAgPSBvcHRzLm1heFByb2dyZXNzaW9uIC0gKHByb2dyZXNzaW9uU3RlcCAqIGxvb3BDb3VudCk7XG4gICAgICBpZiAobGFzdFByb2dyZXNzaW9uU3RlcCA+IDApIHtcbiAgICAgICAgcHJvZ3Jlc3Npb24ubmV4dChwcm9ncmVzc2lvbi5nZXRWYWx1ZSgpICsgbGFzdFByb2dyZXNzaW9uU3RlcCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE9yIGluY3JlbWVudCBvbmNlXG4gICAgZWxzZSBpZiAob3B0cy5tYXhQcm9ncmVzc2lvbikge1xuICAgICAgcHJvZ3Jlc3Npb24ubmV4dChwcm9ncmVzc2lvbi5nZXRWYWx1ZSgpICsgb3B0cy5tYXhQcm9ncmVzc2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICB0b3RhbFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvam9iLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFVekQsV0FBVztBQUNYLE1BQU0sT0FBTyxRQUFRO0lBRW5CLE1BQU0sQ0FBQyxNQUFNLENBQTJDLFlBQTRDLEVBQUUsSUFBUTtRQUM1RyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUEyQyxRQUFzQyxFQUFFLElBQVE7UUFDckcsT0FBTyxLQUFLLENBQXFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQTJDLFFBQXNDLEVBQUUsSUFBTztRQUVsRyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuRCxRQUFRLGlDQUFLLElBQUksS0FBRSxXQUFXLElBQUU7YUFDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWM7Z0JBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDaEUsSUFBSSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsV0FBVztnQkFBRSxJQUFJLENBQUMsV0FB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QztnQkFDdkMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUU7b0JBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUZBQW1GLEtBQUssY0FBYyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDbEksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2lCQUN2RDtnQkFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ2hGLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxFQUFFO29CQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO2lCQUNyRTthQUNGO1lBQ0Qsb0JBQW9CO2lCQUNmLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzVDO1lBRUQsT0FBTztnQkFDTCxJQUFJO2dCQUNKLEtBQUs7YUFDTixDQUFDOztLQUNIO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOb3ROaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IExvYWRSZXN1bHQsIExvYWRSZXN1bHRCeVBhZ2VGbiB9IGZyb20gJy4vZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+ID0gKG9wdHM/OiBPKSA9PiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGludGVyZmFjZSBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnMge1xuICBtYXhQcm9ncmVzc2lvbj86IG51bWJlcjtcbiAgcHJvZ3Jlc3Npb24/OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIEpvYlV0aWxzIHtcblxuICBzdGF0aWMgZGVmZXJzPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+KHJ1bm5hYmxlTGlzdDogQ2FsbGFibGVXaXRoUHJvZ3Jlc3Npb25GbjxPPltdLCBvcHRzPzogTyk6IE9ic2VydmFibGU8bnVtYmVyPltdIHtcbiAgICByZXR1cm4gcnVubmFibGVMaXN0Lm1hcChydW5uYWJsZSA9PiBKb2JVdGlscy5kZWZlcihydW5uYWJsZSwgb3B0cykpO1xuICB9XG5cbiAgc3RhdGljIGRlZmVyPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+KHJ1bm5hYmxlOiBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8+LCBvcHRzPzogTyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGRlZmVyPE9ic2VydmFibGU8bnVtYmVyPj4oKCkgPT4gSm9iVXRpbHMucnVuKHJ1bm5hYmxlLCBvcHRzKSk7XG4gIH1cblxuICBzdGF0aWMgcnVuPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+KHJ1bm5hYmxlOiBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8+LCBvcHRzOiBPKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblxuICAgIGNvbnN0IHByb2dyZXNzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHJ1bm5hYmxlKHsuLi5vcHRzLCBwcm9ncmVzc2lvbn0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChvcHRzPy5tYXhQcm9ncmVzc2lvbikgcHJvZ3Jlc3Npb24ubmV4dChvcHRzLm1heFByb2dyZXNzaW9uKTtcbiAgICAgICAgaWYgKG9wdHM/LnByb2dyZXNzaW9uKSBvcHRzLnByb2dyZXNzaW9uLmNvbXBsZXRlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiBwcm9ncmVzc2lvbi5lcnJvcihlcnIpKTtcbiAgICByZXR1cm4gcHJvZ3Jlc3Npb247XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZmV0Y2hBbGxQYWdlczxUPihcbiAgICBsb2FkUGFnZUZuOiBMb2FkUmVzdWx0QnlQYWdlRm48VD4sXG4gICAgb3B0cz86IHtcbiAgICAgIG1heFByb2dyZXNzaW9uPzogbnVtYmVyO1xuICAgICAgcHJvZ3Jlc3Npb24/OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgICAgIG9uUGFnZUxvYWRlZD86IChwYWdlUmVzdWx0OiBMb2FkUmVzdWx0PFQ+KSA9PiBhbnk7XG4gICAgICBsb2dQcmVmaXg/OiBzdHJpbmc7XG4gICAgICBmZXRjaFNpemU/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgY29uc3QgbWF4UHJvZ3Jlc3Npb24gPSBvcHRzICYmIG9wdHMubWF4UHJvZ3Jlc3Npb24gfHwgdW5kZWZpbmVkO1xuICAgIGxldCB0b3RhbDsgbGV0IHBhZ2VDb3VudDsgbGV0IHByb2dyZXNzaW9uU3RlcDsgbGV0IGN1cnJlbnRQYWdlRGF0YUNvdW50OiBudW1iZXI7XG4gICAgY29uc3QgZmV0Y2hTaXplID0gb3B0cyAmJiBvcHRzLmZldGNoU2l6ZSB8fCAxMDAwO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBkYXRhOiBUW10gPSBbXTtcbiAgICBkbyB7XG5cbiAgICAgIGlmIChvcHRzICYmIG9wdHMubG9nUHJlZml4KSBjb25zb2xlLmRlYnVnKGAke29wdHMubG9nUHJlZml4fSBGZXRjaGluZyBwYWdlICMke29mZnNldCAvIGZldGNoU2l6ZX0uLi5gKTtcblxuICAgICAgLy8gR2V0IHNvbWUgaXRlbXMsIHVzaW5nIHBhZ2luZ1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgbG9hZFBhZ2VGbihvZmZzZXQsIGZldGNoU2l6ZSk7XG4gICAgICBkYXRhID0gZGF0YS5jb25jYXQocmVzLmRhdGEpO1xuICAgICAgY3VycmVudFBhZ2VEYXRhQ291bnQgPSByZXMuZGF0YSAmJiByZXMuZGF0YS5sZW5ndGggfHwgMDtcbiAgICAgIG9mZnNldCArPSBjdXJyZW50UGFnZURhdGFDb3VudDtcblxuICAgICAgLy8gU2V0IHRvdGFsIGNvdW50IChvbmx5IGlmIG5vdCBhbHJlYWR5IHNldClcbiAgICAgIGlmIChpc05pbCh0b3RhbCkgJiYgaXNOb3ROaWwocmVzLnRvdGFsKSkge1xuICAgICAgICB0b3RhbCA9IHJlcy50b3RhbDtcbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBhZ2VcbiAgICAgICAgcGFnZUNvdW50ID0gTWF0aC5yb3VuZChyZXMudG90YWwgLyBmZXRjaFNpemUgKyAwLjUpOyAvLyBSb3VuZCB0byBIQUxGX1VQIGludGVnZXJcbiAgICAgICAgLy8gQ29tcHV0ZSBzdGVwLCBieSBkaXZpZGluZyBtYXhQcm9ncmVzc2lvbiBieSBudW1iZXIgb2YgcGFnZVxuICAgICAgICBjb25zdCBhY3R1YWxQcm9ncmVzc2lvbiA9IE1hdGgubWF4KDAsIHRvTnVtYmVyKG9wdHMgJiYgb3B0cy5wcm9ncmVzc2lvbj8udmFsdWUsIDApKTtcbiAgICAgICAgcHJvZ3Jlc3Npb25TdGVwID0gbWF4UHJvZ3Jlc3Npb25cbiAgICAgICAgICA/IChtYXhQcm9ncmVzc2lvbiAtIGFjdHVhbFByb2dyZXNzaW9uKSAvIHBhZ2VDb3VudFxuICAgICAgICAgIDogdW5kZWZpbmVkIC8qaWYgMCByZXNldCB0byB1bmRlZmluZWQqLztcbiAgICAgIH1cblxuICAgICAgLy8gSW5jcmVtZW50IHByb2dyZXNzaW9uIG9uIGVhY2ggaXRlcmF0aW9uIChpZiBwb3NzaWJsZSlcbiAgICAgIGlmIChvcHRzICYmIG9wdHMucHJvZ3Jlc3Npb24gJiYgaXNOb3ROaWwocHJvZ3Jlc3Npb25TdGVwKSkge1xuICAgICAgICBvcHRzLnByb2dyZXNzaW9uLm5leHQob3B0cy5wcm9ncmVzc2lvbi52YWx1ZSArIHByb2dyZXNzaW9uU3RlcCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzICYmIG9wdHMub25QYWdlTG9hZGVkKSBvcHRzLm9uUGFnZUxvYWRlZChyZXMpO1xuXG4gICAgfSB3aGlsZSAoY3VycmVudFBhZ2VEYXRhQ291bnQgPiAwICYmICgoaXNOaWwodG90YWwpICYmIGN1cnJlbnRQYWdlRGF0YUNvdW50ID09PSBmZXRjaFNpemUpIHx8IChpc05vdE5pbCh0b3RhbCkgJiYgKG9mZnNldCA8IHRvdGFsKSkpKTtcblxuICAgIC8vIENvbXBsZXRlIHByb2dyZXNzaW9uIHRvIHJlYWNoIHByb2dyZXNzaW9uU3RlcCB2YWx1ZSAoYmVjYXVzZSBvZiByb3VuZClcbiAgICBpZiAoaXNOb3ROaWwocHJvZ3Jlc3Npb25TdGVwKSkge1xuXG4gICAgICAvLyBJZiB0b3RhbCByZXR1cm4gYnkgbG9hZEFsbCB3YXMgYmFkICFcbiAgICAgIGlmIChpc05vdE5pbCh0b3RhbCkgJiYgZGF0YS5sZW5ndGggPCB0b3RhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEEgZnVuY3Rpb24gbG9hZEFsbCgpIHJldHVybmVkIGEgYmFkIHRvdGFsIChsZXNzIHRoYW4gYWxsIHBhZ2UncyBkYXRhKSEgRXhwZWN0ZWQgJHt0b3RhbH0gYnV0IGZldGNoICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgICAgIHRvdGFsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgIHBhZ2VDb3VudCA9IE1hdGgucm91bmQoZGF0YS5sZW5ndGggLyBmZXRjaFNpemUgKyAwLjUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXN0UHJvZ3Jlc3Npb25TdGVwID0gb3B0cy5tYXhQcm9ncmVzc2lvbiAtIChwcm9ncmVzc2lvblN0ZXAgKiBwYWdlQ291bnQpO1xuICAgICAgaWYgKG9wdHMgJiYgb3B0cy5wcm9ncmVzc2lvbiAmJiBsYXN0UHJvZ3Jlc3Npb25TdGVwID4gMCkge1xuICAgICAgICBvcHRzLnByb2dyZXNzaW9uLm5leHQob3B0cy5wcm9ncmVzc2lvbi52YWx1ZSArIGxhc3RQcm9ncmVzc2lvblN0ZXApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBPciBpbmNyZW1lbnQgb25jZVxuICAgIGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5wcm9ncmVzc2lvbiAmJiBvcHRzLm1heFByb2dyZXNzaW9uKSB7XG4gICAgICBvcHRzLnByb2dyZXNzaW9uLm5leHQob3B0cy5tYXhQcm9ncmVzc2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICB0b3RhbFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10084,14 +10084,36 @@ trigger('slideUpDownAnimation', [
|
|
|
10084
10084
|
]);
|
|
10085
10085
|
|
|
10086
10086
|
class HttpUtils {
|
|
10087
|
-
static
|
|
10087
|
+
static getText(http, uri, opts) {
|
|
10088
10088
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10089
10089
|
// Add headers
|
|
10090
|
-
opts =
|
|
10091
|
-
//
|
|
10092
|
-
|
|
10093
|
-
|
|
10094
|
-
|
|
10090
|
+
opts = opts || { responseType: 'text' };
|
|
10091
|
+
// Force no cache
|
|
10092
|
+
if (opts.nocache === true) {
|
|
10093
|
+
opts.headers = (opts.headers instanceof HttpHeaders ? opts.headers : new HttpHeaders(opts.headers));
|
|
10094
|
+
opts.headers
|
|
10095
|
+
.append('Cache-Control', 'no-cache')
|
|
10096
|
+
.append('Pragma', 'no-cache');
|
|
10097
|
+
}
|
|
10098
|
+
// Use web http client
|
|
10099
|
+
try {
|
|
10100
|
+
return (yield http.get(uri, Object.assign(Object.assign({}, opts), { responseType: 'text' })).toPromise());
|
|
10101
|
+
}
|
|
10102
|
+
catch (err) {
|
|
10103
|
+
if (err && err.message) {
|
|
10104
|
+
console.error(`[network] Error on get request ${uri}: ${err.message}`, err);
|
|
10105
|
+
}
|
|
10106
|
+
else {
|
|
10107
|
+
console.error(`[network] Error on get request ${uri}: ${err && err.statusText} - ${JSON.stringify(err)}`);
|
|
10108
|
+
}
|
|
10109
|
+
throw { code: err.status, message: 'ERROR.UNKNOWN_NETWORK_ERROR' };
|
|
10110
|
+
}
|
|
10111
|
+
});
|
|
10112
|
+
}
|
|
10113
|
+
static getJson(http, uri, opts) {
|
|
10114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
10115
|
+
// Add headers
|
|
10116
|
+
opts = opts || {};
|
|
10095
10117
|
// Force no cache
|
|
10096
10118
|
if (opts.nocache === true) {
|
|
10097
10119
|
opts.headers = (opts.headers instanceof HttpHeaders ? opts.headers : new HttpHeaders(opts.headers));
|
|
@@ -10099,9 +10121,9 @@ class HttpUtils {
|
|
|
10099
10121
|
.append('Cache-Control', 'no-cache')
|
|
10100
10122
|
.append('Pragma', 'no-cache');
|
|
10101
10123
|
}
|
|
10124
|
+
// Use web http client
|
|
10102
10125
|
try {
|
|
10103
|
-
|
|
10104
|
-
return (yield http.get(uri, opts).toPromise());
|
|
10126
|
+
return (yield http.get(uri, Object.assign(Object.assign({}, opts), { responseType: 'json' })).toPromise());
|
|
10105
10127
|
}
|
|
10106
10128
|
catch (err) {
|
|
10107
10129
|
if (err && err.message) {
|
|
@@ -10128,7 +10150,7 @@ function getNodeInfo(http, peer, opts) {
|
|
|
10128
10150
|
if (peerUrl.endsWith('/')) {
|
|
10129
10151
|
peerUrl = peerUrl.substr(0, peerUrl.length - 1);
|
|
10130
10152
|
}
|
|
10131
|
-
return HttpUtils.
|
|
10153
|
+
return HttpUtils.getJson(http, peerUrl + '/api/node/info', opts);
|
|
10132
10154
|
});
|
|
10133
10155
|
}
|
|
10134
10156
|
|
|
@@ -11171,7 +11193,7 @@ class NetworkService extends StartableService {
|
|
|
11171
11193
|
if (opts === null || opts === void 0 ? void 0 : opts.nocache) {
|
|
11172
11194
|
path += '?t=' + Date.now();
|
|
11173
11195
|
}
|
|
11174
|
-
const appVersion = yield this.
|
|
11196
|
+
const appVersion = yield this.getText(path, opts);
|
|
11175
11197
|
if (isNotNilOrBlank(appVersion))
|
|
11176
11198
|
return appVersion;
|
|
11177
11199
|
}
|
|
@@ -11379,28 +11401,37 @@ class NetworkService extends StartableService {
|
|
|
11379
11401
|
});
|
|
11380
11402
|
this._timerSubscription.add(() => console.debug('[network] Refresh timer stopped'));
|
|
11381
11403
|
}
|
|
11404
|
+
getText(path, opts) {
|
|
11405
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11406
|
+
let uri = this.getUri(path);
|
|
11407
|
+
return HttpUtils.getText(this.http, uri, opts);
|
|
11408
|
+
});
|
|
11409
|
+
}
|
|
11382
11410
|
get(path, opts) {
|
|
11383
11411
|
return __awaiter(this, void 0, void 0, function* () {
|
|
11384
|
-
let uri = path;
|
|
11385
|
-
|
|
11386
|
-
if (!uri.startsWith('http://') && !uri.startsWith('https://')) {
|
|
11387
|
-
let peerUrl = (this.peer && this.peer.url);
|
|
11388
|
-
// Remove trailing slash
|
|
11389
|
-
if (peerUrl.endsWith('/')) {
|
|
11390
|
-
peerUrl = peerUrl.substr(0, peerUrl.length - 1);
|
|
11391
|
-
}
|
|
11392
|
-
// Add first path
|
|
11393
|
-
if (!path.startsWith('/')) {
|
|
11394
|
-
path = '/' + path;
|
|
11395
|
-
}
|
|
11396
|
-
// Create the URI: concat peer URL and path
|
|
11397
|
-
uri = peerUrl + path;
|
|
11398
|
-
}
|
|
11399
|
-
// Execute the request
|
|
11400
|
-
return HttpUtils.getResource(this.http, uri, opts);
|
|
11412
|
+
let uri = this.getUri(path);
|
|
11413
|
+
return HttpUtils.getJson(this.http, uri, opts);
|
|
11401
11414
|
});
|
|
11402
11415
|
}
|
|
11403
11416
|
/* -- Protected methods -- */
|
|
11417
|
+
getUri(path) {
|
|
11418
|
+
let uri = path;
|
|
11419
|
+
// If path is not an URI: prepend with peer URL
|
|
11420
|
+
if (!uri.startsWith('http://') && !uri.startsWith('https://')) {
|
|
11421
|
+
let peerUrl = (this.peer && this.peer.url);
|
|
11422
|
+
// Remove trailing slash
|
|
11423
|
+
if (peerUrl.endsWith('/')) {
|
|
11424
|
+
peerUrl = peerUrl.substr(0, peerUrl.length - 1);
|
|
11425
|
+
}
|
|
11426
|
+
// Add first path
|
|
11427
|
+
if (!path.startsWith('/')) {
|
|
11428
|
+
path = '/' + path;
|
|
11429
|
+
}
|
|
11430
|
+
// Create the URI: concat peer URL and path
|
|
11431
|
+
uri = peerUrl + path;
|
|
11432
|
+
}
|
|
11433
|
+
return uri;
|
|
11434
|
+
}
|
|
11404
11435
|
onDeviceConnectionChanged(connectionType) {
|
|
11405
11436
|
connectionType = (connectionType || 'unknown').toLowerCase();
|
|
11406
11437
|
if (connectionType.startsWith('cell'))
|
|
@@ -17654,22 +17685,24 @@ class JobUtils {
|
|
|
17654
17685
|
}
|
|
17655
17686
|
static run(runnable, opts) {
|
|
17656
17687
|
const progression = new BehaviorSubject(0);
|
|
17657
|
-
runnable(
|
|
17688
|
+
runnable(Object.assign(Object.assign({}, opts), { progression }))
|
|
17658
17689
|
.then(() => {
|
|
17659
|
-
if (opts
|
|
17690
|
+
if (opts === null || opts === void 0 ? void 0 : opts.maxProgression)
|
|
17660
17691
|
progression.next(opts.maxProgression);
|
|
17661
|
-
progression
|
|
17692
|
+
if (opts === null || opts === void 0 ? void 0 : opts.progression)
|
|
17693
|
+
opts.progression.complete();
|
|
17662
17694
|
})
|
|
17663
17695
|
.catch(err => progression.error(err));
|
|
17664
17696
|
return progression;
|
|
17665
17697
|
}
|
|
17666
|
-
static fetchAllPages(loadPageFn,
|
|
17698
|
+
static fetchAllPages(loadPageFn, opts) {
|
|
17699
|
+
var _a;
|
|
17667
17700
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17668
17701
|
const maxProgression = opts && opts.maxProgression || undefined;
|
|
17669
17702
|
let total;
|
|
17670
|
-
let
|
|
17703
|
+
let pageCount;
|
|
17671
17704
|
let progressionStep;
|
|
17672
|
-
let
|
|
17705
|
+
let currentPageDataCount;
|
|
17673
17706
|
const fetchSize = opts && opts.fetchSize || 1000;
|
|
17674
17707
|
let offset = 0;
|
|
17675
17708
|
let data = [];
|
|
@@ -17679,37 +17712,42 @@ class JobUtils {
|
|
|
17679
17712
|
// Get some items, using paging
|
|
17680
17713
|
const res = yield loadPageFn(offset, fetchSize);
|
|
17681
17714
|
data = data.concat(res.data);
|
|
17682
|
-
|
|
17683
|
-
offset +=
|
|
17715
|
+
currentPageDataCount = res.data && res.data.length || 0;
|
|
17716
|
+
offset += currentPageDataCount;
|
|
17684
17717
|
// Set total count (only if not already set)
|
|
17685
17718
|
if (isNil(total) && isNotNil(res.total)) {
|
|
17686
17719
|
total = res.total;
|
|
17687
|
-
|
|
17688
|
-
|
|
17720
|
+
// Compute the number of page
|
|
17721
|
+
pageCount = Math.round(res.total / fetchSize + 0.5); // Round to HALF_UP integer
|
|
17722
|
+
// Compute step, by dividing maxProgression by number of page
|
|
17723
|
+
const actualProgression = Math.max(0, toNumber(opts && ((_a = opts.progression) === null || _a === void 0 ? void 0 : _a.value), 0));
|
|
17724
|
+
progressionStep = maxProgression
|
|
17725
|
+
? (maxProgression - actualProgression) / pageCount
|
|
17726
|
+
: undefined /*if 0 reset to undefined*/;
|
|
17689
17727
|
}
|
|
17690
17728
|
// Increment progression on each iteration (if possible)
|
|
17691
|
-
if (isNotNil(progressionStep)) {
|
|
17692
|
-
progression.next(progression.
|
|
17729
|
+
if (opts && opts.progression && isNotNil(progressionStep)) {
|
|
17730
|
+
opts.progression.next(opts.progression.value + progressionStep);
|
|
17693
17731
|
}
|
|
17694
17732
|
if (opts && opts.onPageLoaded)
|
|
17695
17733
|
opts.onPageLoaded(res);
|
|
17696
|
-
} while (
|
|
17734
|
+
} while (currentPageDataCount > 0 && ((isNil(total) && currentPageDataCount === fetchSize) || (isNotNil(total) && (offset < total))));
|
|
17697
17735
|
// Complete progression to reach progressionStep value (because of round)
|
|
17698
17736
|
if (isNotNil(progressionStep)) {
|
|
17699
17737
|
// If total return by loadAll was bad !
|
|
17700
17738
|
if (isNotNil(total) && data.length < total) {
|
|
17701
17739
|
console.warn(`A function loadAll() returned a bad total (less than all page's data)! Expected ${total} but fetch ${data.length}`);
|
|
17702
17740
|
total = data.length;
|
|
17703
|
-
|
|
17741
|
+
pageCount = Math.round(data.length / fetchSize + 0.5);
|
|
17704
17742
|
}
|
|
17705
|
-
const lastProgressionStep = opts.maxProgression - (progressionStep *
|
|
17706
|
-
if (lastProgressionStep > 0) {
|
|
17707
|
-
progression.next(progression.
|
|
17743
|
+
const lastProgressionStep = opts.maxProgression - (progressionStep * pageCount);
|
|
17744
|
+
if (opts && opts.progression && lastProgressionStep > 0) {
|
|
17745
|
+
opts.progression.next(opts.progression.value + lastProgressionStep);
|
|
17708
17746
|
}
|
|
17709
17747
|
}
|
|
17710
17748
|
// Or increment once
|
|
17711
|
-
else if (opts.maxProgression) {
|
|
17712
|
-
progression.next(
|
|
17749
|
+
else if (opts && opts.progression && opts.maxProgression) {
|
|
17750
|
+
opts.progression.next(opts.maxProgression);
|
|
17713
17751
|
}
|
|
17714
17752
|
return {
|
|
17715
17753
|
data,
|
|
@@ -25399,23 +25437,20 @@ class PersonService extends BaseEntityService {
|
|
|
25399
25437
|
return this.loadAll(0, !value ? 30 : 10, sortBy, sortDirection, Object.assign(Object.assign({}, filter), { searchText: value, statusIds: filter && filter.statusIds || [StatusIds.ENABLE], userProfiles: filter && filter.userProfiles }), { withTotal: true /* need by autocomplete */ });
|
|
25400
25438
|
});
|
|
25401
25439
|
}
|
|
25402
|
-
executeImport(
|
|
25440
|
+
executeImport(filter, opts) {
|
|
25403
25441
|
const _super = Object.create(null, {
|
|
25404
25442
|
loadAll: { get: () => super.loadAll }
|
|
25405
25443
|
});
|
|
25406
25444
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25407
25445
|
const maxProgression = opts && opts.maxProgression || 100;
|
|
25408
|
-
|
|
25409
|
-
statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY],
|
|
25410
|
-
userProfiles: ['SUPERVISOR', 'USER', 'GUEST']
|
|
25411
|
-
};
|
|
25446
|
+
filter = Object.assign(Object.assign({}, filter), { statusIds: [StatusIds.ENABLE, StatusIds.TEMPORARY], userProfiles: ['SUPERVISOR', 'USER', 'GUEST'] });
|
|
25412
25447
|
console.info('[person-service] Importing persons...');
|
|
25413
25448
|
const res = yield JobUtils.fetchAllPages((offset, size) => _super.loadAll.call(this, offset, size, 'id', null, filter, {
|
|
25414
25449
|
debug: false,
|
|
25415
25450
|
fetchPolicy: 'network-only',
|
|
25416
25451
|
withTotal: (offset === 0),
|
|
25417
25452
|
toEntity: false
|
|
25418
|
-
}),
|
|
25453
|
+
}), Object.assign(Object.assign({}, opts), { maxProgression: maxProgression * 0.9 }));
|
|
25419
25454
|
// Save result locally
|
|
25420
25455
|
yield this.entities.saveAll(res.data, { entityName: 'PersonVO', reset: true });
|
|
25421
25456
|
});
|
|
@@ -25425,7 +25460,7 @@ class PersonService extends BaseEntityService {
|
|
|
25425
25460
|
if (!source)
|
|
25426
25461
|
return undefined;
|
|
25427
25462
|
console.debug('TODO check isInstanceOf');
|
|
25428
|
-
if (!
|
|
25463
|
+
if (!(source instanceof Person)) {
|
|
25429
25464
|
source = Person.fromObject(source);
|
|
25430
25465
|
}
|
|
25431
25466
|
const target = source.asObject();
|