From c19e3b0e6ed4ec343782e393c23445399470ca28 Mon Sep 17 00:00:00 2001
From: Thisari Muthuwahandi <thisari.muthuwahandi@mni.thm.de>
Date: Mon, 8 Apr 2019 14:47:58 +0200
Subject: [PATCH] Improve export function

---
 .../comment-export/comment-export.component.html     | 12 +++++-------
 .../comment-export/comment-export.component.ts       | 10 ++++------
 .../comment-creator-page.component.ts                | 12 +++++-------
 .../shared/comment-list/comment-list.component.html  |  7 +++----
 src/app/services/http/comment.service.ts             |  5 +++--
 src/assets/i18n/creator/de.json                      |  6 +++++-
 src/assets/i18n/creator/en.json                      |  6 +++++-
 7 files changed, 30 insertions(+), 28 deletions(-)

diff --git a/src/app/components/creator/_dialogs/comment-export/comment-export.component.html b/src/app/components/creator/_dialogs/comment-export/comment-export.component.html
index 051640832..a09413055 100644
--- a/src/app/components/creator/_dialogs/comment-export/comment-export.component.html
+++ b/src/app/components/creator/_dialogs/comment-export/comment-export.component.html
@@ -4,13 +4,11 @@
   <mat-radio-button #csv value="csv">CSV</mat-radio-button>
 </mat-radio-group>
 <div id="csvBlock">
-  <mat-hint>Please select a delimiter:</mat-hint>
+  <mat-hint>{{'comment-page.delimiter' | translate}}</mat-hint>
   <mat-radio-group (change)="onChange($event)" id="csvOptions">
-    <mat-radio-button value="comma" #comma checked>Comma</mat-radio-button>
-    <mat-radio-button value="semicolon" #semicolon>Semicolon</mat-radio-button>
+    <mat-radio-button value="comma" #comma checked>{{'comment-page.comma' | translate}}</mat-radio-button>
+    <mat-radio-button value="semicolon" #semicolon>{{'comment-page.semicolon' | translate}}</mat-radio-button>
   </mat-radio-group>
 </div>
-<button mat-raised-button color="primary" (click)="onExport()">Export
-</button>
-<button mat-raised-button color="warn" (click)="onNoClick()">Abort
-</button>
\ No newline at end of file
+<button mat-raised-button color="primary" (click)="onExport()">{{'comment-page.export' | translate}}</button>
+<button mat-raised-button color="warn" (click)="onNoClick()">{{'comment-page.abort' | translate}}</button>
diff --git a/src/app/components/creator/_dialogs/comment-export/comment-export.component.ts b/src/app/components/creator/_dialogs/comment-export/comment-export.component.ts
index 4398184a5..34b04cf14 100644
--- a/src/app/components/creator/_dialogs/comment-export/comment-export.component.ts
+++ b/src/app/components/creator/_dialogs/comment-export/comment-export.component.ts
@@ -21,7 +21,7 @@ export class CommentExportComponent implements OnInit {
   ) { }
 
   ngOnInit() {
-    this.currentButton = '1';
+    this.currentButton = 'json';
     this.roomId = localStorage.getItem(`roomId`);
     this.getComments();
   }
