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