@sumaris-net/ngx-components 2.4.60 → 2.4.61

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.
@@ -14360,7 +14360,7 @@ class HttpUtils {
14360
14360
  else {
14361
14361
  console.error(`[network] Error on get request ${uri}: ${err && err.statusText} - ${JSON.stringify(err)}`);
14362
14362
  }
14363
- throw { code: err.status, message: 'ERROR.UNKNOWN_NETWORK_ERROR' };
14363
+ throw err;
14364
14364
  }
14365
14365
  });
14366
14366
  }
@@ -14930,13 +14930,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
14930
14930
  }] } });
14931
14931
 
14932
14932
  class SelectPeerModal {
14933
- constructor(modalCtrl, popoverController, translate, http, cd, environment) {
14933
+ constructor(modalCtrl, popoverController, translate, http, cd, environment, loggingService) {
14934
14934
  this.modalCtrl = modalCtrl;
14935
14935
  this.popoverController = popoverController;
14936
14936
  this.translate = translate;
14937
14937
  this.http = http;
14938
14938
  this.cd = cd;
14939
14939
  this.environment = environment;
14940
+ this.loggingService = loggingService;
14940
14941
  this._subscription = new Subscription();
14941
14942
  this.loading = true;
14942
14943
  this.$peers = new Subject();
@@ -14946,6 +14947,7 @@ class SelectPeerModal {
14946
14947
  this.onRefresh = new EventEmitter();
14947
14948
  this.showSetManuallyButton = true;
14948
14949
  this.mobile = isMobile(window);
14950
+ this._logger = loggingService === null || loggingService === void 0 ? void 0 : loggingService.getLogger('network-modal');
14949
14951
  }
14950
14952
  set peers(peers) {
14951
14953
  this._subscription.add(peers.subscribe(res => this.refreshPeers(res)));
@@ -15023,6 +15025,7 @@ class SelectPeerModal {
15023
15025
  });
15024
15026
  }
15025
15027
  refreshPeer(peer) {
15028
+ var _a;
15026
15029
  return __awaiter(this, void 0, void 0, function* () {
15027
15030
  try {
15028
15031
  const summary = yield NetworkUtils.getNodeInfo(this.http, peer.url);
@@ -15033,10 +15036,10 @@ class SelectPeerModal {
15033
15036
  peer.name = summary.nodeName;
15034
15037
  }
15035
15038
  catch (err) {
15039
+ // If modal was not closed (e.g. response arrived too late => ignore)
15036
15040
  if (!this._subscription.closed) {
15037
- if (err && err.message) {
15038
- console.error('[select-peer] ' + err.message, err);
15039
- }
15041
+ console.error(`[select-peer] Error while calling '${peer.url}/api/node/info': ${(err === null || err === void 0 ? void 0 : err.message) || err}`, err);
15042
+ (_a = this._logger) === null || _a === void 0 ? void 0 : _a.error(`Error while calling '${peer.url}/api/node/info': ${JSON.stringify(err)}`);
15040
15043
  }
15041
15044
  peer.status = 'DOWN';
15042
15045
  }
@@ -15066,7 +15069,7 @@ class SelectPeerModal {
15066
15069
  this.cd.markForCheck();
15067
15070
  }
15068
15071
  }
15069
- SelectPeerModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectPeerModal, deps: [{ token: i1.ModalController }, { token: i1.PopoverController }, { token: i1$2.TranslateService }, { token: i2$3.HttpClient }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
15072
+ SelectPeerModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectPeerModal, deps: [{ token: i1.ModalController }, { token: i1.PopoverController }, { token: i1$2.TranslateService }, { token: i2$3.HttpClient }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
15070
15073
  SelectPeerModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SelectPeerModal, selector: "select-peer-modal", inputs: { canCancel: "canCancel", allowSelectDownPeer: "allowSelectDownPeer", onRefresh: "onRefresh", showSetManuallyButton: "showSetManuallyButton" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"cancel()\" *ngIf=\"canCancel\"\n visible-xs visible-sm visible-mobile>\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title>\n {{'NETWORK.PEER.SELECT_MODAL.TITLE'|translate}}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <!-- loader -->\n <ion-spinner *ngIf=\"loading; else endButtons\"></ion-spinner>\n\n <ng-template #endButtons>\n <!-- refresh button -->\n <ion-button *ngIf=\"onRefresh.observers | isNotEmptyArray\"\n [matTooltip]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"refresh($event)\">\n <mat-icon slot=\"icon-only\">refresh</mat-icon>\n </ion-button>\n </ng-template>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <ion-list>\n\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <p translate>NETWORK.PEER.SELECT_MODAL.HELP</p>\n </ion-label>\n </ion-list-header>\n\n <ion-item *ngFor=\"let peer of $peers | async\"\n tappable\n (click)=\"selectPeer(peer)\"\n detail\n @fadeInAnimation>\n\n <!-- icon -->\n <ion-avatar slot=\"start\" *ngIf=\"peer.reachable\" >\n <ion-img [src]=\"peer.favicon || (peer.url + '/api/favicon')\"></ion-img>\n </ion-avatar>\n <ion-icon slot=\"start\" *ngIf=\"!peer.reachable\" name=\"desktop\" color=\"medium\" class=\"ion-text-center\"></ion-icon>\n\n <!-- Peer is UP -->\n <ion-grid *ngIf=\"peer.reachable\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"dark\">\n <h3>{{peer.hostAndPort}}{{peer.path}}</h3>\n </ion-text>\n <ion-text color=\"primary\">\n <h4>{{peer.label}}</h4>\n </ion-text>\n </ion-label>\n </ion-col>\n <ion-col class=\"ion-no-padding\">\n <ion-label class=\"ion-text-wrap ion-text-center\" color=\"medium\">\n <h3>{{peer.softwareName}}</h3>\n <h4 *ngIf=\"!peerMinVersion || isCompatible(peer); else invalidVersion\">\n <small>v{{peer.softwareVersion}}</small>\n </h4>\n <ng-template #invalidVersion>\n <ion-text color=\"danger\" [matTooltip]=\"'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP'|translate: {version: peerMinVersion} \">\n <h4 class=\"ion-color-danger\">\n <small><mat-icon>warning</mat-icon>v{{peer.softwareVersion}}</small>\n </h4>\n </ion-text>\n </ng-template>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Peer is DOWN -->\n <ion-label class=\"ion-text-wrap\" *ngIf=\"!peer.reachable\">\n <ion-text color=\"medium\">\n <h3>{{peer.hostAndPort}}{{peer.path}}</h3>\n </ion-text>\n <ion-text color=\"danger\">\n <h4>\n <small><ion-icon size=\"small\" name=\"close-circle\"></ion-icon></small>\n <span translate>NETWORK.PEER.OFFLINE</span>\n </h4>\n </ion-text>\n </ion-label>\n </ion-item>\n </ion-list>\n\n</ion-content>\n\n\n<ion-footer *ngIf=\"canCancel\" hidden-xs hidden-sm hidden-mobile>\n\n <ion-toolbar>\n\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <!-- buttons -->\n <ion-col size=\"auto\" *ngIf=\"showSetManuallyButton\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"clickSetManually($event)\">\n <ion-label translate>NETWORK.PEER.SELECT_MODAL.BTN_SET_MANUALLY</ion-label>\n </ion-button>\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n\n\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-item h4 ion-icon,ion-item h4 mat-icon{height:14px;width:14px;font-size:14px;line-height:14px}ion-item h4 small ion-icon,ion-item h4 small mat-icon{height:12px;width:12px;font-size:12px;line-height:12px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1$2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }, { kind: "pipe", type: NotEmptyArrayPipe, name: "isNotEmptyArray" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15071
15074
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectPeerModal, decorators: [{
15072
15075
  type: Component,
@@ -15075,6 +15078,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
15075
15078
  return [{ type: i1.ModalController }, { type: i1.PopoverController }, { type: i1$2.TranslateService }, { type: i2$3.HttpClient }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
15076
15079
  type: Inject,
15077
15080
  args: [ENVIRONMENT]
15081
+ }] }, { type: undefined, decorators: [{
15082
+ type: Optional
15083
+ }, {
15084
+ type: Inject,
15085
+ args: [APP_LOGGING_SERVICE]
15078
15086
  }] }];
15079
15087
  }, propDecorators: { canCancel: [{
15080
15088
  type: Input
@@ -15608,7 +15616,7 @@ class NetworkService extends StartableObservableService {
15608
15616
  * @param opts
15609
15617
  */
15610
15618
  checkPeerAlive(peer, opts) {
15611
- var _a, _b, _c;
15619
+ var _a;
15612
15620
  return __awaiter(this, void 0, void 0, function* () {
15613
15621
  peer = peer || this.peer;
15614
15622
  if (!peer) {
@@ -15617,16 +15625,13 @@ class NetworkService extends StartableObservableService {
15617
15625
  return undefined; // No peer define. Skip
15618
15626
  peer = Peer.parseUrl(settings.peerUrl);
15619
15627
  }
15620
- const peerUrl = typeof peer === 'string' ? peer : peer.url;
15621
- (_a = this._logger) === null || _a === void 0 ? void 0 : _a.info('checkPeerAlive', `Checking if peer {${peerUrl}} is alive, by calling /api/node/info ...`);
15622
15628
  try {
15623
15629
  const data = yield this.getNodeInfo(peer);
15624
- (_b = this._logger) === null || _b === void 0 ? void 0 : _b.info('checkPeerAlive', `Peer {${peerUrl}} is alive:\n${JSON.stringify(data)}`);
15625
15630
  return data;
15626
15631
  }
15627
15632
  catch (err) {
15628
15633
  console.debug('[network] Cannot get /api/node/info from peer: ' + (err && err.message || err), err);
15629
- (_c = this._logger) === null || _c === void 0 ? void 0 : _c.error('checkPeerAlive', '[network] Cannot get /api/node/info from peer: ' + (err && err.message || err) + ':\n' + JSON.stringify(err));
15634
+ (_a = this._logger) === null || _a === void 0 ? void 0 : _a.error('checkPeerAlive', '[network] Cannot get /api/node/info from peer: ' + (err && err.message || err) + ':\n' + JSON.stringify(err));
15630
15635
  return undefined;
15631
15636
  }
15632
15637
  });
@@ -15652,8 +15657,21 @@ class NetworkService extends StartableObservableService {
15652
15657
  });
15653
15658
  }
15654
15659
  getNodeInfo(peer) {
15655
- const path = this.computePeerPath(peer, '/api/node/info');
15656
- return this.get(path);
15660
+ var _a, _b, _c;
15661
+ return __awaiter(this, void 0, void 0, function* () {
15662
+ const path = this.computePeerPath(peer, '/api/node/info');
15663
+ (_a = this._logger) === null || _a === void 0 ? void 0 : _a.info('checkPeerAlive', `Getting '${path}' ...`);
15664
+ try {
15665
+ const data = yield this.get(path);
15666
+ (_b = this._logger) === null || _b === void 0 ? void 0 : _b.debug('checkPeerAlive', `Result:\n${JSON.stringify(data)}`);
15667
+ return data;
15668
+ }
15669
+ catch (err) {
15670
+ console.debug(`[network] Error while getting '${path}': ${err && err.message || err}`, err);
15671
+ (_c = this._logger) === null || _c === void 0 ? void 0 : _c.error('checkPeerAlive', `[network] Error while getting '${path}': ${(err === null || err === void 0 ? void 0 : err.message) || ''}' ${JSON.stringify(err)}`);
15672
+ return undefined;
15673
+ }
15674
+ });
15657
15675
  }
15658
15676
  getAppManifest(peer, opts) {
15659
15677
  return __awaiter(this, void 0, void 0, function* () {
@@ -15889,15 +15907,11 @@ class NetworkService extends StartableObservableService {
15889
15907
  }
15890
15908
  getText(path, opts) {
15891
15909
  return __awaiter(this, void 0, void 0, function* () {
15892
- let uri = this.getUri(path);
15893
- return HttpUtils.getText(this.http, uri, opts);
15910
+ return HttpUtils.getText(this.http, this.getUri(path), opts);
15894
15911
  });
15895
15912
  }
15896
15913
  get(path, opts) {
15897
- return __awaiter(this, void 0, void 0, function* () {
15898
- let uri = this.getUri(path);
15899
- return HttpUtils.getJson(this.http, uri, opts);
15900
- });
15914
+ return HttpUtils.getJson(this.http, this.getUri(path), opts);
15901
15915
  }
15902
15916
  /* -- Protected methods -- */
15903
15917
  getUri(path) {