From 65f401495fea1bb2c40b271c8447ea5dc2b4a492 Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Fri, 6 Sep 2019 12:09:10 +0300
Subject: [PATCH] Add parent property to facet config

---
 src/server/sparql/FacetConfigsMMM.js      | 5 +++++
 src/server/sparql/FacetValues.js          | 6 ++++++
 src/server/sparql/Mappers.js              | 2 +-
 src/server/sparql/SparqlQueriesGeneral.js | 7 +++----
 4 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/server/sparql/FacetConfigsMMM.js b/src/server/sparql/FacetConfigsMMM.js
index 7af24937..50097f03 100644
--- a/src/server/sparql/FacetConfigsMMM.js
+++ b/src/server/sparql/FacetConfigsMMM.js
@@ -74,6 +74,7 @@ export const facetConfigs = {
       label: 'Production place',
       labelPath: '^crm:P108_has_produced/crm:P7_took_place_at/skos:prefLabel',
       predicate: '^crm:P108_has_produced/crm:P7_took_place_at',
+      parentProperty: 'gvp:broaderPreferred',
       parentPredicate: '^crm:P108_has_produced/crm:P7_took_place_at/gvp:broaderPreferred+',
       type: 'hierarchical',
     },
@@ -102,6 +103,7 @@ export const facetConfigs = {
       label: 'Transfer of custody place',
       labelPath: '^crm:P30_transferred_custody_of/crm:P7_took_place_at/skos:prefLabel',
       predicate: '^crm:P30_transferred_custody_of/crm:P7_took_place_at',
+      parentProperty: 'gvp:broaderPreferred',
       parentPredicate: '^crm:P30_transferred_custody_of/crm:P7_took_place_at/gvp:broaderPreferred+',
       type: 'hierarchical',
     },
@@ -315,6 +317,7 @@ export const facetConfigs = {
       label: 'Place',
       labelPath: 'crm:P7_took_place_at/skos:prefLabel',
       predicate: 'crm:P7_took_place_at',
+      parentProperty: 'gvp:broaderPreferred',
       parentPredicate: 'crm:P7_took_place_at/gvp:broaderPreferred+',
       type: 'hierarchical',
     },
@@ -383,6 +386,7 @@ export const facetConfigs = {
       `,
       labelPath: '^crm:P11_had_participant/crm:P7_took_place_at/skos:prefLabel',
       predicate: '^crm:P11_had_participant/crm:P7_took_place_at',
+      parentProperty: 'gvp:broaderPreferred',
       parentPredicate: '^crm:P11_had_participant/crm:P7_took_place_at/gvp:broaderPreferred+',
       type: 'hierarchical',
     },
@@ -421,6 +425,7 @@ export const facetConfigs = {
       label: 'Area',
       labelPath: 'gvp:broaderPreferred/skos:prefLabel',
       predicate: 'gvp:broaderPreferred',
+      parentProperty: 'gvp:broaderPreferred',
       parentPredicate: 'gvp:broaderPreferred+',
       type: 'hierarchical',
     },
diff --git a/src/server/sparql/FacetValues.js b/src/server/sparql/FacetValues.js
index 841d3b68..386ce1f1 100644
--- a/src/server/sparql/FacetValues.js
+++ b/src/server/sparql/FacetValues.js
@@ -58,6 +58,7 @@ export const getFacet = async ({
   let selectedNoHitsBlock = '# no filters from other facets';
   let filterBlock = '# no filters';
   let parentBlock = '# no parents';
+  let parentsForFacetValues = '# no parents for facet values';
   if (constraints !== null) {
     filterBlock = generateConstraintsBlock({
       facetClass: facetClass,
@@ -91,6 +92,10 @@ export const getFacet = async ({
       constraints,
       parentPredicate
     });
+    parentsForFacetValues = `
+      OPTIONAL { ?id ${facetConfig.parentProperty} ?parent_ }
+      BIND(COALESCE(?parent_, '0') as ?parent)
+    `;
   }
   q = q.replace('<SELECTED_VALUES>', selectedBlock);
   q = q.replace('<SELECTED_VALUES_NO_HITS>', selectedNoHitsBlock);
@@ -101,6 +106,7 @@ export const getFacet = async ({
       : ''
   );
   q = q.replace('<PARENTS>', parentBlock);
+  q = q.replace('<PARENTS_FOR_FACET_VALUES>', parentsForFacetValues);
   if (facetConfig.type === 'list') {
     q = q.replace('<ORDER_BY>', `ORDER BY ${sortDirection}(?${sortBy})` );
   } else {
diff --git a/src/server/sparql/Mappers.js b/src/server/sparql/Mappers.js
index d7501a3c..ecf1b4b6 100644
--- a/src/server/sparql/Mappers.js
+++ b/src/server/sparql/Mappers.js
@@ -56,7 +56,7 @@ const mapFacetValues = sparqlBindings => {
         id: b.id.value,
         prefLabel: b.prefLabel.value,
         selected: b.selected.value,
-        parent: b.parent.value,
+        parent: b.parent ? b.parent.value : null,
         instanceCount: b.instanceCount.value
       };
     } catch(err) {
diff --git a/src/server/sparql/SparqlQueriesGeneral.js b/src/server/sparql/SparqlQueriesGeneral.js
index abac4493..6cf94eea 100644
--- a/src/server/sparql/SparqlQueriesGeneral.js
+++ b/src/server/sparql/SparqlQueriesGeneral.js
@@ -1,5 +1,5 @@
-export const endpoint = 'http://ldf.fi/mmm-cidoc/sparql';
-// export const endpoint = 'http://localhost:3050/ds/sparql';
+//export const endpoint = 'http://ldf.fi/mmm-cidoc/sparql';
+export const endpoint = 'http://localhost:3050/ds/sparql';
 
 export const instanceQuery = `
   SELECT * {
@@ -79,12 +79,11 @@ export const facetValuesQuery = `
       }
       FILTER(BOUND(?id))
       <FACET_VALUE_FILTER>
-      OPTIONAL { ?id gvp:broaderPreferred ?parent_ }
       OPTIONAL {
         ?id skos:prefLabel|rdfs:label ?prefLabel_
         <FACET_LABEL_FILTER>
       }
-      BIND(COALESCE(?parent_, '0') as ?parent)
+      <PARENTS_FOR_FACET_VALUES>
       BIND(COALESCE(STR(?prefLabel_), STR(?id)) AS ?prefLabel)
     }
     UNION
-- 
GitLab