@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.
- package/esm2020/src/app/core/peer/select-peer.modal.mjs +15 -7
- package/esm2020/src/app/core/services/network.service.mjs +16 -11
- package/esm2020/src/app/shared/http/http.utils.mjs +2 -2
- package/fesm2015/sumaris-net.ngx-components.mjs +33 -19
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +28 -16
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/peer/select-peer.modal.d.ts +5 -2
|
@@ -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
|
|
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
|
-
|
|
15038
|
-
|
|
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
|
|
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
|
-
(
|
|
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
|
-
|
|
15656
|
-
return this
|
|
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
|
-
|
|
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
|
|
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) {
|