ソースを参照

refactor: rework clustersLoaded event handling

jmacura 5 年 前
コミット
a2e3b3d73b

+ 8 - 0
src/adjuster/adjuster-event.service.ts

@@ -0,0 +1,8 @@
+import {Injectable} from '@angular/core';
+import {Subject} from 'rxjs';
+
+@Injectable({providedIn: 'root'})
+export class AdjusterEventService {
+  clustersLoaded: Subject<any> = new Subject();
+  constructor() {}
+}

+ 5 - 8
src/adjuster/adjuster-loader.component.ts

@@ -1,6 +1,5 @@
-//Currently unused and replaced by a simple directive
-import {AdjusterService} from './adjuster.service';
-import {Component, Input, OnInit, ViewRef} from '@angular/core';
+import {AdjusterEventService} from './adjuster-event.service';
+import {Component, Input, ViewRef} from '@angular/core';
 import {HsDialogComponent} from 'hslayers-ng/components/layout/dialogs/dialog-component.interface';
 import {HsDialogContainerService} from 'hslayers-ng/components/layout/dialogs/dialog-container.service';
 
@@ -8,17 +7,15 @@ import {HsDialogContainerService} from 'hslayers-ng/components/layout/dialogs/di
   selector: 'pra-adjuster-loader',
   template: require('./adjuster-loader.directive.html'),
 })
-export class AdjusterLoaderComponent implements HsDialogComponent, OnInit {
+export class AdjusterLoaderComponent implements HsDialogComponent {
   @Input() data;
   viewRef: ViewRef;
   constructor(
     private hsDialogContainerService: HsDialogContainerService,
-    private adjusterService: AdjusterService
+    private adjusterEventService: AdjusterEventService
   ) {
-    this.adjusterService.clustersLoaded.subscribe(() => {
+    this.adjusterEventService.clustersLoaded.subscribe(() => {
       this.hsDialogContainerService.destroy(this);
     });
   }
-
-  ngOnInit() { }
 }

+ 2 - 1
src/adjuster/adjuster.module.ts

@@ -6,6 +6,7 @@ import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
 import {HsPanelHelpersModule} from 'hslayers-ng/components/layout/panels/panel-helpers.module';
 
 import {AdjusterComponent} from './adjuster.component';
+import {AdjusterEventService} from './adjuster-event.service';
 import {AdjusterLoaderComponent} from './adjuster-loader.component';
 import {AdjusterService} from './adjuster.service';
 
@@ -15,6 +16,6 @@ import {AdjusterService} from './adjuster.service';
   exports: [AdjusterComponent],
   declarations: [AdjusterComponent, AdjusterLoaderComponent],
   entryComponents: [AdjusterComponent, AdjusterLoaderComponent],
-  providers: [AdjusterService],
+  providers: [AdjusterService, AdjusterEventService],
 })
 export class AdjusterModule {}

+ 7 - 2
src/adjuster/adjuster.service.ts

@@ -2,9 +2,12 @@ import {HttpClient} from '@angular/common/http';
 import {Injectable} from '@angular/core';
 import {Subject} from 'rxjs';
 
+import {HsDialogContainerService} from 'hslayers-ng/components/layout/dialogs/dialog-container.service';
 import {HsUtilsService} from 'hslayers-ng/components/utils/utils.service';
 
 // import attractivity from '../Attractivity.json';
+import {AdjusterEventService} from './adjuster-event.service';
+import {AdjusterLoaderComponent} from './adjuster-loader.component';
 import {nuts} from '../nuts';
 //import {factors} from './factors.js';
 
@@ -13,11 +16,12 @@ export class AdjusterService {
   serviceBaseUrl: string;
   factors;
   clusters;
-  clustersLoaded: Subject<any> = new Subject();
   method: string;
   _clusteringInProcess: boolean;
 
   constructor(
+    private adjusterEventService: AdjusterEventService,
+    private hsDialogContainerService: HsDialogContainerService,
     private hsUtilsService: HsUtilsService,
     private httpClient: HttpClient
   ) {
@@ -37,6 +41,7 @@ export class AdjusterService {
    * and applies the returned values
    */
   apply(): void {
+    this.hsDialogContainerService.create(AdjusterLoaderComponent, {});
     const f = () => {
       this._clusteringInProcess = true;
       this.httpClient
@@ -91,7 +96,7 @@ export class AdjusterService {
           }
           this.clusters = clusters;
           this._clusteringInProcess = false;
-          this.clustersLoaded.next();
+          this.adjusterEventService.clustersLoaded.next();
         })
         .catch((error) => {
           console.warn(`Error obtaining data from ${this.serviceBaseUrl}.`);

+ 3 - 5
src/app.service.ts

@@ -5,14 +5,13 @@ import {Injectable} from '@angular/core';
 import {Vector as VectorLayer} from 'ol/layer';
 
 import {HsConfig} from 'hslayers-ng/config.service';
-import {HsDialogContainerService} from 'hslayers-ng/components/layout/dialogs/dialog-container.service';
 import {HsLayoutService} from 'hslayers-ng/components/layout/layout.service';
 import {HsMapService} from 'hslayers-ng/components/map/map.service';
 import {HsPanelContainerService} from 'hslayers-ng/components/layout/panels/panel-container.service';
 import {HsSidebarService} from 'hslayers-ng/components/sidebar/sidebar.service';
 
 import {AdjusterComponent} from './adjuster/adjuster.component';
-import {AdjusterLoaderComponent} from './adjuster/adjuster-loader.component';
+import {AdjusterEventService} from './adjuster/adjuster-event.service';
 import {AdjusterService} from './adjuster/adjuster.service';
 import {nuts} from './nuts';
 
@@ -84,8 +83,8 @@ export class AppService {
   serviceUrl: string;
   constructor(
     private adjusterService: AdjusterService,
+    private adjusterEventService: AdjusterEventService,
     private hsConfig: HsConfig,
-    private hsDialogContainerService: HsDialogContainerService,
     private hsLayoutService: HsLayoutService,
     private hsMapService: HsMapService,
     private hsSidebarService: HsSidebarService,
@@ -107,7 +106,7 @@ export class AppService {
         },
       ],
     });
-    adjusterService.clustersLoaded.subscribe(() => {
+    this.adjusterEventService.clustersLoaded.subscribe(() => {
       this.colorPalette = this.generateRandomColorPalette(
         adjusterService.clusters.length
       );
@@ -122,7 +121,6 @@ export class AppService {
   }
 
   init(): void {
-    this.hsDialogContainerService.create(AdjusterLoaderComponent, {});
     this.hsSidebarService.buttons.push({
       panel: 'adjuster',
       module: 'pra.adjuster',