diff --git a/src/client/components/facet_bar/ActiveFilters.js b/src/client/components/facet_bar/ActiveFilters.js index d8bec99bd8bb74108d4f55f76a978542152226a6..3a9f8475765aab9de51fa3f25cc30e0171cf5c57 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 b5af4d16f215bafa553196c6eb442bdc4fcb3419..fee088b08de9aa09405d08d3268b37ce18e9456f 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 0aec0b1389fb39ab4a9d40fd1bc62eaf524bd9ff..caa8ea87c29916a4f974b555ff03016ca57b1773 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 246cac32d89fbc0e8673da82fb0508ca444168c1..5d0bab46fbc63405feab1784a45689fd1629abb5 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 f8e2077ea2cd96dc6ed5bdc8f6f395c9938c483e..ea6bfe8555abc9c5c5c1d4af8ff9dcb20b028e56 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 c16b36238af97cb08a02d09615886a328ce751c6..4a76b69310c558da24e06c45fcc16452782cb57f 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 926ab42eae433167c64a65861d8e99ab5cd8e4a4..7a7f6d1c60da83a2c56a95d13f19bf0166147859 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 }));