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