From 8d53b7eaad7ea1cb44e7955496ec0fd13ab8ef45 Mon Sep 17 00:00:00 2001 From: esikkala <esko.ikkala@aalto.fi> Date: Thu, 9 May 2019 15:05:37 +0300 Subject: [PATCH] Show text facet in active filters --- .../components/facet_bar/ActiveFilters.js | 48 ++++++++++--------- src/client/components/facet_bar/ChipsArray.js | 15 ++++-- src/client/components/facet_bar/FacetBar.js | 16 +++++-- src/client/epics/index.js | 2 +- src/client/reducers/manuscriptsFacets.js | 1 - src/server/index.js | 2 +- src/server/sparql/FacetResults.js | 7 ++- 7 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/client/components/facet_bar/ActiveFilters.js b/src/client/components/facet_bar/ActiveFilters.js index d8bec99b..3a9f8475 100644 --- a/src/client/components/facet_bar/ActiveFilters.js +++ b/src/client/components/facet_bar/ActiveFilters.js @@ -3,29 +3,32 @@ import PropTypes from 'prop-types'; import ChipsArray from './ChipsArray'; const ActiveFilters = props => { - const { uriFilters, facets } = props; + const { uriFilters, textFilters, facets } = props; + const facetValues = []; + Object.keys(uriFilters).map(activeFacetID => { + Object.values(uriFilters[activeFacetID]).forEach(value => { + facetValues.push({ + facetID: activeFacetID, + facetLabel: facets[activeFacetID].label, + filterType: 'uriFilter', + value: value // a react sortable tree object + }); + }); + }); + Object.keys(textFilters).map(facetID => { + facetValues.push({ + facetID: facetID, + facetLabel: facets[facetID].label, + filterType: 'textFilter', + value: textFilters[facetID] + }); + }); return ( - <React.Fragment> - {Object.keys(uriFilters).map(facetID => { - const facetValues = []; - Object.values(uriFilters[facetID]).forEach(value => { - facetValues.push({ - facetID: facetID, - facetLabel: facets[facetID].label, - filterType: 'uriFilter', - value: value // a react sortable tree object - }); - }); - return ( - <ChipsArray - key={facetID} - data={facetValues} - facetClass={props.facetClass} - updateFacetOption={props.updateFacetOption} - /> - ); - })} - </React.Fragment> + <ChipsArray + data={facetValues} + facetClass={props.facetClass} + updateFacetOption={props.updateFacetOption} + /> ); }; @@ -34,6 +37,7 @@ ActiveFilters.propTypes = { facetClass: PropTypes.string.isRequired, uriFilters: PropTypes.object.isRequired, spatialFilters: PropTypes.object.isRequired, + textFilters: PropTypes.object.isRequired, updateFacetOption: PropTypes.func.isRequired }; diff --git a/src/client/components/facet_bar/ChipsArray.js b/src/client/components/facet_bar/ChipsArray.js index b5af4d16..fee088b0 100644 --- a/src/client/components/facet_bar/ChipsArray.js +++ b/src/client/components/facet_bar/ChipsArray.js @@ -37,12 +37,21 @@ class ChipsArray extends React.Component { <div className={classes.root}> {data !== null && data.map(item => { let icon = null; + let key = null; + let valueLabel = null; + if (item.filterType === 'uriFilter') { + key = item.value.node.id; + valueLabel = item.value.node.prefLabel; + } + if (item.filterType === 'textFilter') { + key = item.value; + valueLabel = item.value; + } return ( <Chip - key={item.value.node.id} + key={key} icon={icon} - label={this.generateLabel(item.facetLabel, item.value.node.prefLabel)} - + label={this.generateLabel(item.facetLabel, valueLabel)} className={classes.chip} /> ); diff --git a/src/client/components/facet_bar/FacetBar.js b/src/client/components/facet_bar/FacetBar.js index 0aec0b13..caa8ea87 100644 --- a/src/client/components/facet_bar/FacetBar.js +++ b/src/client/components/facet_bar/FacetBar.js @@ -143,26 +143,31 @@ class FacetBar extends React.Component { const { facets } = this.props.facetData; let uriFilters = {}; let spatialFilters = {}; + let textFilters = {}; let activeUriFilters = false; let activeSpatialFilters = false; + let activeTextFilters = false; for (const [key, value] of Object.entries(facets)) { - if (value.uriFilter !== null) { + if (has(value, 'uriFilter') && value.uriFilter !== null) { activeUriFilters = true; uriFilters[key] = value.uriFilter; - } else if (has(value, 'spatialFilter') && value.spatialFilter !== null) { + } + if (has(value, 'spatialFilter') && value.spatialFilter !== null) { activeSpatialFilters = true; spatialFilters[key] = value.spatialFilter._bounds; } + if (has(value, 'textFilter') && value.textFilter !== null) { + activeTextFilters = true; + textFilters[key] = value.textFilter; + } } - - return ( <div className={classes.root}> <Paper className={classes.facetContainer}> <div className={classes.textContainer}> <Typography variant="h6">Results: {resultCount} {resultClass}</Typography> <Divider className={classes.resultInfoDivider} /> - {(activeUriFilters || activeSpatialFilters) && + {(activeUriFilters || activeSpatialFilters || activeTextFilters) && <React.Fragment> <Typography variant="h6">Active filters:</Typography> <div className={classes.textContainer}> @@ -171,6 +176,7 @@ class FacetBar extends React.Component { facetClass={facetClass} uriFilters={uriFilters} spatialFilters={spatialFilters} + textFilters={textFilters} updateFacetOption={this.props.updateFacetOption} /> </div> diff --git a/src/client/epics/index.js b/src/client/epics/index.js index 246cac32..5d0bab46 100644 --- a/src/client/epics/index.js +++ b/src/client/epics/index.js @@ -223,7 +223,7 @@ export const stateToUrl = ({ let activeSpatialFilters = false; let activeTextFilters = false; for (const [key, value] of Object.entries(facets)) { - if (value.uriFilter !== null) { + if (has(value, 'uriFilter') && value.uriFilter !== null) { activeUriFilters = true; uriFilters[key] = Object.keys(value.uriFilter); } else if (has(value, 'spatialFilter') && value.spatialFilter !== null) { diff --git a/src/client/reducers/manuscriptsFacets.js b/src/client/reducers/manuscriptsFacets.js index f8e2077e..ea6bfe85 100644 --- a/src/client/reducers/manuscriptsFacets.js +++ b/src/client/reducers/manuscriptsFacets.js @@ -31,7 +31,6 @@ export const INITIAL_STATE = { searchField: false, containerClass: 'one', filterType: 'textFilter', - uriFilter: null, textFilter: null, }, source: { diff --git a/src/server/index.js b/src/server/index.js index c16b3623..4a76b693 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -54,7 +54,7 @@ app.get(`${apiPath}/:resultClass/all`, async (req, res, next) => { variant: req.query.variant || null, }); res.json({ - resultCount: data.count, + resultCount: data.length, results: data }); } catch(error) { diff --git a/src/server/sparql/FacetResults.js b/src/server/sparql/FacetResults.js index 926ab42e..7a7f6d1c 100644 --- a/src/server/sparql/FacetResults.js +++ b/src/server/sparql/FacetResults.js @@ -61,6 +61,7 @@ export const getAllResults = ({ facetClass, uriFilters, spatialFilters, + textFilters, variant }) => { let q = ''; @@ -79,13 +80,17 @@ export const getAllResults = ({ filterTarget = 'manuscript__id'; break; } - if (uriFilters == null && spatialFilters == null) { + const hasFilters = uriFilters !== null + || spatialFilters !== null + || textFilters !== null; + if (!hasFilters) { q = q.replace('<FILTER>', '# no filters'); } else { q = q.replace('<FILTER>', generateFilter({ facetClass: facetClass, uriFilters: uriFilters, spatialFilters: spatialFilters, + textFilters: textFilters, filterTarget: filterTarget, facetID: null })); -- GitLab