@@ -59,14 +59,12 @@ export class CommentExportComponent implements OnInit {
   }
 
   exportCsv(delimiter: string) {
-    if (this.comments.length === 0) {
-      return;
-    }
     let csv: string;
-    const keyFields = Object.keys(this.comments[0]).map(i => `"${i}"`).join(delimiter) + '\n';
+    const keyFields = Object.keys(this.comments[0]).map(i => `"${i}"`).join(delimiter) + '\r\n';
     let valueFields = '';
     this.comments.forEach(element => {
-      valueFields += Object.values(element).map(i => `"${i}"`).join(delimiter) + '\n';
+      element.body = element.body.replace(/[\r\n]/g, ' ').replace(/"/g, '""');
+      valueFields += Object.values(element).map(i => `"${i}"`).join(delimiter) + '\r\n';
     });
     csv = keyFields + valueFields;
     const myBlob = new Blob([csv], { type: 'text/csv' });
diff --git a/src/app/components/creator/comment-creator-page/comment-creator-page.component.ts b/src/app/components/creator/comment-creator-page/comment-creator-page.component.ts
index 7e85fae6a..e9a75b8ad 100644
--- a/src/app/components/creator/comment-creator-page/comment-creator-page.component.ts
+++ b/src/app/components/creator/comment-creator-page/comment-creator-page.component.ts
@@ -23,13 +23,11 @@ export class CommentCreatorPageComponent implements OnInit {
   }
 
   onClick(): void {
-    this.openSubmitDialog();
     this.commentService.setState(false);
-  }
-
-  openSubmitDialog(): void {
-    const dialogRef = this.dialog.open(CommentExportComponent, {
-      width: '400px', height: '300px'
-    });
+    if (this.dialog.openDialogs.length === 0) {
+      const dialogRef = this.dialog.open(CommentExportComponent, {
+        width: '400px', height: '300px'
+      });
+    }
   }
 }
diff --git a/src/app/components/shared/comment-list/comment-list.component.html b/src/app/components/shared/comment-list/comment-list.component.html
index d703f1cd6..b660c42ee 100644
--- a/src/app/components/shared/comment-list/comment-list.component.html
+++ b/src/app/components/shared/comment-list/comment-list.component.html
@@ -3,15 +3,14 @@
     <mat-icon class="search-icon">search</mat-icon>
   </mat-label>
   <input #searchBox placeholder="{{ 'comment-list-page.search-box-placeholder-text' | translate }}"
-         (input)="searchComments(searchBox.value)">
+    (input)="searchComments(searchBox.value)">
   <button mat-button *ngIf="searchBox.value" (click)="hideCommentsList=false; searchBox.value=''">
     <mat-icon>close</mat-icon>
   </button>
-
-  <button mat-button *ngIf="!searchBox.value && userRole == '1'" color="accent" [matTooltip]="'Export comments'" (click)="export(true)">
+  <button mat-button *ngIf="!searchBox.value && userRole == '1'" [disabled]="!comments.length > 0" color="accent"
+    [matTooltip]="'Export comments'" (click)="export(true)">
     <mat-icon class="add-icon">cloud_download</mat-icon>
   </button>
-
   <button mat-button *ngIf="!searchBox.value" color="accent" (click)="openSubmitDialog()">
     <mat-icon class="add-icon">add_circle</mat-icon>
   </button>
diff --git a/src/app/services/http/comment.service.ts b/src/app/services/http/comment.service.ts
index d28864c36..5eb96ea47 100644
--- a/src/app/services/http/comment.service.ts
+++ b/src/app/services/http/comment.service.ts
@@ -1,6 +1,6 @@
 import { Injectable } from '@angular/core';
 import { HttpClient, HttpHeaders } from '@angular/common/http';
-import { Observable, BehaviorSubject, Subject } from 'rxjs';
+import { Observable, Subject } from 'rxjs';
 import { Comment } from '../../models/comment';
 import { catchError, tap } from 'rxjs/operators';
 import { BaseHttpService } from './base-http.service';
@@ -34,7 +34,8 @@ export class CommentService extends BaseHttpService {
   addComment(comment: Comment): Observable<Comment> {
     const connectionUrl = this.apiUrl.base + this.apiUrl.comment + '/';
     return this.http.post<Comment>(connectionUrl,
-      { roomId: comment.roomId, body: comment.body,
+      {
+        roomId: comment.roomId, body: comment.body,
         read: comment.read, creationTimestamp: comment.creationTimestamp
       }, httpOptions).pipe(
         tap(_ => ''),
diff --git a/src/assets/i18n/creator/de.json b/src/assets/i18n/creator/de.json
index 7905b62d5..41537e07d 100644
--- a/src/assets/i18n/creator/de.json
+++ b/src/assets/i18n/creator/de.json
@@ -82,7 +82,11 @@
     "abort": "Abbrechen",
     "error-comment": "Bitte geben Sie ein Kommentar ein.",
     "error-title": "Bitte geben Sie einen Titel ein.",
-    "error-both-fields": "Bitte füllen Sie alle Felder aus."
+    "error-both-fields": "Bitte füllen Sie alle Felder aus.",
+    "delimiter": "Bitte wählen Sie ein Trennzeichen:",
+    "comma": "Komma",
+    "semicolon": "Semikolon",
+    "export": "Exportieren"
   },
   "comment-list-page": {
     "search-box-placeholder-text": "Kommentare durchsuchen",
diff --git a/src/assets/i18n/creator/en.json b/src/assets/i18n/creator/en.json
index 1a5d6cd7d..9a64abd7d 100644
--- a/src/assets/i18n/creator/en.json
+++ b/src/assets/i18n/creator/en.json
@@ -82,7 +82,11 @@
     "abort": "Cancel",
     "error-title": "Please enter a title.",
     "error-comment": "Please enter a comment.",
-    "error-both-fields": "Please fill in all fields."
+    "error-both-fields": "Please fill in all fields.",
+    "delimiter": "Please select a delimiter:",
+    "comma": "Comma",
+    "semicolon": "Semicolon",
+    "export": "Export"
   },
   "comment-list-page": {
     "search-box-placeholder-text": "Search in comments",
-- 
GitLab