From b0877a3bf999a690816969ca88402c44a6fac0fd Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Wed, 4 Mar 2020 18:26:03 +0100
Subject: [PATCH] FEAT #12091 TIME 1:40 latinise filters in admin lists

---
 .../action/actions-administration.component.ts |  3 +++
 .../basket/baskets-administration.component.ts |  3 +++
 ...contacts-groups-administration.component.ts |  7 ++++++-
 ...diffusionModels-administration.component.ts | 18 +++++++++++++++++-
 .../group/groups-administration.component.ts   |  3 +++
 ...indexing-models-administration.component.ts |  3 +++
 .../notifications-administration.component.ts  |  3 +++
 .../parameters-administration.component.ts     |  7 ++++++-
 .../priorities-administration.component.ts     |  3 +++
 .../shippings-administration.component.ts      |  7 ++++++-
 .../statuses-administration.component.ts       |  3 +++
 .../tag/tags-administration.component.ts       |  3 +++
 .../templates-administration.component.ts      |  8 +-------
 .../user/users-administration.component.ts     |  3 +++
 src/frontend/service/functions.service.ts      | 15 ++++++++++++++-
 15 files changed, 77 insertions(+), 12 deletions(-)

diff --git a/src/frontend/app/administration/action/actions-administration.component.ts b/src/frontend/app/administration/action/actions-administration.component.ts
index 85c44d8dafc..520f53f4717 100755
--- a/src/frontend/app/administration/action/actions-administration.component.ts
+++ b/src/frontend/app/administration/action/actions-administration.component.ts
@@ -38,6 +38,9 @@ export class ActionsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['id', 'label_action']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/basket/baskets-administration.component.ts b/src/frontend/app/administration/basket/baskets-administration.component.ts
index d67a39065f2..797e35e81b7 100755
--- a/src/frontend/app/administration/basket/baskets-administration.component.ts
+++ b/src/frontend/app/administration/basket/baskets-administration.component.ts
@@ -36,6 +36,9 @@ export class BasketsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template: any, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['basket_id', 'basket_name', 'basket_desc']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts b/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts
index 1421cc95155..b811fefc644 100644
--- a/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts
+++ b/src/frontend/app/administration/contact/group/contacts-groups-administration.component.ts
@@ -8,6 +8,7 @@ import { MatSidenav } from '@angular/material/sidenav';
 import { MatSort } from '@angular/material/sort';
 import { MatTableDataSource } from '@angular/material/table';
 import { AppService } from '../../../../service/app.service';
+import {FunctionsService} from "../../../../service/functions.service";
 
 declare function $j(selector: any): any;
 
@@ -67,13 +68,17 @@ export class ContactsGroupsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['label', 'description']);
+        };
     }
 
     constructor(
         public http: HttpClient, 
         private notify: NotificationService, 
         private headerService: HeaderService,
-        public appService: AppService
+        public appService: AppService,
+        public functions: FunctionsService
     ) {
         $j("link[href='merged_css.php']").remove();
     }
diff --git a/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts b/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts
index 43fb7862601..b4d0a229223 100755
--- a/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts
+++ b/src/frontend/app/administration/diffusionModel/diffusionModels-administration.component.ts
@@ -13,6 +13,8 @@ import { tap } from 'rxjs/internal/operators/tap';
 import { catchError, map, finalize, filter, exhaustMap } from 'rxjs/operators';
 import { of } from 'rxjs';
 import { ConfirmComponent } from '../../../plugins/modal/confirm.component';
