Переглянути джерело

feat: handle errors gracefully

jmacura 5 роки тому
батько
коміт
3ccb9020e2

+ 1 - 1
src/adjuster/adjuster-event.service.ts

@@ -3,7 +3,7 @@ import {Subject} from 'rxjs';
 
 @Injectable({providedIn: 'root'})
 export class AdjusterEventService {
-  clustersLoaded: Subject<{success: boolean}> = new Subject();
+  clustersLoaded: Subject<{success: boolean; err?}> = new Subject();
   methodChanged: Subject<string> = new Subject();
   constructor() {}
 }

+ 6 - 0
src/adjuster/adjuster.component.ts

@@ -13,6 +13,7 @@ import {AdjusterService} from './adjuster.service';
 export class AdjusterComponent implements HsPanelComponent {
   data: any;
   descriptionVisible: boolean;
+  errorMsg: string;
   method: string;
   viewRef: ViewRef;
 
@@ -23,6 +24,11 @@ export class AdjusterComponent implements HsPanelComponent {
   ) {
     this.descriptionVisible = false;
     this.method = this.adjusterService.method;
+    this.adjusterEventService.clustersLoaded.subscribe(({success, err}) => {
+      if (!success) {
+        this.errorMsg = err.message;
+      }
+    });
   }
 
   isVisible(): boolean {

+ 2 - 1
src/adjuster/adjuster.directive.html

@@ -4,8 +4,9 @@
     <div class="p-2 center-block">
       <button type="button" class="btn btn-primary" (click)="adjusterService.apply()"
         [disabled]="adjusterService.isClusteringInProcess() || noDataSelected()">Calculate clusters</button>
-      <div class="text-warning pt-2" [hidden]="!noDataSelected()">Select at least one dataset and set at least one
+      <div class="text-warning pt-2" [hidden]="!noDataSelected() || errorMsg">Select at least one dataset and set at least one
         factor's weight to a non-zero value.</div>
+      <div class="text-danger pt-2" [hidden]="!errorMsg">Server error: {{errorMsg}}</div>
     </div>
     <div class="p-2 center-block">
       <div class="pt-2 text-secondary">Number of clusters to create: {{adjusterService.numberOfClusters}}</div>

+ 8 - 1
src/adjuster/adjuster.service.ts

@@ -178,7 +178,10 @@ export class AdjusterService {
           console.warn(`Error obtaining data from ${this.serviceBaseUrl}.`);
           console.log(error);
           this._clusteringInProcess = false;
-          this.adjusterEventService.clustersLoaded.next({success: false});
+          this.adjusterEventService.clustersLoaded.next({
+            success: false,
+            err: error,
+          });
         });
     };
     this.hsUtilsService.debounce(f, 300, false, this)();
@@ -213,6 +216,10 @@ export class AdjusterService {
         console.warn(`Web service at ${this.serviceBaseUrl} unavailable!`);
         console.log(error);
         this._clusteringInProcess = false;
+        this.adjusterEventService.clustersLoaded.next({
+          success: false,
+          err: error,
+        });
       });
   }