From 825a9ea424a220a692eb92ee9275bf2a645c67fe Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Tue, 11 Feb 2020 18:30:42 +0100
Subject: [PATCH] FEAT #12071 TIME 1:20 Front delete note

---
 .../app/notes/notes-list.component.html       |  5 ++++
 .../app/notes/notes-list.component.scss       |  9 +++++++
 src/frontend/app/notes/notes.component.ts     | 27 +++++++++++++++++--
 src/frontend/lang/lang-en.ts                  |  3 +++
 src/frontend/lang/lang-fr.ts                  |  3 +++
 src/frontend/lang/lang-nl.ts                  |  3 +++
 6 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/src/frontend/app/notes/notes-list.component.html b/src/frontend/app/notes/notes-list.component.html
index 8594fa8a2ab..b33a27d1360 100644
--- a/src/frontend/app/notes/notes-list.component.html
+++ b/src/frontend/app/notes/notes-list.component.html
@@ -13,6 +13,11 @@
             <mat-card-subtitle>{{note.entity_label}}</mat-card-subtitle>
             <mat-card-subtitle title='{{note.creation_date | fullDate}}' class="dateNote">{{note.creation_date
                 | timeAgo}}</mat-card-subtitle>
+            <mat-card-subtitle *ngIf="note.user_id == headerService.user.id" class="removeNote">
+                <button matSuffix mat-icon-button title='{{lang.removeNote}}' (click)="removeNote(note)">
+                    <mat-icon fontSet="far" fontIcon="fa-trash-alt fa-2x"></mat-icon>
+                </button>
+            </mat-card-subtitle>
         </mat-card-header>
         <mat-card-content>
             <p class="noteTextContent">
diff --git a/src/frontend/app/notes/notes-list.component.scss b/src/frontend/app/notes/notes-list.component.scss
index b114542d7df..2f52bd4f41a 100644
--- a/src/frontend/app/notes/notes-list.component.scss
+++ b/src/frontend/app/notes/notes-list.component.scss
@@ -46,6 +46,15 @@
     color: $primary;
 }
 
+.removeNote {
+    position: absolute;
+    font-size: 12px;
+    margin: 0;
+    top: 22px;
+    color: red;
+    right: 0px;
+}
+
 .noteTextContent {
     white-space: pre-line;
     padding: 30px;
diff --git a/src/frontend/app/notes/notes.component.ts b/src/frontend/app/notes/notes.component.ts
index d13baca8450..a76ddf16eca 100644
--- a/src/frontend/app/notes/notes.component.ts
+++ b/src/frontend/app/notes/notes.component.ts
@@ -2,8 +2,11 @@ import { Component, Input, OnInit, EventEmitter, Output } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { LANG } from '../translate.component';
 import { NotificationService } from '../notification.service';
-import { tap, finalize, catchError } from 'rxjs/operators';
+import { tap, finalize, catchError, exhaustMap, filter } from 'rxjs/operators';
 import { of } from 'rxjs';
+import { HeaderService } from '../../service/header.service';
+import { ConfirmComponent } from '../../plugins/modal/confirm.component';
+import { MatDialogRef, MatDialog } from '@angular/material';
 
 @Component({
     selector: 'app-notes-list',
@@ -25,9 +28,13 @@ export class NotesListComponent implements OnInit {
 
     @Output('reloadBadgeNotes') reloadBadgeNotes = new EventEmitter<string>();
 
+    dialogRef: MatDialogRef<any>;
+
     constructor(
         public http: HttpClient,
-        private notify: NotificationService
+        private notify: NotificationService,
+        private headerService: HeaderService,
+        public dialog: MatDialog
     ) { }
 
     ngOnInit(): void {
@@ -56,4 +63,20 @@ export class NotesListComponent implements OnInit {
             this.loading = false;
         });
     }
+
+    removeNote(note: any) {
+        this.dialogRef = this.dialog.open(ConfirmComponent, { autoFocus: false, disableClose: false, data: { title: this.lang.confirmRemoveNote, msg: this.lang.confirmAction } });
+
+        this.dialogRef.afterClosed().pipe(
+            filter((data: string) => data === 'ok'),
+            exhaustMap(() => this.http.request('DELETE', '../../rest/notes/' + note.id)),
+            tap(() => {
+                var index = this.notes.findIndex(elem => elem.id == note.id)
+                if (index > -1) {
+                    this.notes.splice(index, 1);
+                }
+                this.notify.success(this.lang.noteRemoved);
+            })
+        ).subscribe();
+    }
 }
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index 664414be538..f09c432a95f 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -1470,6 +1470,9 @@ export const LANG_EN = {
     "visaNote": "Order",
     "chooseBAN": "Choose a BAN",
     "click": "Click",
+    "removeNote" : "Remove note",
+    "noteRemoved" : "Note deleted",
+    "confirmRemoveNote" : "Note deletion",
     "inSignatureBook_doc" : "Put the main document in signature book",
     "inShipping_doc" : "Put the main document in send Maileva",
     "preRequisiteMissing": "Prerequisite missing for OnlyOffice : netcat",
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 6edc1937aa9..e39b787dd46 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -1509,6 +1509,9 @@ export const LANG_FR = {
     "visaNote": "Consigne",
     "chooseBAN": "Choisissez une BAN",
     "click": "Cliquez",
+    "removeNote" : "Supprimer l'annotation",
+    "noteRemoved" : "Annotation supprimée",
+    "confirmRemoveNote" : "Suppression de l'annotation",
     "inSignatureBook_doc" : "Intégrer le document principal au parapheur",
     "inShipping_doc" : "Intégrer le document principal à l'envoi Maileva",
     "preRequisiteMissing": "Prérequis manquant pour OnlyOffice : netcat",
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index f53f8ee87f5..7a6beaa5e55 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -1495,6 +1495,9 @@ export const LANG_NL = {
     "visaNote": "Order", //_TO_TRANSLATE
     "chooseBAN": "Choose a BAN", //_TO_TRANSLATE
     "click": "Click", //_TO_TRANSLATE
+    "removeNote" : "Remove note", //_TO_TRANSLATE
+    "noteRemoved" : "Note deleted", //_TO_TRANSLATE
+    "confirmRemoveNote" : "Note deletion", //_TO_TRANSLATE
     "inSignatureBook_doc" : "Put the main document in signature book", //_TO_TRANSLATE
     "inShipping_doc" : "Intégrer le document principal  in send Maileva", //_TO_TRANSLATE
     "preRequisiteMissing": "Prerequisite missing for OnlyOffice : netcat", //_TO_TRANSLATE
-- 
GitLab