From 4c8f46e94fe97107c7184bfe60cf067bc4e7f246 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radek=20Pu=C5=A1?= <pusradek@fit.cvut.cz>
Date: Wed, 25 Dec 2019 04:16:53 +0100
Subject: [PATCH] reload after import /delete, interface created as separate
 part of project (each interface = file)

---
 .../src/app/helpers/datachange.service.ts     | 36 ++++++++++++++++
 .../file-history/file-history.component.ts    | 42 ++++---------------
 .../components/import/import.component.ts     | 24 ++++-------
 .../home/components/import/import.service.ts  | 11 ++---
 .../home/home-chart-definitions.service.ts    |  5 +++
 .../ClientApp/src/app/home/home.module.ts     |  2 +
 .../ClientApp/src/app/interfaces/IFile.js     |  3 ++
 .../ClientApp/src/app/interfaces/IFile.js.map |  1 +
 .../ClientApp/src/app/interfaces/IFile.ts     |  5 +++
 .../src/app/interfaces/IRequestFiles.js       |  3 ++
 .../src/app/interfaces/IRequestFiles.js.map   |  1 +
 .../src/app/interfaces/IRequestFiles.ts       |  4 ++
 Core/Core/Core.csproj                         |  4 ++
 13 files changed, 85 insertions(+), 56 deletions(-)
 create mode 100644 Core/Core/ClientApp/src/app/helpers/datachange.service.ts
 create mode 100644 Core/Core/ClientApp/src/app/interfaces/IFile.js
 create mode 100644 Core/Core/ClientApp/src/app/interfaces/IFile.js.map
 create mode 100644 Core/Core/ClientApp/src/app/interfaces/IFile.ts
 create mode 100644 Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js
 create mode 100644 Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js.map
 create mode 100644 Core/Core/ClientApp/src/app/interfaces/IRequestFiles.ts

diff --git a/Core/Core/ClientApp/src/app/helpers/datachange.service.ts b/Core/Core/ClientApp/src/app/helpers/datachange.service.ts
new file mode 100644
index 0000000..d915c53
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/helpers/datachange.service.ts
@@ -0,0 +1,36 @@
+import { Injectable } from '@angular/core';
+import { HomeChartDefinitionsService } from '../home/home-chart-definitions.service';
+import { MatTableDataSource } from '@angular/material';
+import { HttpClient } from '@angular/common/http';
+import { IFile } from '../interfaces/IFile';
+import { IRequestFiles } from '../interfaces/IRequestFiles';
+
+@Injectable()
+export class DatachangeService {
+  private ImportHistoryTable: MatTableDataSource<IFile>;
+
+  constructor(private ChartService: HomeChartDefinitionsService, private HttpClient: HttpClient) {
+    this.ImportHistoryTable = new MatTableDataSource<IFile>([]);
+    this.ReloadImportHistoryTableData();
+  }
+
+  public GetImportHistoryTable(): MatTableDataSource<IFile> { return this.ImportHistoryTable }
+
+  public OnDataChange(): void {
+    this.ReloadImportHistoryTableData();
+    this.ChartService.ReloadAll();
+  }
+
+  private ReloadImportHistoryTableData(): void {
+    this.HttpClient.get<IRequestFiles>('api/Import').subscribe(res => {
+      console.log('Get import data: ', res);
+      let fileArray = new Array<IFile>();
+      for (let i: number = 0; i < res.imports.length; i++) {
+        fileArray.push({ position: i + 1, id: res.imports[i].id, name: res.imports[i].name });
+      }
+      this.ImportHistoryTable.data = fileArray;
+    }, error => {
+      console.error("Get FilesData error:", error);
+    });
+  }
+}
diff --git a/Core/Core/ClientApp/src/app/home/components/file-history/file-history.component.ts b/Core/Core/ClientApp/src/app/home/components/file-history/file-history.component.ts
index 41e9db8..aee53c7 100644
--- a/Core/Core/ClientApp/src/app/home/components/file-history/file-history.component.ts
+++ b/Core/Core/ClientApp/src/app/home/components/file-history/file-history.component.ts
@@ -2,6 +2,8 @@ import { Component, ViewChild, OnInit } from '@angular/core';
 import { MatPaginator } from '@angular/material/paginator';
 import { MatTableDataSource } from '@angular/material/table';
 import { HttpClient } from '@angular/common/http';