+import {FunctionsService} from "../../../service/functions.service";
+import {LatinisePipe} from "ngx-pipes";
 
 @Component({
     templateUrl: "diffusionModels-administration.component.html",
@@ -39,6 +41,18 @@ export class DiffusionModelsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim();
         filterValue = filterValue.toLowerCase();
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            let filterReturn = false;
+            filter = this.latinisePipe.transform(filter);
+            this.displayedColumns.forEach((column:any) => {
+                if (column === 'description' || column === 'typeLabel') {
+                    filterReturn = filterReturn || this.latinisePipe.transform(template[column].toLowerCase()).includes(filter);
+                } else if (column === 'label') {
+                    filterReturn = filterReturn || this.latinisePipe.transform(template['title'].toLowerCase()).includes(filter);
+                }
+            });
+            return filterReturn;
+        };
     }
 
     constructor(
@@ -46,7 +60,9 @@ export class DiffusionModelsAdministrationComponent implements OnInit {
         private notify: NotificationService,
         public dialog: MatDialog,
         private headerService: HeaderService,
-        public appService: AppService
+        public appService: AppService,
+        public functions: FunctionsService,
+        private latinisePipe: LatinisePipe
     ) { }
 
     async ngOnInit(): Promise<void> {
diff --git a/src/frontend/app/administration/group/groups-administration.component.ts b/src/frontend/app/administration/group/groups-administration.component.ts
index 7d58b9f524f..7da00bc65c5 100755
--- a/src/frontend/app/administration/group/groups-administration.component.ts
+++ b/src/frontend/app/administration/group/groups-administration.component.ts
@@ -42,6 +42,9 @@ export class GroupsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim();
         filterValue = filterValue.toLowerCase();
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['group_id', 'group_desc']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts b/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts
index 231540b3078..f379c3f1ed2 100644
--- a/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts
+++ b/src/frontend/app/administration/indexingModel/indexing-models-administration.component.ts
@@ -48,6 +48,9 @@ export class IndexingModelsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['id', 'label']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/notification/notifications-administration.component.ts b/src/frontend/app/administration/notification/notifications-administration.component.ts
index dd424f1f1dd..9d6af481a8b 100755
--- a/src/frontend/app/administration/notification/notifications-administration.component.ts
+++ b/src/frontend/app/administration/notification/notifications-administration.component.ts
@@ -54,6 +54,9 @@ export class NotificationsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['notification_id', 'description']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/parameter/parameters-administration.component.ts b/src/frontend/app/administration/parameter/parameters-administration.component.ts
index 6b40c27b73f..6695de0b655 100755
--- a/src/frontend/app/administration/parameter/parameters-administration.component.ts
+++ b/src/frontend/app/administration/parameter/parameters-administration.component.ts
@@ -8,6 +8,7 @@ import { MatSidenav } from '@angular/material/sidenav';
 import { MatSort } from '@angular/material/sort';
 import { MatTableDataSource } from '@angular/material/table';
 import { AppService } from '../../../service/app.service';
+import {FunctionsService} from "../../../service/functions.service";
 
 declare function $j(selector: any): any;
 
@@ -36,7 +37,8 @@ export class ParametersAdministrationComponent implements OnInit {
         public http: HttpClient, 
         private notify: NotificationService, 
         private headerService: HeaderService,
-        public appService: AppService
+        public appService: AppService,
+        public functions: FunctionsService
     ) {
         $j("link[href='merged_css.php']").remove();
     }
@@ -45,6 +47,9 @@ export class ParametersAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template: any, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['id', 'description', 'value']);
+        };
     }
 
     ngOnInit(): void {
diff --git a/src/frontend/app/administration/priority/priorities-administration.component.ts b/src/frontend/app/administration/priority/priorities-administration.component.ts
index 7f96d42fa6a..c3eb2c56a61 100755
--- a/src/frontend/app/administration/priority/priorities-administration.component.ts
+++ b/src/frontend/app/administration/priority/priorities-administration.component.ts
@@ -36,6 +36,9 @@ export class PrioritiesAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template: any, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['id', 'label', 'delays']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/shipping/shippings-administration.component.ts b/src/frontend/app/administration/shipping/shippings-administration.component.ts
index a8bd9c518fa..7ae43b7846c 100644
--- a/src/frontend/app/administration/shipping/shippings-administration.component.ts
+++ b/src/frontend/app/administration/shipping/shippings-administration.component.ts
@@ -8,6 +8,7 @@ import { MatSidenav } from '@angular/material/sidenav';
 import { MatSort } from '@angular/material/sort';
 import { MatTableDataSource } from '@angular/material/table';
 import { AppService } from '../../../service/app.service';
+import {FunctionsService} from "../../../service/functions.service";
 
 declare function $j(selector: any): any;
 
@@ -36,7 +37,8 @@ export class ShippingsAdministrationComponent implements OnInit {
         public http: HttpClient, 
         private notify: NotificationService, 
         private headerService: HeaderService,
-        public appService: AppService
+        public appService: AppService,
+        public functions: FunctionsService
     ) {
         $j("link[href='merged_css.php']").remove();
     }
@@ -45,6 +47,9 @@ export class ShippingsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template: any, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['label', 'description', 'accountid']);
+        };
     }
 
     ngOnInit(): void {
diff --git a/src/frontend/app/administration/status/statuses-administration.component.ts b/src/frontend/app/administration/status/statuses-administration.component.ts
index ab5fdbee24b..4e99a00eb18 100755
--- a/src/frontend/app/administration/status/statuses-administration.component.ts
+++ b/src/frontend/app/administration/status/statuses-administration.component.ts
@@ -35,6 +35,9 @@ export class StatusesAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['id', 'label_status']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/tag/tags-administration.component.ts b/src/frontend/app/administration/tag/tags-administration.component.ts
index d85cc564e5f..2d75e3d6c1b 100644
--- a/src/frontend/app/administration/tag/tags-administration.component.ts
+++ b/src/frontend/app/administration/tag/tags-administration.component.ts
@@ -37,6 +37,9 @@ export class TagsAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template: any, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['label']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/app/administration/template/templates-administration.component.ts b/src/frontend/app/administration/template/templates-administration.component.ts
index d9dd63d0b01..a5fc68222f9 100755
--- a/src/frontend/app/administration/template/templates-administration.component.ts
+++ b/src/frontend/app/administration/template/templates-administration.component.ts
@@ -39,13 +39,7 @@ export class TemplatesAdministrationComponent implements OnInit {
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
         this.dataSource.filterPredicate = (template, filter: string) => {
-            var filterReturn = false;
-            this.displayedColumns.forEach(function(column:any) {
-                if (column != 'actions') {
-                    filterReturn = filterReturn || template[column].toLowerCase().includes(filter);
-                }
-            });
-            return filterReturn;
+            return this.functions.filterUnSensitive(template, filter, ['template_label', 'template_comment', 'template_type', 'template_target']);
         };
     }
 
diff --git a/src/frontend/app/administration/user/users-administration.component.ts b/src/frontend/app/administration/user/users-administration.component.ts
index 85fa835cd68..ff656176847 100755
--- a/src/frontend/app/administration/user/users-administration.component.ts
+++ b/src/frontend/app/administration/user/users-administration.component.ts
@@ -53,6 +53,9 @@ export class UsersAdministrationComponent implements OnInit {
         filterValue = filterValue.trim(); // Remove whitespace
         filterValue = filterValue.toLowerCase(); // MatTableDataSource defaults to lowercase matches
         this.dataSource.filter = filterValue;
+        this.dataSource.filterPredicate = (template, filter: string) => {
+            return this.functions.filterUnSensitive(template, filter, ['id', 'user_id', 'lastname', 'firstname', 'mail']);
+        };
     }
 
     constructor(
diff --git a/src/frontend/service/functions.service.ts b/src/frontend/service/functions.service.ts
index d066a5c9e07..5a517c426fd 100644
--- a/src/frontend/service/functions.service.ts
+++ b/src/frontend/service/functions.service.ts
@@ -1,12 +1,13 @@
 import { Injectable } from '@angular/core';
 import { LANG } from '../app/translate.component';
+import {LatinisePipe} from "ngx-pipes";
 
 @Injectable()
 export class FunctionsService {
 
     lang: any = LANG;
 
-    constructor() { }
+    constructor(public latinisePipe: LatinisePipe) { }
 
     empty(value: any) {
         if (value === null || value === undefined) {
@@ -77,4 +78,16 @@ export class FunctionsService {
         }
         return data[sortHeaderId];
     }
+
+    filterUnSensitive(template: any, filter: string, filteredColumns: any) {
+        let filterReturn = false;
+        filter = this.latinisePipe.transform(filter);
+        filteredColumns.forEach((column:any) => {
+            if (typeof template[column] !== 'string') {
+                template[column] = JSON.stringify(template[column]);
+            }
+            filterReturn = filterReturn || this.latinisePipe.transform(template[column].toLowerCase()).includes(filter);
+        });
+        return filterReturn;
+    }
 }
-- 
GitLab