@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.
@@ -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(progression, opts)
14
+ runnable(Object.assign(Object.assign({}, opts), { progression }))
15
15
  .then(() => {
16
- if (opts && opts.maxProgression)
16
+ if (opts === null || opts === void 0 ? void 0 : opts.maxProgression)
17
17
  progression.next(opts.maxProgression);
18
- progression.complete();
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, progression, opts) {
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 loopCount;
29
+ let pageCount;
28
30
  let progressionStep;
29
- let loopDataCount;
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
- loopDataCount = res.data && res.data.length || 0;
40
- offset += loopDataCount;
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
- loopCount = Math.round(res.total / fetchSize + 0.5); // Round to next integer
45
- progressionStep = maxProgression ? maxProgression / loopCount : undefined /*if 0 reset to undefined*/;
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.getValue() + progressionStep);
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 (loopDataCount > 0 && ((isNil(total) && loopDataCount === fetchSize) || (isNotNil(total) && (offset < total))));
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
- loopCount = Math.round(data.length / fetchSize + 0.5);
67
+ pageCount = Math.round(data.length / fetchSize + 0.5);
61
68
  }
62
- const lastProgressionStep = opts.maxProgression - (progressionStep * loopCount);
63
- if (lastProgressionStep > 0) {
64
- progression.next(progression.getValue() + lastProgressionStep);
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(progression.getValue() + opts.maxProgression);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvam9iLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBc0IsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFTN0MsV0FBVztBQUNYLE1BQU0sT0FBTyxRQUFRO0lBRW5CLE1BQU0sQ0FBQyxNQUFNLENBQTJDLFlBQTRDLEVBQUUsSUFBUTtRQUM1RyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUEyQyxRQUFzQyxFQUFFLElBQVE7UUFDckcsT0FBTyxLQUFLLENBQXFCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLENBQTJDLFFBQXNDLEVBQUUsSUFBTztRQUVsRyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuRCxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQzthQUN4QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWM7Z0JBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFPLGFBQWEsQ0FDeEIsVUFBaUMsRUFDakMsV0FBb0MsRUFDcEMsSUFLQzs7WUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxTQUFTLENBQUM7WUFDaEUsSUFBSSxLQUFLLENBQUM7WUFBQyxJQUFJLFNBQVMsQ0FBQztZQUFDLElBQUksZUFBZSxDQUFDO1lBQUMsSUFBSSxhQUFxQixDQUFDO1lBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztZQUNqRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLElBQUksR0FBUSxFQUFFLENBQUM7WUFDbkIsR0FBRztnQkFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUztvQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsbUJBQW1CLE1BQU0sR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDO2dCQUV2RywrQkFBK0I7Z0JBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixhQUFhLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxhQUFhLENBQUM7Z0JBRXhCLDRDQUE0QztnQkFDNUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdkMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7b0JBQ2xCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQXdCO29CQUM3RSxlQUFlLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUM7aUJBQ3ZHO2dCQUVELHdEQUF3RDtnQkFDeEQsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7b0JBQzdCLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDO2lCQUM1RDtnQkFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWTtvQkFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBRXZELFFBQVEsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFFeEgseUVBQXlFO1lBQ3pFLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUU3Qix1Q0FBdUM7Z0JBQ3ZDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFO29CQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1GQUFtRixLQUFLLGNBQWMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQ2xJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUNwQixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDdkQ7Z0JBRUQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLG1CQUFtQixHQUFHLENBQUMsRUFBRTtvQkFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztpQkFDaEU7YUFDRjtZQUNELG9CQUFvQjtpQkFDZixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzVCLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNoRTtZQUVELE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixLQUFLO2FBQ04sQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtMb2FkUmVzdWx0LCBMb2FkUmVzdWx0QnlQYWdlRm59IGZyb20gJy4vZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbkZuPE8gZXh0ZW5kcyBDYWxsYWJsZVdpdGhQcm9ncmVzc2lvbk9wdGlvbnM+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 getResource(http, uri, opts) {
10087
+ static getText(http, uri, opts) {
10088
10088
  return __awaiter(this, void 0, void 0, function* () {
10089
10089
  // Add headers
10090
- opts = Object.assign({}, opts
10091
- //headers: new HttpHeaders(),
10092
- //.append('X-App-Name', environment.name)
10093
- //.append('X-App-Version', environment.version),
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
- // Using web http client
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.getResource(http, peerUrl + '/api/node/info', opts);
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.get(path, opts);
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
- // If path is not an URI: prepend with peer URL
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(progression, opts)
17688
+ runnable(Object.assign(Object.assign({}, opts), { progression }))
17658
17689
  .then(() => {
17659
- if (opts && opts.maxProgression)
17690
+ if (opts === null || opts === void 0 ? void 0 : opts.maxProgression)
17660
17691
  progression.next(opts.maxProgression);
17661
- progression.complete();
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, progression, opts) {
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 loopCount;
17703
+ let pageCount;
17671
17704
  let progressionStep;
17672
- let loopDataCount;
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
- loopDataCount = res.data && res.data.length || 0;
17683
- offset += loopDataCount;
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
- loopCount = Math.round(res.total / fetchSize + 0.5); // Round to next integer
17688
- progressionStep = maxProgression ? maxProgression / loopCount : undefined /*if 0 reset to undefined*/;
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.getValue() + progressionStep);
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 (loopDataCount > 0 && ((isNil(total) && loopDataCount === fetchSize) || (isNotNil(total) && (offset < total))));
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
- loopCount = Math.round(data.length / fetchSize + 0.5);
17741
+ pageCount = Math.round(data.length / fetchSize + 0.5);
17704
17742
  }
17705
- const lastProgressionStep = opts.maxProgression - (progressionStep * loopCount);
17706
- if (lastProgressionStep > 0) {
17707
- progression.next(progression.getValue() + lastProgressionStep);
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(progression.getValue() + opts.maxProgression);
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(progression, opts) {
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
- const filter = {
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
- }), progression, { maxProgression: maxProgression * 0.9 });
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 (!isInstanceOf(source, Person)) {
25463
+ if (!(source instanceof Person)) {
25429
25464
  source = Person.fromObject(source);
25430
25465
  }
25431
25466
  const target = source.asObject();