From 15f20883d923bef21f52b64a3e0a9862cc1ca10d Mon Sep 17 00:00:00 2001
From: Sebastien Curt <sebastien.curt@tetras-libre.fr>
Date: Mon, 4 Jul 2022 17:33:26 +0200
Subject: [PATCH] Add select button for annotation filter types + change vu
 visibility on filter change

---
 capsule-prototype/js/MosaicPanelWidget.js | 54 ++++++++++++++++++++---
 1 file changed, 47 insertions(+), 7 deletions(-)

diff --git a/capsule-prototype/js/MosaicPanelWidget.js b/capsule-prototype/js/MosaicPanelWidget.js
index 7655b8b..4aad301 100644
--- a/capsule-prototype/js/MosaicPanelWidget.js
+++ b/capsule-prototype/js/MosaicPanelWidget.js
@@ -34,7 +34,8 @@
                 },
                 filters_type_to_hide: [],
                 filter_label_to_show: [],
-                _followedItems: []
+                _followedItems: [],
+                _filter_type: 0,
             };
 
             const localOptions = $.extend({}, defaultOptions);
@@ -73,6 +74,11 @@
                 }
             }
 
+            const refreshView = function () {
+                emptyPanel();
+                fillPanel();
+            };
+
             const getUrl = function (tagOrDoc, path) {
                 if ('undefined' === typeof path) {
                     let [reg, type] = tagOrDoc.getMetadata("Rekall->Type").split('/');
@@ -85,6 +91,37 @@
                 }
             }
 
+            const createFilterTypeSelector = function() {
+                let selectDiv = $('<div class="filter-type-selector">');
+                selectDiv.addClass("mosaic_filter");
+
+                let outerDiv = $('<div class="mosaic_filter_item mosaic_filter_item_select" style="display: flex; flex-direction: row; justify-content:center; align-items: center; align-content: center; ">');
+
+                let selectElement = $('<select>');
+
+                let createOptionElement =  function (value, text, isSelected){
+                    let option = $('<option>');
+                    option.attr('value', value);
+                    option.text(text);
+                    if (isSelected) {
+                        option.attr('selected', 'selected');
+                    }
+                    return option;
+                }
+
+                selectElement.append(createOptionElement(0, "Filter by type of annotation document", 0 === localOptions._filter_type));
+                selectElement.append(createOptionElement(1, "Filter by tag", 1 === localOptions._filter_type));
+                selectElement.change(function(event) {
+                    localOptions._filter_type = parseInt(selectElement.val());
+                    refreshView();
+                })
+
+                outerDiv.append(selectElement)
+                selectDiv.append(outerDiv);
+
+                return selectDiv;
+            }
+
             const setDivVisibilityForTag = function (div, tag) {
                 if (!localOptions.filter_label_to_show.length) {
                     div.show()
@@ -170,9 +207,15 @@
                     'mosaic_filter_item_all',
                     false
                 ));
+                localOptions.htmlElement().append(createFilterTypeSelector());
                 localOptions.htmlElement().append(resetfilterdiv);
-                localOptions.htmlElement().append(typefilterdiv);
-                localOptions.htmlElement().append(labelsfilterdiv);
+
+                if (localOptions._filter_type === 0) {
+                    localOptions.htmlElement().append(typefilterdiv);
+                }
+                if (localOptions._filter_type === 1){
+                    localOptions.htmlElement().append(labelsfilterdiv);
+                }
                 // eslint-disable-next-line no-undef
                 let labels = new Set();
                 for (let [k, v] of Object.entries(localOptions.rekall().sortings.colors.categories)) {
@@ -252,10 +295,7 @@
                     localOptions._destroyFollowedElements();
                     localOptions.filters_type_to_hide = [];
                 },
-                refresh: function () {
-                    emptyPanel();
-                    fillPanel();
-                }
+                refresh: refreshView
             };
 
         }
-- 
GitLab