From 2b1f75c30d5977f5717b38cc9efc60fa69eee7dd Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Thu, 13 Jun 2019 12:37:44 +0300
Subject: [PATCH] Prevent selecting when parent has been selected

---
 .../components/facet_bar/HierarchicalFacet.js    | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/client/components/facet_bar/HierarchicalFacet.js b/src/client/components/facet_bar/HierarchicalFacet.js
index 4a292be2..b403a6e4 100644
--- a/src/client/components/facet_bar/HierarchicalFacet.js
+++ b/src/client/components/facet_bar/HierarchicalFacet.js
@@ -93,8 +93,6 @@ class HierarchicalFacet extends Component {
       if (this.props.updatedFacet === this.props.facetID) {
         if (has(this.props.updatedFilter, 'path')) {
           const treeObj = this.props.updatedFilter;
-
-
           let newTreeData = changeNodeAtPath({
             treeData: this.state.treeData,
             getNodeKey: ({ treeIndex }) =>  treeIndex,
@@ -115,8 +113,6 @@ class HierarchicalFacet extends Component {
               }
             }
           });
-
-
           this.setState({ treeData: newTreeData });
         }
       }
@@ -155,6 +151,7 @@ class HierarchicalFacet extends Component {
   recursiveSelect = (nodes, selected) => {
     nodes.forEach(node => {
       node.selected = selected ? 'true' : 'false';
+      node.disabled = selected ? 'true' : 'false';
       if (has(node, 'children')) {
         this.recursiveSelect(node.children, selected);
       }
@@ -178,8 +175,9 @@ class HierarchicalFacet extends Component {
 
   generateNodeProps = treeObj => {
     const { uriFilter} = this.props.facet;
+    const { node } = treeObj;
     let selectedCount = uriFilter == null ? 0 : Object.keys(this.props.facet.uriFilter).length;
-    let isSelected = treeObj.node.selected === 'true' ? true : false;
+    let isSelected = node.selected === 'true' ? true : false;
     return {
       title: (
         <FormControlLabel
@@ -191,14 +189,16 @@ class HierarchicalFacet extends Component {
                 /* non-hierarchical facet:
                 prevent selecting values with 0 hits (which may appear based on earlier selections): */
                 (this.props.facet.type !== 'hierarchical'
-                && treeObj.node.instanceCount == 0
-                && treeObj.node.selected === 'false')
+                && node.instanceCount == 0
+                && node.selected === 'false')
                 // prevent selecting unknown value:
-                || treeObj.node.prefLabel == 'Unknown'
+                || node.prefLabel == 'Unknown'
                 // prevent selecting when another facet is still updating:
                 || this.props.someFacetIsFetching
                 // prevent selecting all facet values:
                 || (selectedCount >= this.props.facet.distinctValueCount - 1 && !isSelected)
+                // prevent selecting when parent has been selected
+                || node.disabled === 'true'
               }
               onChange={this.handleCheckboxChange(treeObj)}
               value={treeObj.node.id}
-- 
GitLab