Skip to content
Snippets Groups Projects
Commit 49cf1c12 authored by esikkala's avatar esikkala
Browse files

Handle timespan facet in backend

parent d5ca0454
No related branches found
No related tags found
No related merge requests found
...@@ -52,26 +52,26 @@ export const INITIAL_STATE = { ...@@ -52,26 +52,26 @@ export const INITIAL_STATE = {
spatialFilter: null, spatialFilter: null,
type: 'hierarchical', type: 'hierarchical',
}, },
productionTimespan: { // productionTimespan: {
id: 'productionTimespan', // id: 'productionTimespan',
label: 'Production date', // label: 'Production date',
//predicate: defined in backend // //predicate: defined in backend
distinctValueCount: null, // distinctValueCount: null,
values: null, // values: null,
flatValues: null, // flatValues: null,
sortBy: null, // sortBy: null,
sortDirection: null, // sortDirection: null,
sortButton: false, // sortButton: false,
spatialFilterButton: false, // spatialFilterButton: false,
isFetching: false, // isFetching: false,
searchField: false, // searchField: false,
containerClass: 'three', // containerClass: 'three',
filterType: 'timespanFilter', // filterType: 'timespanFilter',
min: null, // min: null,
max: null, // max: null,
timespanFilter: null, // timespanFilter: null,
type: 'timespan' // type: 'timespan'
}, // },
author: { author: {
id: 'author', id: 'author',
label: 'Author', label: 'Author',
......
...@@ -46,6 +46,7 @@ app.get(`${apiPath}/:resultClass/paginated`, async (req, res, next) => { ...@@ -46,6 +46,7 @@ app.get(`${apiPath}/:resultClass/paginated`, async (req, res, next) => {
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters), uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters), spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters), textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters),
timespanFilters: req.query.timespanFilters == null ? null : JSON.parse(req.query.timespanFilters),
sortBy: req.query.sortBy || null, sortBy: req.query.sortBy || null,
sortDirection: req.query.sortDirection || null sortDirection: req.query.sortDirection || null
}); });
...@@ -63,6 +64,7 @@ app.get(`${apiPath}/:resultClass/all`, async (req, res, next) => { ...@@ -63,6 +64,7 @@ app.get(`${apiPath}/:resultClass/all`, async (req, res, next) => {
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters), uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters), spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters), textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters),
timespanFilters: req.query.timespanFilters == null ? null : JSON.parse(req.query.timespanFilters),
variant: req.query.variant || null, variant: req.query.variant || null,
}); });
res.json({ res.json({
...@@ -80,6 +82,7 @@ app.get(`${apiPath}/:resultClass/count`, async (req, res, next) => { ...@@ -80,6 +82,7 @@ app.get(`${apiPath}/:resultClass/count`, async (req, res, next) => {
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters), uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters), spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters), textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters),
timespanFilters: req.query.timespanFilters == null ? null : JSON.parse(req.query.timespanFilters),
}); });
res.json({ count }); res.json({ count });
} catch(error) { } catch(error) {
...@@ -95,6 +98,7 @@ app.get(`${apiPath}/:resultClass/instance/:uri`, async (req, res, next) => { ...@@ -95,6 +98,7 @@ app.get(`${apiPath}/:resultClass/instance/:uri`, async (req, res, next) => {
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters), uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters), spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters), textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters),
timespanFilters: req.query.timespanFilters == null ? null : JSON.parse(req.query.timespanFilters),
variant: req.query.variant || null, variant: req.query.variant || null,
uri: req.params.uri uri: req.params.uri
}); });
...@@ -114,7 +118,8 @@ app.get(`${apiPath}/:facetClass/facet/:id`, async (req, res, next) => { ...@@ -114,7 +118,8 @@ app.get(`${apiPath}/:facetClass/facet/:id`, async (req, res, next) => {
sortDirection: req.query.sortDirection || null, sortDirection: req.query.sortDirection || null,
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters), uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters), spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters) textFilters: req.query.textFilters == null ? null : JSON.parse(req.query.textFilters),
timespanFilters: req.query.timespanFilters == null ? null : JSON.parse(req.query.timespanFilters),
}); });
res.json(data); res.json(data);
} catch(error) { } catch(error) {
......
...@@ -14,7 +14,10 @@ import { placeProperties, placeQuery, allPlacesQuery } from './SparqlQueriesPlac ...@@ -14,7 +14,10 @@ import { placeProperties, placeQuery, allPlacesQuery } from './SparqlQueriesPlac
import { facetConfigs } from './FacetConfigs'; import { facetConfigs } from './FacetConfigs';
import { mapCount } from './Mappers'; import { mapCount } from './Mappers';
import { makeObjectList } from './SparqlObjectMapper'; import { makeObjectList } from './SparqlObjectMapper';
import { generateFilter } from './Filters'; import {
generateFilter,
hasFilters
} from './Filters';
export const getPaginatedResults = async ({ export const getPaginatedResults = async ({
resultClass, resultClass,
...@@ -23,6 +26,7 @@ export const getPaginatedResults = async ({ ...@@ -23,6 +26,7 @@ export const getPaginatedResults = async ({
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters, textFilters,
timespanFilters,
sortBy, sortBy,
sortDirection sortDirection
}) => { }) => {
...@@ -33,6 +37,7 @@ export const getPaginatedResults = async ({ ...@@ -33,6 +37,7 @@ export const getPaginatedResults = async ({
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters, textFilters,
timespanFilters,
sortBy, sortBy,
sortDirection sortDirection
}); });
...@@ -49,6 +54,7 @@ export const getAllResults = ({ ...@@ -49,6 +54,7 @@ export const getAllResults = ({
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters, textFilters,
timespanFilters,
variant variant
}) => { }) => {
let q = ''; let q = '';
...@@ -71,10 +77,13 @@ export const getAllResults = ({ ...@@ -71,10 +77,13 @@ export const getAllResults = ({
filterTarget = 'manuscript__id'; filterTarget = 'manuscript__id';
break; break;
} }
const hasFilters = uriFilters !== null const hasActiveFilters = hasFilters({
|| spatialFilters !== null uriFilters,
|| textFilters !== null; spatialFilters,
if (!hasFilters) { textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters'); q = q.replace('<FILTER>', '# no filters');
} else { } else {
q = q.replace('<FILTER>', generateFilter({ q = q.replace('<FILTER>', generateFilter({
...@@ -82,6 +91,7 @@ export const getAllResults = ({ ...@@ -82,6 +91,7 @@ export const getAllResults = ({
uriFilters: uriFilters, uriFilters: uriFilters,
spatialFilters: spatialFilters, spatialFilters: spatialFilters,
textFilters: textFilters, textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: filterTarget, filterTarget: filterTarget,
facetID: null facetID: null
})); }));
...@@ -96,14 +106,18 @@ export const getResultCount = ({ ...@@ -96,14 +106,18 @@ export const getResultCount = ({
resultClass, resultClass,
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters textFilters,
timespanFilters,
}) => { }) => {
let q = countQuery; let q = countQuery;
q = q.replace('<FACET_CLASS>', facetConfigs[resultClass].facetClass); q = q.replace('<FACET_CLASS>', facetConfigs[resultClass].facetClass);
const hasFilters = uriFilters !== null const hasActiveFilters = hasFilters({
|| spatialFilters !== null uriFilters,
|| textFilters !== null; spatialFilters,
if (!hasFilters) { textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters'); q = q.replace('<FILTER>', '# no filters');
} else { } else {
q = q.replace('<FILTER>', generateFilter({ q = q.replace('<FILTER>', generateFilter({
...@@ -112,6 +126,7 @@ export const getResultCount = ({ ...@@ -112,6 +126,7 @@ export const getResultCount = ({
uriFilters: uriFilters, uriFilters: uriFilters,
spatialFilters: spatialFilters, spatialFilters: spatialFilters,
textFilters: textFilters, textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'id', filterTarget: 'id',
facetID: null facetID: null
})); }));
...@@ -126,15 +141,19 @@ const getPaginatedData = ({ ...@@ -126,15 +141,19 @@ const getPaginatedData = ({
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters, textFilters,
timespanFilters,
sortBy, sortBy,
sortDirection sortDirection
}) => { }) => {
let q = facetResultSetQuery; let q = facetResultSetQuery;
const facetConfig = facetConfigs[resultClass]; const facetConfig = facetConfigs[resultClass];
const hasFilters = uriFilters !== null const hasActiveFilters = hasFilters({
|| spatialFilters !== null uriFilters,
|| textFilters !== null; spatialFilters,
if (!hasFilters) { textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters'); q = q.replace('<FILTER>', '# no filters');
} else { } else {
q = q.replace('<FILTER>', generateFilter({ q = q.replace('<FILTER>', generateFilter({
...@@ -143,6 +162,7 @@ const getPaginatedData = ({ ...@@ -143,6 +162,7 @@ const getPaginatedData = ({
uriFilters: uriFilters, uriFilters: uriFilters,
spatialFilters: spatialFilters, spatialFilters: spatialFilters,
textFilters: textFilters, textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'id', filterTarget: 'id',
facetID: null})); facetID: null}));
} }
...@@ -181,6 +201,7 @@ export const getByURI = ({ ...@@ -181,6 +201,7 @@ export const getByURI = ({
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters, textFilters,
timespanFilters,
//variant, //variant,
uri uri
}) => { }) => {
...@@ -190,10 +211,13 @@ export const getByURI = ({ ...@@ -190,10 +211,13 @@ export const getByURI = ({
q = placeQuery; q = placeQuery;
break; break;
} }
const hasFilters = uriFilters !== null const hasActiveFilters = hasFilters({
|| spatialFilters !== null uriFilters,
|| textFilters !== null; spatialFilters,
if (!hasFilters) { textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters'); q = q.replace('<FILTER>', '# no filters');
} else { } else {
q = q.replace('<FILTER>', generateFilter({ q = q.replace('<FILTER>', generateFilter({
...@@ -202,6 +226,7 @@ export const getByURI = ({ ...@@ -202,6 +226,7 @@ export const getByURI = ({
uriFilters: uriFilters, uriFilters: uriFilters,
spatialFilters: spatialFilters, spatialFilters: spatialFilters,
textFilters: textFilters, textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'manuscript__id', filterTarget: 'manuscript__id',
facetID: null})); facetID: null}));
} }
......
...@@ -7,7 +7,11 @@ import { ...@@ -7,7 +7,11 @@ import {
} from './SparqlQueriesGeneral'; } from './SparqlQueriesGeneral';
import { prefixes } from './SparqlQueriesPrefixes'; import { prefixes } from './SparqlQueriesPrefixes';
import { facetConfigs } from './FacetConfigs'; import { facetConfigs } from './FacetConfigs';
import { generateFilter, generateSelectedFilter } from './Filters'; import {
hasFilters,
generateFilter,
generateSelectedFilter
} from './Filters';
import { import {
mapFacet, mapFacet,
mapHierarchicalFacet, mapHierarchicalFacet,
...@@ -21,7 +25,8 @@ export const getFacet = ({ ...@@ -21,7 +25,8 @@ export const getFacet = ({
sortDirection, sortDirection,
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters textFilters,
timespanFilters,
}) => { }) => {
const facetConfig = facetConfigs[facetClass][facetID]; const facetConfig = facetConfigs[facetClass][facetID];
// choose query template and result mapper: // choose query template and result mapper:
...@@ -48,15 +53,19 @@ export const getFacet = ({ ...@@ -48,15 +53,19 @@ export const getFacet = ({
let selectedNoHitsBlock = '# no filters from other facets'; let selectedNoHitsBlock = '# no filters from other facets';
let filterBlock = '# no filters'; let filterBlock = '# no filters';
let parentBlock = '# no parents'; let parentBlock = '# no parents';
const hasFilters = uriFilters !== null const hasActiveFilters = hasFilters({
|| spatialFilters !== null uriFilters,
|| textFilters !== null; spatialFilters,
if (hasFilters) { textFilters,
timespanFilters,
});
if (hasActiveFilters) {
filterBlock = generateFilter({ filterBlock = generateFilter({
facetClass: facetClass, facetClass: facetClass,
uriFilters: uriFilters, uriFilters: uriFilters,
spatialFilters: spatialFilters, spatialFilters: spatialFilters,
textFilters: textFilters, textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'instance', filterTarget: 'instance',
facetID: facetID, facetID: facetID,
inverse: false, inverse: false,
...@@ -137,13 +146,15 @@ const generateSelectedNoHitsBlock = ({ ...@@ -137,13 +146,15 @@ const generateSelectedNoHitsBlock = ({
facetID, facetID,
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters textFilters,
timespanFilters,
}) => { }) => {
const noHitsFilter = generateFilter({ const noHitsFilter = generateFilter({
facetClass: facetClass, facetClass: facetClass,
uriFilters: uriFilters, uriFilters: uriFilters,
spatialFilters: spatialFilters, spatialFilters: spatialFilters,
textFilters: textFilters, textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'instance', filterTarget: 'instance',
facetID: facetID, facetID: facetID,
inverse: true, inverse: true,
...@@ -165,6 +176,7 @@ const generateParentBlock = ({ ...@@ -165,6 +176,7 @@ const generateParentBlock = ({
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters, textFilters,
timespanFilters,
parentPredicate parentPredicate
}) => { }) => {
const parentFilterStr = generateFilter({ const parentFilterStr = generateFilter({
...@@ -172,6 +184,7 @@ const generateParentBlock = ({ ...@@ -172,6 +184,7 @@ const generateParentBlock = ({
uriFilters: uriFilters, uriFilters: uriFilters,
spatialFilters: spatialFilters, spatialFilters: spatialFilters,
textFilters: textFilters, textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'instance2', filterTarget: 'instance2',
facetID: facetID, facetID: facetID,
inverse: false inverse: false
......
import { facetConfigs } from './FacetConfigs'; import { facetConfigs } from './FacetConfigs';
export const hasFilters = ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
}) => {
return uriFilters !== null
|| spatialFilters !== null
|| textFilters !== null
|| timespanFilters !== null;
};
export const generateFilter = ({ export const generateFilter = ({
facetClass, facetClass,
uriFilters, uriFilters,
spatialFilters, spatialFilters,
textFilters, textFilters,
timespanFilters,
filterTarget, filterTarget,
facetID, facetID,
inverse, inverse,
...@@ -32,6 +45,21 @@ export const generateFilter = ({ ...@@ -32,6 +45,21 @@ export const generateFilter = ({
} }
} }
} }
if (timespanFilters !== null) {
for (let property in timespanFilters) {
if (property !== facetProperty) {
const facetConfig = facetConfigs[facetClass][property];
const { start, end } = timespanFilters[property];
filterStr += `
?${filterTarget} ${facetConfig.predicate} ?timespan .
?timespan ${facetConfig.startProperty} ?start .
?timespan ${facetConfig.endProperty} ?end .
FILTER(?start >= "${start}"^^xsd:date)
FILTER(?end <= "${end}"^^xsd:date)
`;
}
}
}
if (uriFilters !== null) { if (uriFilters !== null) {
for (let property in uriFilters) { for (let property in uriFilters) {
// when filtering facet values, apply filters only from other facets // when filtering facet values, apply filters only from other facets
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment