From 8724d166c76f34d302eb46e9522b0df662c35e47 Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Wed, 7 Aug 2019 14:17:57 +0300
Subject: [PATCH] Enable filter deleting for text and timespan filters

---
 .../components/facet_bar/ActiveFilters.js     |  4 +-
 src/client/components/facet_bar/ChipsArray.js | 39 +++++++++++++++----
 src/client/components/facet_bar/FacetBar.js   |  1 +
 src/client/components/facet_bar/FacetInfo.js  |  4 +-
 src/client/reducers/helpers.js                | 21 ++++++----
 5 files changed, 52 insertions(+), 17 deletions(-)

diff --git a/src/client/components/facet_bar/ActiveFilters.js b/src/client/components/facet_bar/ActiveFilters.js
index 57bae263..f5d9855c 100644
--- a/src/client/components/facet_bar/ActiveFilters.js
+++ b/src/client/components/facet_bar/ActiveFilters.js
@@ -37,6 +37,7 @@ const ActiveFilters = props => {
       facetClass={props.facetClass}
       updateFacetOption={props.updateFacetOption}
       someFacetIsFetching={someFacetIsFetching}
+      fetchFacet={props.fetchFacet}
     />
   );
 };
@@ -49,7 +50,8 @@ ActiveFilters.propTypes = {
   textFilters: PropTypes.object.isRequired,
   timespanFilters: PropTypes.object.isRequired,
   updateFacetOption: PropTypes.func.isRequired,
-  someFacetIsFetching: PropTypes.bool.isRequired
+  someFacetIsFetching: PropTypes.bool.isRequired,
+  fetchFacet: PropTypes.func.isRequired
 };
 
 export default ActiveFilters;
diff --git a/src/client/components/facet_bar/ChipsArray.js b/src/client/components/facet_bar/ChipsArray.js
index d21a9e6b..a706f7f8 100644
--- a/src/client/components/facet_bar/ChipsArray.js
+++ b/src/client/components/facet_bar/ChipsArray.js
@@ -19,13 +19,35 @@ class ChipsArray extends React.Component {
 
   handleDelete = item => () => {
     if (!this.props.someFacetIsFetching) {
-      if (item.filterType === 'uriFilter') {
-        this.props.updateFacetOption({
-          facetClass: this.props.facetClass,
-          facetID: item.facetID,
-          option: item.filterType,
-          value: item.value
-        });
+      switch(item.filterType) {
+        case 'uriFilter':
+          this.props.updateFacetOption({
+            facetClass: this.props.facetClass,
+            facetID: item.facetID,
+            option: item.filterType,
+            value: item.value
+          });
+          break;
+        case 'textFilter':
+          this.props.updateFacetOption({
+            facetClass: this.props.facetClass,
+            facetID: item.facetID,
+            option: item.filterType,
+            value: null
+          });
+          break;
+        case 'timespanFilter': {    
+          this.props.updateFacetOption({
+            facetClass: this.props.facetClass,
+            facetID: item.facetID,
+            option: item.filterType,
+            value: null
+          });
+          this.props.fetchFacet({
+            facetClass: this.props.facetClass,
+            facetID: item.facetID,
+          });
+        }
       }
     }
   };
@@ -91,7 +113,8 @@ ChipsArray.propTypes = {
   data: PropTypes.array.isRequired,
   facetClass: PropTypes.string.isRequired,
   updateFacetOption: PropTypes.func.isRequired,
-  someFacetIsFetching: PropTypes.bool.isRequired
+  someFacetIsFetching: PropTypes.bool.isRequired,
+  fetchFacet: PropTypes.func.isRequired
 };
 
 export default withStyles(styles)(ChipsArray);
diff --git a/src/client/components/facet_bar/FacetBar.js b/src/client/components/facet_bar/FacetBar.js
index de48ee61..1b025d82 100644
--- a/src/client/components/facet_bar/FacetBar.js
+++ b/src/client/components/facet_bar/FacetBar.js
@@ -193,6 +193,7 @@ class FacetBar extends React.Component {
             updateFacetOption={this.props.updateFacetOption}
             fetchResultCount={this.props.fetchResultCount}
             someFacetIsFetching={someFacetIsFetching}
+            fetchFacet={this.props.fetchFacet}
           />
         </Paper>
         {Object.keys(facets).map(facetID => this.renderFacet(facetID, someFacetIsFetching))}
diff --git a/src/client/components/facet_bar/FacetInfo.js b/src/client/components/facet_bar/FacetInfo.js
index a294af00..e694b60b 100644
--- a/src/client/components/facet_bar/FacetInfo.js
+++ b/src/client/components/facet_bar/FacetInfo.js
@@ -91,6 +91,7 @@ class FacetInfo extends React.Component {
                 timespanFilters={timespanFilters}
                 updateFacetOption={this.props.updateFacetOption}
                 someFacetIsFetching={someFacetIsFetching}
+                fetchFacet={this.props.fetchFacet}
               />
             </div>
             <Divider className={classes.facetInfoDivider} />
@@ -112,7 +113,8 @@ FacetInfo.propTypes = {
   fetchingResultCount: PropTypes.bool.isRequired,
   updateFacetOption: PropTypes.func.isRequired,
   fetchResultCount: PropTypes.func.isRequired,
-  someFacetIsFetching: PropTypes.bool.isRequired
+  someFacetIsFetching: PropTypes.bool.isRequired,
+  fetchFacet: PropTypes.func.isRequired
 };
 
 export default withStyles(styles)(FacetInfo);
diff --git a/src/client/reducers/helpers.js b/src/client/reducers/helpers.js
index 2bff9ba5..586a69f1 100644
--- a/src/client/reducers/helpers.js
+++ b/src/client/reducers/helpers.js
@@ -116,13 +116,20 @@ const updateFacetFilter = (state, action) => {
       textFilter: value
     };
   } else if (oldFacet.filterType === 'timespanFilter') {
-    newFacet = {
-      ...state.facets[facetID],
-      timespanFilter: {
-        start: value[0],
-        end: value[1]
-      }
-    };
+    if (value == null) {
+      newFacet = {
+        ...state.facets[facetID],
+        timespanFilter: null
+      };
+    } else {
+      newFacet = {
+        ...state.facets[facetID],
+        timespanFilter: {
+          start: value[0],
+          end: value[1]
+        }
+      };
+    }
   }
   return {
     ...state,
-- 
GitLab