From 6f412a79bad20f623b095bc2262ac556f05d5f8d Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Fri, 4 Jan 2019 20:00:11 +0100
Subject: [PATCH] FEAT #8956 add erase all filters button

---
 .../list/filters/filters-tool.component.html  |  2 ++
 .../list/filters/filters-tool.component.scss  | 12 ++++++++++
 .../list/filters/filters-tool.component.ts    | 22 ++++++++++++++++++-
 src/frontend/lang/lang-en.ts                  |  1 +
 src/frontend/lang/lang-fr.ts                  |  3 +++
 src/frontend/lang/lang-nl.ts                  |  1 +
 6 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/src/frontend/app/list/filters/filters-tool.component.html b/src/frontend/app/list/filters/filters-tool.component.html
index d18fd7e76c5..f51946b4a38 100644
--- a/src/frontend/app/list/filters/filters-tool.component.html
+++ b/src/frontend/app/list/filters/filters-tool.component.html
@@ -60,6 +60,8 @@
     </mat-menu>
 </mat-button-toggle-group>
 <div class="filterBadges">
+    <span *ngIf="haveFilters()" class="label badge-eraser" title="{{lang.eraseAllFilters}}" (click)="this.listProperties.search='';removeFilters();"><i class="fas fa-eraser"></i></span>
+
     <span class="label badge-search" *ngIf="this.listProperties.search !== ''" title="{{lang.subject}} / {{lang.chronoNumber}}" (click)="this.listProperties.search='';updateFilters();">{{this.listProperties.search}}
         <i class="fa fa-times-circle"></i></span>
     <span class="label badge-categories" title="{{lang.categories}}" *ngFor="let category of this.listProperties.categories; let i=index" (click)="removeFilter('categories', i)">{{category.label}}
diff --git a/src/frontend/app/list/filters/filters-tool.component.scss b/src/frontend/app/list/filters/filters-tool.component.scss
index 82eb42f01ab..b9d1504e159 100644
--- a/src/frontend/app/list/filters/filters-tool.component.scss
+++ b/src/frontend/app/list/filters/filters-tool.component.scss
@@ -18,6 +18,18 @@
     font-size: 11px;
 }
 
+.filterBadges>.badge-eraser {
+    margin: 5px;
+    background: none;
+    cursor: pointer;
+    color: red;
+    font-size: 20px;
+}
+
+.filterBadges>.label {
+    white-space: inherit;
+}
+
 .filterBadges>.badge-search {
     margin: 5px;
     background: #666;
diff --git a/src/frontend/app/list/filters/filters-tool.component.ts b/src/frontend/app/list/filters/filters-tool.component.ts
index dfe3c0a0869..49664046508 100644
--- a/src/frontend/app/list/filters/filters-tool.component.ts
+++ b/src/frontend/app/list/filters/filters-tool.component.ts
@@ -134,6 +134,27 @@ export class FiltersToolComponent implements OnInit {
         this.updateFilters();
     }
 
+    removeFilters() {
+        Object.keys(this.listProperties).forEach((key) => {
+            if (Array.isArray(this.listProperties[key])) {
+                this.listProperties[key] = [];
+            } else if (key == 'search') {
+                this.listProperties[key] = '';
+            }
+        });
+        this.updateFilters();
+    }
+
+    haveFilters() {
+        let state = false;
+        Object.keys(this.listProperties).forEach((key) => {
+            if ((Array.isArray(this.listProperties[key]) && this.listProperties[key].length > 0) || (key == 'search' && this.listProperties[key] != '')) {
+                state = true;
+            }
+        });
+        return state;
+    }
+
     setInputSearch(value: string) {
         $j('.metaSearch').focus();
         this.metaSearchInput = value;
@@ -168,7 +189,6 @@ export class FiltersToolComponent implements OnInit {
 
         this.http.get('../../rest/resourcesList/users/' + this.currentBasketInfo.ownerId + '/groups/' + this.currentBasketInfo.groupId + '/baskets/' + this.currentBasketInfo.basketId + '/filters?init' + this.filtersListService.getUrlFilters())
             .subscribe((data: any) => {
-                console.log(data);
                 data.categories.forEach((element: any) => {
                     if (this.listProperties.categories.map((category: any) => (category.id)).indexOf(element.id) === -1) {
                         this.stateGroups[0].names.push(
diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts
index 75fc602df1c..912d7553d13 100755
--- a/src/frontend/lang/lang-en.ts
+++ b/src/frontend/lang/lang-en.ts
@@ -731,4 +731,5 @@ export const LANG_EN = {
     "configurationUpdated"                              : "Configuration updated",
     "port"                                              : "Port",
     "mailFrom"                                          : "Mail address used",
+    "eraseAllFilters"                                   : "Erase all filters",
 };
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 0b9f225f796..01560d5c1df 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -757,4 +757,7 @@ export const LANG_FR = {
     "configurationUpdated"                              : "Configuration mise à jour",
     "port"                                              : "Port",
     "mailFrom"                                          : "Adresse e-mail utilisée",
+    "eraseAllFilters"                                   : "Effacer tous les filtres",
 };
+
+
diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts
index c276ac418ac..4944248ab00 100755
--- a/src/frontend/lang/lang-nl.ts
+++ b/src/frontend/lang/lang-nl.ts
@@ -760,4 +760,5 @@ export const LANG_NL = {
     "configurationUpdated" : "_TO_TRANSLATE",
     "port" : "_TO_TRANSLATE",
     "mailFrom" : "_TO_TRANSLATE",
+    "eraseAllFilters" : "_TO_TRANSLATE",
 };
-- 
GitLab