From 9a45f024582a7997303637085e6e44ff09d6b7e0 Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Wed, 9 Oct 2019 09:42:08 +0200
Subject: [PATCH] feat: preserve filter selection

---
 .../databrowserModule/databrowser.module.ts   |  6 ++++-
 .../databrowser/databrowser.component.ts      |  3 +--
 .../databrowser/databrowser.template.html     |  2 +-
 .../modalityPicker.template.html              |  1 +
 .../util/appendFilterModality.pipe.ts         | 24 +++++++++++++++++++
 .../util/resetCounterModality.pipe.ts         | 17 +++++++++++++
 6 files changed, 49 insertions(+), 4 deletions(-)
 create mode 100644 src/ui/databrowserModule/util/appendFilterModality.pipe.ts
 create mode 100644 src/ui/databrowserModule/util/resetCounterModality.pipe.ts

diff --git a/src/ui/databrowserModule/databrowser.module.ts b/src/ui/databrowserModule/databrowser.module.ts
index 1e7469cda..aa37e7e3e 100644
--- a/src/ui/databrowserModule/databrowser.module.ts
+++ b/src/ui/databrowserModule/databrowser.module.ts
@@ -32,6 +32,8 @@ import { GetKgSchemaIdFromFullIdPipe } from "./util/getKgSchemaIdFromFullId.pipe
 import { PreviewFileIconPipe } from "./preview/previewFileIcon.pipe";
 import { PreviewFileTypePipe } from "./preview/previewFileType.pipe";
 import { SingleDatasetListView } from "./singleDataset/listView/singleDatasetListView.component";
+import { AppendFilerModalityPipe } from "./util/appendFilterModality.pipe";
+import { ResetCounterModalityPipe } from "./util/resetCounterModality.pipe";
 
 @NgModule({
   imports:[
@@ -69,7 +71,9 @@ import { SingleDatasetListView } from "./singleDataset/listView/singleDatasetLis
     RegionBackgroundToRgbPipe,
     GetKgSchemaIdFromFullIdPipe,
     PreviewFileIconPipe,
-    PreviewFileTypePipe
+    PreviewFileTypePipe,
+    AppendFilerModalityPipe,
+    ResetCounterModalityPipe
   ],
   exports:[
     DataBrowser,
diff --git a/src/ui/databrowserModule/databrowser/databrowser.component.ts b/src/ui/databrowserModule/databrowser/databrowser.component.ts
index 5cbf3849e..f7fcc13e7 100644
--- a/src/ui/databrowserModule/databrowser/databrowser.component.ts
+++ b/src/ui/databrowserModule/databrowser/databrowser.component.ts
@@ -71,7 +71,7 @@ export class DataBrowser implements OnChanges, OnDestroy,OnInit{
     )
   }
 
-  ngOnChanges(changes){
+  ngOnChanges(){
 
     this.regions = this.regions.map(r => {
       /**
@@ -111,7 +111,6 @@ export class DataBrowser implements OnChanges, OnDestroy,OnInit{
       .finally(() => {
         this.fetchingFlag = false
         this.dataentriesUpdated.emit(this.dataentries)
-        this.resetFilters()
         this.cdr.markForCheck()
       })
 
diff --git a/src/ui/databrowserModule/databrowser/databrowser.template.html b/src/ui/databrowserModule/databrowser/databrowser.template.html
index 522980dc8..10147fe43 100644
--- a/src/ui/databrowserModule/databrowser/databrowser.template.html
+++ b/src/ui/databrowserModule/databrowser/databrowser.template.html
@@ -143,7 +143,7 @@
         <modality-picker
           iav-stop="click"
           class="w-100"
-          [countedDataM]="countedDataM"
+          [countedDataM]="visibleCountedDataM | resetcounterModalityPipe | appendFilterModalityPipe : [countedDataM]"
           (modalityFilterEmitter)="handleModalityFilterEvent($event)"
           #modalityPickerCmp>
       
diff --git a/src/ui/databrowserModule/modalityPicker/modalityPicker.template.html b/src/ui/databrowserModule/modalityPicker/modalityPicker.template.html
index c5a19766a..0a84ce45d 100644
--- a/src/ui/databrowserModule/modalityPicker/modalityPicker.template.html
+++ b/src/ui/databrowserModule/modalityPicker/modalityPicker.template.html
@@ -1,6 +1,7 @@
 <mat-checkbox
   [checked]="datamodality.visible"
   (change)="toggleModality(datamodality)"
+  [ngClass]="{'muted': datamodality.occurance === 0}"
   *ngFor="let datamodality of countedDataM">
   {{ datamodality.name }} <span class="text-muted">({{ datamodality.occurance }})</span>
 </mat-checkbox>
\ No newline at end of file
diff --git a/src/ui/databrowserModule/util/appendFilterModality.pipe.ts b/src/ui/databrowserModule/util/appendFilterModality.pipe.ts
new file mode 100644
index 000000000..ef7e740c2
--- /dev/null
+++ b/src/ui/databrowserModule/util/appendFilterModality.pipe.ts
@@ -0,0 +1,24 @@
+import { Pipe, PipeTransform } from "@angular/core";
+import { CountedDataModality } from "../databrowser.service";
+
+@Pipe({
+  name: 'appendFilterModalityPipe'
+})
+
+export class AppendFilerModalityPipe implements PipeTransform{
+  public transform(root: CountedDataModality[], appending: CountedDataModality[][]): CountedDataModality[]{
+    let returnArr:CountedDataModality[] = [...root]
+    for (const mods of appending){
+      for (const mod of mods){
+        // preserve the visibility
+        const { visible } = returnArr.find(({ name }) => name === mod.name) || mod
+        returnArr = returnArr.filter(({ name }) => name !== mod.name)
+        returnArr = returnArr.concat({
+          ...mod,
+          visible
+        })
+      }
+    }
+    return returnArr
+  }
+}
\ No newline at end of file
diff --git a/src/ui/databrowserModule/util/resetCounterModality.pipe.ts b/src/ui/databrowserModule/util/resetCounterModality.pipe.ts
new file mode 100644
index 000000000..8f65af67e
--- /dev/null
+++ b/src/ui/databrowserModule/util/resetCounterModality.pipe.ts
@@ -0,0 +1,17 @@
+import { Pipe, PipeTransform } from "@angular/core";
+import { CountedDataModality } from "../databrowser.service";
+
+@Pipe({
+  name: 'resetcounterModalityPipe'
+})
+
+export class ResetCounterModalityPipe implements PipeTransform{
+  public transform(inc: CountedDataModality[]):CountedDataModality[]{
+    return inc.map(({ occurance, ...rest }) => {
+      return {
+        occurance: 0,
+        ...rest
+      }
+    })
+  }
+}
\ No newline at end of file
-- 
GitLab