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 = {
spatialFilter: null,
type: 'hierarchical',
},
productionTimespan: {
id: 'productionTimespan',
label: 'Production date',
//predicate: defined in backend
distinctValueCount: null,
values: null,
flatValues: null,
sortBy: null,
sortDirection: null,
sortButton: false,
spatialFilterButton: false,
isFetching: false,
searchField: false,
containerClass: 'three',
filterType: 'timespanFilter',
min: null,
max: null,
timespanFilter: null,
type: 'timespan'
},
// productionTimespan: {
// id: 'productionTimespan',
// label: 'Production date',
// //predicate: defined in backend
// distinctValueCount: null,
// values: null,
// flatValues: null,
// sortBy: null,
// sortDirection: null,
// sortButton: false,
// spatialFilterButton: false,
// isFetching: false,
// searchField: false,
// containerClass: 'three',
// filterType: 'timespanFilter',
// min: null,
// max: null,
// timespanFilter: null,
// type: 'timespan'
// },
author: {
id: 'author',
label: 'Author',
......
......@@ -46,6 +46,7 @@ app.get(`${apiPath}/:resultClass/paginated`, async (req, res, next) => {
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
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,
sortDirection: req.query.sortDirection || null
});
......@@ -63,6 +64,7 @@ app.get(`${apiPath}/:resultClass/all`, async (req, res, next) => {
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
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,
});
res.json({
......@@ -80,6 +82,7 @@ app.get(`${apiPath}/:resultClass/count`, async (req, res, next) => {
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
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 });
} catch(error) {
......@@ -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),
spatialFilters: req.query.spatialFilters == null ? null : JSON.parse(req.query.spatialFilters),
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,
uri: req.params.uri
});
......@@ -114,7 +118,8 @@ app.get(`${apiPath}/:facetClass/facet/:id`, async (req, res, next) => {
sortDirection: req.query.sortDirection || null,
uriFilters: req.query.uriFilters == null ? null : JSON.parse(req.query.uriFilters),
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);
} catch(error) {
......
......@@ -14,7 +14,10 @@ import { placeProperties, placeQuery, allPlacesQuery } from './SparqlQueriesPlac
import { facetConfigs } from './FacetConfigs';
import { mapCount } from './Mappers';
import { makeObjectList } from './SparqlObjectMapper';
import { generateFilter } from './Filters';
import {
generateFilter,
hasFilters
} from './Filters';
export const getPaginatedResults = async ({
resultClass,
......@@ -23,6 +26,7 @@ export const getPaginatedResults = async ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
sortBy,
sortDirection
}) => {
......@@ -33,6 +37,7 @@ export const getPaginatedResults = async ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
sortBy,
sortDirection
});
......@@ -49,6 +54,7 @@ export const getAllResults = ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
variant
}) => {
let q = '';
......@@ -71,10 +77,13 @@ export const getAllResults = ({
filterTarget = 'manuscript__id';
break;
}
const hasFilters = uriFilters !== null
|| spatialFilters !== null
|| textFilters !== null;
if (!hasFilters) {
const hasActiveFilters = hasFilters({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters');
} else {
q = q.replace('<FILTER>', generateFilter({
......@@ -82,6 +91,7 @@ export const getAllResults = ({
uriFilters: uriFilters,
spatialFilters: spatialFilters,
textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: filterTarget,
facetID: null
}));
......@@ -96,14 +106,18 @@ export const getResultCount = ({
resultClass,
uriFilters,
spatialFilters,
textFilters
textFilters,
timespanFilters,
}) => {
let q = countQuery;
q = q.replace('<FACET_CLASS>', facetConfigs[resultClass].facetClass);
const hasFilters = uriFilters !== null
|| spatialFilters !== null
|| textFilters !== null;
if (!hasFilters) {
const hasActiveFilters = hasFilters({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters');
} else {
q = q.replace('<FILTER>', generateFilter({
......@@ -112,6 +126,7 @@ export const getResultCount = ({
uriFilters: uriFilters,
spatialFilters: spatialFilters,
textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'id',
facetID: null
}));
......@@ -126,15 +141,19 @@ const getPaginatedData = ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
sortBy,
sortDirection
}) => {
let q = facetResultSetQuery;
const facetConfig = facetConfigs[resultClass];
const hasFilters = uriFilters !== null
|| spatialFilters !== null
|| textFilters !== null;
if (!hasFilters) {
const hasActiveFilters = hasFilters({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters');
} else {
q = q.replace('<FILTER>', generateFilter({
......@@ -143,6 +162,7 @@ const getPaginatedData = ({
uriFilters: uriFilters,
spatialFilters: spatialFilters,
textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'id',
facetID: null}));
}
......@@ -181,6 +201,7 @@ export const getByURI = ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
//variant,
uri
}) => {
......@@ -190,10 +211,13 @@ export const getByURI = ({
q = placeQuery;
break;
}
const hasFilters = uriFilters !== null
|| spatialFilters !== null
|| textFilters !== null;
if (!hasFilters) {
const hasActiveFilters = hasFilters({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
});
if (!hasActiveFilters) {
q = q.replace('<FILTER>', '# no filters');
} else {
q = q.replace('<FILTER>', generateFilter({
......@@ -202,6 +226,7 @@ export const getByURI = ({
uriFilters: uriFilters,
spatialFilters: spatialFilters,
textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'manuscript__id',
facetID: null}));
}
......
......@@ -7,7 +7,11 @@ import {
} from './SparqlQueriesGeneral';
import { prefixes } from './SparqlQueriesPrefixes';
import { facetConfigs } from './FacetConfigs';
import { generateFilter, generateSelectedFilter } from './Filters';
import {
hasFilters,
generateFilter,
generateSelectedFilter
} from './Filters';
import {
mapFacet,
mapHierarchicalFacet,
......@@ -21,7 +25,8 @@ export const getFacet = ({
sortDirection,
uriFilters,
spatialFilters,
textFilters
textFilters,
timespanFilters,
}) => {
const facetConfig = facetConfigs[facetClass][facetID];
// choose query template and result mapper:
......@@ -48,15 +53,19 @@ export const getFacet = ({
let selectedNoHitsBlock = '# no filters from other facets';
let filterBlock = '# no filters';
let parentBlock = '# no parents';
const hasFilters = uriFilters !== null
|| spatialFilters !== null
|| textFilters !== null;
if (hasFilters) {
const hasActiveFilters = hasFilters({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
});
if (hasActiveFilters) {
filterBlock = generateFilter({
facetClass: facetClass,
uriFilters: uriFilters,
spatialFilters: spatialFilters,
textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'instance',
facetID: facetID,
inverse: false,
......@@ -137,13 +146,15 @@ const generateSelectedNoHitsBlock = ({
facetID,
uriFilters,
spatialFilters,
textFilters
textFilters,
timespanFilters,
}) => {
const noHitsFilter = generateFilter({
facetClass: facetClass,
uriFilters: uriFilters,
spatialFilters: spatialFilters,
textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'instance',
facetID: facetID,
inverse: true,
......@@ -165,6 +176,7 @@ const generateParentBlock = ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
parentPredicate
}) => {
const parentFilterStr = generateFilter({
......@@ -172,6 +184,7 @@ const generateParentBlock = ({
uriFilters: uriFilters,
spatialFilters: spatialFilters,
textFilters: textFilters,
timespanFilters: timespanFilters,
filterTarget: 'instance2',
facetID: facetID,
inverse: false
......
import { facetConfigs } from './FacetConfigs';
export const hasFilters = ({
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
}) => {
return uriFilters !== null
|| spatialFilters !== null
|| textFilters !== null
|| timespanFilters !== null;
};
export const generateFilter = ({
facetClass,
uriFilters,
spatialFilters,
textFilters,
timespanFilters,
filterTarget,
facetID,
inverse,
......@@ -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) {
for (let property in uriFilters) {
// 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