+import { DatachangeService } from '../../../helpers/datachange.service';
+import { IFile } from '../../../interfaces/IFile';
 
 @Component({
   selector: 'app-file-history',
@@ -12,49 +14,23 @@ import { HttpClient } from '@angular/common/http';
 export class FileHistoryComponent implements OnInit {
   @ViewChild(MatPaginator, { static: true })
   paginator: MatPaginator;
-  dataSource: MatTableDataSource<File>;
+  dataSource: MatTableDataSource<IFile>;
   displayedColumns: string[] = ['position', 'name', 'delete'];
 
   ngOnInit() {
     this.dataSource.paginator = this.paginator;
   }
 
-  constructor(private HttpClient: HttpClient) {
-    this.GetData();
-    this.dataSource = new MatTableDataSource<File>([]);
+  constructor(private HttpClient: HttpClient, private DatachangeService: DatachangeService) {
+    this.dataSource = this.DatachangeService.GetImportHistoryTable();
   }
 
-  public GetData() {
-    this.HttpClient.get<RequestFiles>('api/Import').subscribe(res => {
-      console.log('Get import data: ', res);
-      let fileArray = new Array<File>();
-      for (let i: number = 0; i < res.imports.length; i++) {
-        fileArray.push({ position: i + 1, id: res.imports[i].id, name: res.imports[i].name });
-      }
-      this.dataSource.data = fileArray;
-    }, error => {
-      console.error("Get FilesData error:", error);
-    });
-  }
-
-  onDeleteFile(element: File): void {
-    console.log("delete button clicked:", element);
-
-    this.HttpClient.delete('api/Import/'+ element.id).subscribe(res => {
-      console.log('Deleting file: ', res);
+  onDeleteFile(element: IFile): void {
+    this.HttpClient.delete('api/Import/' + element.id).subscribe(res => {
+      console.log('Deleted file: ', res);
+      this.DatachangeService.OnDataChange();
     }, error => {
         console.error("Deleting file error:", error);
     });
   }
 }
-
-export interface File {
-  position: number;
-  id: number;
-  name: string;
-}
-
-export interface RequestFiles {
-  count: number;
-  imports: Array<{ id: number, name: string }>
-}
diff --git a/Core/Core/ClientApp/src/app/home/components/import/import.component.ts b/Core/Core/ClientApp/src/app/home/components/import/import.component.ts
index 50fa0b7..ce79361 100644
--- a/Core/Core/ClientApp/src/app/home/components/import/import.component.ts
+++ b/Core/Core/ClientApp/src/app/home/components/import/import.component.ts
@@ -1,25 +1,19 @@
-import { Component, Inject } from '@angular/core';
+import { Component} from '@angular/core';
 import { ImportService } from './import.service';
-import { HttpClient } from '@angular/common/http';
+import { DatachangeService } from '../../../helpers/datachange.service';
 
 @Component({
-    selector: 'app-import',
-    templateUrl: './import.component.html',
-    styleUrls: ['./import.component.css']
+  selector: 'app-import',
+  templateUrl: './import.component.html',
+  styleUrls: ['./import.component.css']
 })
 /** Import component*/
 export class ImportComponent {
-  importService: ImportService;
-  Http: HttpClient;
-
   fileToUpload: File = null;
 
   /** Import ctor */
-  constructor(http: HttpClient) {
-    this.Http = http;
-    this.importService = new ImportService(http);
-  }
-  
+  constructor(private ImportService: ImportService, private DatachangeService: DatachangeService) { }
+
   handleFileInput(files: FileList) {
     console.log('hanfleFileInput');
     this.fileToUpload = files.item(0);
@@ -27,8 +21,8 @@ export class ImportComponent {
 
   uploadFileToActivity() {
     console.log('uploadFileToActivity');
-    this.importService.postFile(this.fileToUpload).subscribe(data => {
-      // do something, if upload success
+    this.ImportService.postFile(this.fileToUpload).subscribe(data => {
+      this.DatachangeService.OnDataChange();
     }, error => {
       console.log(error);
     });
diff --git a/Core/Core/ClientApp/src/app/home/components/import/import.service.ts b/Core/Core/ClientApp/src/app/home/components/import/import.service.ts
index 640d4dd..5e8df65 100644
--- a/Core/Core/ClientApp/src/app/home/components/import/import.service.ts
+++ b/Core/Core/ClientApp/src/app/home/components/import/import.service.ts
@@ -1,4 +1,4 @@
-import { Injectable, Inject } from '@angular/core';
+import { Injectable } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { Observable } from 'rxjs';
 
@@ -8,16 +8,11 @@ import { Observable } from 'rxjs';
 )
 export class ImportService {
 
-  httpClient: HttpClient;
-  importService: ImportService;
-
-  constructor(http: HttpClient) {
-    this.httpClient = http;
-  }
+  constructor(private HttpClient: HttpClient) { }
 
   postFile(fileToUpload: File): Observable<Object> {
     const formData: FormData = new FormData();
     formData.append('fileKey', fileToUpload, fileToUpload.name);
-    return this.httpClient.post('api/Import', formData);
+    return this.HttpClient.post('api/Import', formData);
   }
 }
diff --git a/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts b/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts
index 342f917..8e1c733 100644
--- a/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts
+++ b/Core/Core/ClientApp/src/app/home/home-chart-definitions.service.ts
@@ -22,6 +22,11 @@ export class HomeChartDefinitionsService {
   public HistorySymbolTypePieChart: Chart;
   public ForecastPieChart: Chart;
 
+  public ReloadAll(): void {
+    this.ReloadHistoryChartSeries();
+    this.ReloadForecastChartSeries();
+  }
+
 
   public ReloadHistoryChartSeries() {
     this.HistoryWeeksBarChart.removeSeries(0);
diff --git a/Core/Core/ClientApp/src/app/home/home.module.ts b/Core/Core/ClientApp/src/app/home/home.module.ts
index ab71765..07d8de9 100644
--- a/Core/Core/ClientApp/src/app/home/home.module.ts
+++ b/Core/Core/ClientApp/src/app/home/home.module.ts
@@ -16,6 +16,7 @@ import { MatTableModule, MatPaginatorModule, MatPaginatorIntl, MatButtonModule }
 import { HomeService } from "./home.service";
 import { HomeChartDefinitionsService } from "./home-chart-definitions.service";
 import { getCzechPaginatorIntl } from "../helpers/czech-paginator-intl";
+import { DatachangeService } from "../helpers/datachange.service";
 
 
 @NgModule({
@@ -40,6 +41,7 @@ import { getCzechPaginatorIntl } from "../helpers/czech-paginator-intl";
     ImportService,
     HomeService,
     HomeChartDefinitionsService,
+    DatachangeService,
     { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },
     { provide: MatPaginatorIntl, useValue: getCzechPaginatorIntl() }
   ]
diff --git a/Core/Core/ClientApp/src/app/interfaces/IFile.js b/Core/Core/ClientApp/src/app/interfaces/IFile.js
new file mode 100644
index 0000000..75a9226
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/interfaces/IFile.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=IFile.js.map
\ No newline at end of file
diff --git a/Core/Core/ClientApp/src/app/interfaces/IFile.js.map b/Core/Core/ClientApp/src/app/interfaces/IFile.js.map
new file mode 100644
index 0000000..3b38deb
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/interfaces/IFile.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"IFile.js","sourceRoot":"","sources":["IFile.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/Core/Core/ClientApp/src/app/interfaces/IFile.ts b/Core/Core/ClientApp/src/app/interfaces/IFile.ts
new file mode 100644
index 0000000..46330b2
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/interfaces/IFile.ts
@@ -0,0 +1,5 @@
+export interface IFile {
+  position: number;
+  id: number;
+  name: string;
+}
diff --git a/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js b/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js
new file mode 100644
index 0000000..203f275
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js
@@ -0,0 +1,3 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=IRequestFiles.js.map
\ No newline at end of file
diff --git a/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js.map b/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js.map
new file mode 100644
index 0000000..af4dbe7
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"IRequestFiles.js","sourceRoot":"","sources":["IRequestFiles.ts"],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.ts b/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.ts
new file mode 100644
index 0000000..fa6a76d
--- /dev/null
+++ b/Core/Core/ClientApp/src/app/interfaces/IRequestFiles.ts
@@ -0,0 +1,4 @@
+export interface IRequestFiles {
+  count: number;
+  imports: Array<{ id: number, name: string }>
+}
diff --git a/Core/Core/Core.csproj b/Core/Core/Core.csproj
index 979fda8..47a988b 100644
--- a/Core/Core/Core.csproj
+++ b/Core/Core/Core.csproj
@@ -42,6 +42,8 @@
     <None Remove="ClientApp\src\app\home\components\czech-paginator-intl.ts" />
     <None Remove="ClientApp\src\app\home\home.module.ts" />
     <None Remove="ClientApp\src\app\home\components\import\import.service.ts" />
+    <None Remove="ClientApp\src\app\interfaces\IFile.ts" />
+    <None Remove="ClientApp\src\app\interfaces\IRequestFiles.ts" />
     <None Remove="ClientApp\src\app\login\login.service.ts" />
     <None Remove="ClientApp\src\app\registration\registration.service.ts" />
   </ItemGroup>
@@ -59,6 +61,8 @@
     <TypeScriptCompile Include="ClientApp\src\app\helpers\czech-paginator-intl.ts" />
     <TypeScriptCompile Include="ClientApp\src\app\home\home.module.ts" />
     <TypeScriptCompile Include="ClientApp\src\app\home\components\import\import.service.ts" />
+    <TypeScriptCompile Include="ClientApp\src\app\interfaces\IFile.ts" />
+    <TypeScriptCompile Include="ClientApp\src\app\interfaces\IRequestFiles.ts" />
     <TypeScriptCompile Include="ClientApp\src\app\login\login.service.ts">
       <SubType>Code</SubType>
     </TypeScriptCompile>
-- 
GitLab