From b15ef356b2bfe1c511d1908a62ae378da9eb4f2c Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Wed, 17 Mar 2021 12:37:42 +0200
Subject: [PATCH] Add optional config object for result mappers

---
 src/server/sparql/FacetResults.js             |  3 +-
 src/server/sparql/Mappers.js                  | 29 ++++++++-----------
 src/server/sparql/SparqlApi.js                |  8 ++++-
 .../sparql/sampo/BackendSearchConfig.js       |  5 +++-
 4 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js
index 423d81ec..5847a27f 100644
--- a/src/server/sparql/FacetResults.js
+++ b/src/server/sparql/FacetResults.js
@@ -106,7 +106,7 @@ export const getAllResults = ({
   } else {
     ({ endpoint, defaultConstraint, langTag, langTagSecondary } = config)
   }
-  const { filterTarget, resultMapper, postprocess = null } = config
+  const { filterTarget, resultMapper, resultMapperConfig, postprocess = null } = config
   let { q } = config
   if (constraints == null && defaultConstraint == null) {
     q = q.replace(/<FILTER>/g, '# no filters')
@@ -153,6 +153,7 @@ export const getAllResults = ({
       endpoint: endpoint.url,
       useAuth: endpoint.useAuth,
       resultMapper,
+      resultMapperConfig,
       postprocess,
       resultFormat
     })
diff --git a/src/server/sparql/Mappers.js b/src/server/sparql/Mappers.js
index a4fa0682..01e66fba 100644
--- a/src/server/sparql/Mappers.js
+++ b/src/server/sparql/Mappers.js
@@ -81,20 +81,7 @@ export const mapNameSampoResults = sparqlBindings => {
   return results
 }
 
-export const mapLineChart = sparqlBindings => {
-  const seriesData = []
-  const categoriesData = []
-  sparqlBindings.map(b => {
-    seriesData.push(b.count.value)
-    categoriesData.push(b.category.value)
-  })
-  return {
-    seriesData,
-    categoriesData
-  }
-}
-
-export const mapLineChartFillEmptyValues = sparqlBindings => {
+export const mapLineChart = ({ sparqlBindings, config }) => {
   const seriesData = []
   const categoriesData = []
   const sparqlBindingsLength = sparqlBindings.length
@@ -102,15 +89,23 @@ export const mapLineChartFillEmptyValues = sparqlBindings => {
     const currentCategory = parseInt(b.category.value)
     const currentValue = parseInt(b.count.value)
     seriesData.push(currentValue)
-    categoriesData.push(currentCategory)
-    if (index + 1 < sparqlBindingsLength) {
+    categoriesData.push(
+      config && config.xAxisConverter
+        ? config.xAxisConverter(currentCategory)
+        : currentCategory
+    )
+    if (config && config.fillEmptyValues && index + 1 < sparqlBindingsLength) {
       let categoryIter = currentCategory
       const nextNonZeroCategory = parseInt(bindings[index + 1].category.value)
       // add zeros until we reach the next category with a non zero value
       while (categoryIter < nextNonZeroCategory - 1) {
         categoryIter += 1
         seriesData.push(0)
-        categoriesData.push(categoryIter)
+        categoriesData.push(
+          config && config.xAxisConverter
+            ? config.xAxisConverter(categoryIter)
+            : categoryIter
+        )
       }
     }
   })
diff --git a/src/server/sparql/SparqlApi.js b/src/server/sparql/SparqlApi.js
index 1a953469..d4a0aec9 100644
--- a/src/server/sparql/SparqlApi.js
+++ b/src/server/sparql/SparqlApi.js
@@ -5,6 +5,7 @@ export const runSelectQuery = async ({
   query,
   endpoint,
   resultMapper,
+  resultMapperConfig = null,
   postprocess = null,
   previousSelections = null, // not in use
   resultFormat,
@@ -29,7 +30,12 @@ export const runSelectQuery = async ({
       data: q
     })
     if (resultFormat === 'json') {
-      const mappedResults = resultMapper(response.data.results.bindings, previousSelections)
+      if (resultMapper) {
+
+      }
+      const mappedResults = resultMapperConfig
+        ? resultMapper({ sparqlBindings: response.data.results.bindings, config: resultMapperConfig })
+        : resultMapper(response.data.results.bindings)
       if (postprocess) {
         postprocess.func({ data: mappedResults, config: postprocess.config })
       }
diff --git a/src/server/sparql/sampo/BackendSearchConfig.js b/src/server/sparql/sampo/BackendSearchConfig.js
index aa7141f2..52b4180c 100644
--- a/src/server/sparql/sampo/BackendSearchConfig.js
+++ b/src/server/sparql/sampo/BackendSearchConfig.js
@@ -175,7 +175,10 @@ export const backendSearchConfig = {
     perspectiveID: 'perspective1',
     q: productionsByDecadeQuery,
     filterTarget: 'instance',
-    resultMapper: mapLineChart
+    resultMapper: mapLineChart,
+    resultMapperConfig: {
+      fillEmptyValues: false
+    }
   },
   eventLineChart: {
     perspectiveID: 'perspective1',
-- 
GitLab