Skip to content
Snippets Groups Projects
Commit 5fe285b4 authored by esikkala's avatar esikkala
Browse files

Isolating facets

parent bbab4767
No related branches found
No related tags found
No related merge requests found
...@@ -160,12 +160,13 @@ export const openFacetDialog = property => ({ ...@@ -160,12 +160,13 @@ export const openFacetDialog = property => ({
export const closeFacetDialog = () => ({ export const closeFacetDialog = () => ({
type: CLOSE_FACET_DIALOG, type: CLOSE_FACET_DIALOG,
}); });
export const fetchFacet = () => ({ export const fetchFacet = id => ({
type: FETCH_FACET, type: FETCH_FACET,
id
}); });
export const updateFacet = ({ facetValues }) => ({ export const updateFacet = ({ id, facetValues }) => ({
type: UPDATE_FACET, type: UPDATE_FACET,
facetValues id, facetValues
}); });
export const clearFacet = () => ({ export const clearFacet = () => ({
type: CLEAR_FACET, type: CLEAR_FACET,
......
...@@ -38,7 +38,7 @@ const styles = theme => ({ ...@@ -38,7 +38,7 @@ const styles = theme => ({
class FacetBar extends React.Component { class FacetBar extends React.Component {
componentDidMount = () => { componentDidMount = () => {
this.props.fetchFacet(); //this.props.fetchFacet('source');
} }
// componentDidUpdate = prevProps => { // componentDidUpdate = prevProps => {
...@@ -50,11 +50,11 @@ class FacetBar extends React.Component { ...@@ -50,11 +50,11 @@ class FacetBar extends React.Component {
// //
render() { render() {
const { classes, facet } = this.props; const { classes, source, productionPlace, lastUpdatedFacet } = this.props;
//console.log(facet) //console.log(facet)
return ( return (
<div className={classes.root}> <div className={classes.root}>
{this.props.facet.fetchingFacet ? {this.props.fetchingFacet ?
<CircularProgress style={{ color: purple[500] }} thickness={5} /> : <CircularProgress style={{ color: purple[500] }} thickness={5} /> :
<React.Fragment> <React.Fragment>
<Paper className={classes.facetContainer}> <Paper className={classes.facetContainer}>
...@@ -63,9 +63,11 @@ class FacetBar extends React.Component { ...@@ -63,9 +63,11 @@ class FacetBar extends React.Component {
</Paper> </Paper>
<div className={classes.facetValuesContainerThree}> <div className={classes.facetValuesContainerThree}>
<Tree <Tree
key='source'
property='source' property='source'
lastUpdatedFacet={facet.lastUpdatedFacet} lastUpdatedFacet={lastUpdatedFacet}
data={facet.facetValues.source} data={source}
fetchFacet={this.props.fetchFacet}
updateFilter={this.props.updateFilter} updateFilter={this.props.updateFilter}
/> />
</div> </div>
...@@ -89,9 +91,11 @@ class FacetBar extends React.Component { ...@@ -89,9 +91,11 @@ class FacetBar extends React.Component {
</Paper> </Paper>
<div className={classes.facetValuesContainerTen}> <div className={classes.facetValuesContainerTen}>
<Tree <Tree
key='productionPlace'
property='productionPlace' property='productionPlace'
lastUpdatedFacet={facet.lastUpdatedFacet} lastUpdatedFacet={lastUpdatedFacet}
data={facet.facetValues.productionPlace} data={productionPlace}
fetchFacet={this.props.fetchFacet}
updateFilter={this.props.updateFilter} updateFilter={this.props.updateFilter}
/> />
</div> </div>
...@@ -111,7 +115,10 @@ class FacetBar extends React.Component { ...@@ -111,7 +115,10 @@ class FacetBar extends React.Component {
FacetBar.propTypes = { FacetBar.propTypes = {
classes: PropTypes.object.isRequired, classes: PropTypes.object.isRequired,
fetchFacet: PropTypes.func.isRequired, fetchFacet: PropTypes.func.isRequired,
facet: PropTypes.object.isRequired, fetchingFacet: PropTypes.bool.isRequired,
lastUpdatedFacet: PropTypes.string.isRequired,
source: PropTypes.array.isRequired,
productionPlace: PropTypes.array.isRequired,
updateFilter: PropTypes.func.isRequired, updateFilter: PropTypes.func.isRequired,
}; };
......
...@@ -30,16 +30,20 @@ class Tree extends Component { ...@@ -30,16 +30,20 @@ class Tree extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
treeData: this.props.data, treeData: [],
searchString: '', searchString: '',
searchFocusIndex: 0, searchFocusIndex: 0,
searchFoundCount: null, searchFoundCount: null,
}; };
} }
componentDidMount = () => {
console.log('tree mounted')
//this.props.fetchFacet(this.props.property);
}
// componentDidUpdate = prevProps => { // componentDidUpdate = prevProps => {
// console.log(this.props.lastUpdatedFacet); // if (prevProps. )
// //if (prevProps.facetFilters[this.props.property] != this.props.facetFilters )
// }; // };
handleCheckboxChange = treeObj => event => { handleCheckboxChange = treeObj => event => {
...@@ -191,6 +195,7 @@ Tree.propTypes = { ...@@ -191,6 +195,7 @@ Tree.propTypes = {
property: PropTypes.string.isRequired, property: PropTypes.string.isRequired,
lastUpdatedFacet: PropTypes.string.isRequired, lastUpdatedFacet: PropTypes.string.isRequired,
data: PropTypes.array.isRequired, data: PropTypes.array.isRequired,
fetchFacet: PropTypes.func.isRequired,
updateFilter: PropTypes.func.isRequired, updateFilter: PropTypes.func.isRequired,
}; };
......
...@@ -92,7 +92,10 @@ let MapApp = (props) => { ...@@ -92,7 +92,10 @@ let MapApp = (props) => {
<React.Fragment> <React.Fragment>
<Grid item sm={12} md={3} className={classes.facetBarContainer}> <Grid item sm={12} md={3} className={classes.facetBarContainer}>
<FacetBar <FacetBar
facet={props.facet} fetchingFacet={props.facet.fetchingFacet}
lastUpdatedFacet={props.facet.lastUpdatedFacet}
source={props.facet.source}
productionPlace={props.facet.productionPlace}
fetchFacet={props.fetchFacet} fetchFacet={props.fetchFacet}
updateFilter={props.updateFilter} updateFilter={props.updateFilter}
updatePage={props.updatePage} updatePage={props.updatePage}
......
...@@ -54,7 +54,7 @@ const getPlace = action$ => action$.pipe( ...@@ -54,7 +54,7 @@ const getPlace = action$ => action$.pipe(
const getFacet = (action$, state$) => action$.pipe( const getFacet = (action$, state$) => action$.pipe(
ofType(FETCH_FACET), ofType(FETCH_FACET),
withLatestFrom(state$), withLatestFrom(state$),
mergeMap(([, state]) => { mergeMap(([action, state]) => {
let params = {}; let params = {};
let filters = {}; let filters = {};
let activeFilters = false; let activeFilters = false;
...@@ -67,10 +67,12 @@ const getFacet = (action$, state$) => action$.pipe( ...@@ -67,10 +67,12 @@ const getFacet = (action$, state$) => action$.pipe(
if (activeFilters) { if (activeFilters) {
params.filters = JSON.stringify(filters); params.filters = JSON.stringify(filters);
} }
const searchUrl = apiUrl + 'facets'; const requestUrl = `${apiUrl}facet/${action.id}${stringify(params)}`;
const requestUrl = `${searchUrl}?${stringify(params)}`;
return ajax.getJSON(requestUrl).pipe( return ajax.getJSON(requestUrl).pipe(
map(response => updateFacet({ facetValues: response })) map(response => updateFacet({
id: action.id,
facetValues: response,
}))
); );
}) })
); );
......
...@@ -7,12 +7,15 @@ import { ...@@ -7,12 +7,15 @@ import {
} from '../actions'; } from '../actions';
export const INITIAL_STATE = { export const INITIAL_STATE = {
source: [],
productionPlace: [],
author: [],
facetOptions : { facetOptions : {
productionPlace: { productionPlace: {
id: 'productionPlace', id: 'productionPlace',
label: 'Production place', label: 'Production place',
//predicate: defined in backend //predicate: defined in backend
type: 'hierarchical', values: []
}, },
author: { author: {
id: 'author', id: 'author',
...@@ -27,11 +30,11 @@ export const INITIAL_STATE = { ...@@ -27,11 +30,11 @@ export const INITIAL_STATE = {
type: 'checkboxes' type: 'checkboxes'
} }
}, },
facetValues : { // facetValues : {
productionPlace: [], // productionPlace: [],
author: [], // author: [],
source: [] // source: []
}, // },
facetFilters: { facetFilters: {
productionPlace: new Set(), productionPlace: new Set(),
author: new Set(), author: new Set(),
...@@ -58,7 +61,7 @@ const facet = (state = INITIAL_STATE, action) => { ...@@ -58,7 +61,7 @@ const facet = (state = INITIAL_STATE, action) => {
case UPDATE_FACET: case UPDATE_FACET:
return { return {
...state, ...state,
facetValues: action.facetValues, [ action.id ]: action.facetValues,
fetchingFacet: false fetchingFacet: false
}; };
case UPDATE_FILTER: case UPDATE_FILTER:
......
...@@ -5,7 +5,8 @@ import { ...@@ -5,7 +5,8 @@ import {
getManuscripts, getManuscripts,
getPlaces, getPlaces,
getPlace, getPlace,
getFacets getFacets,
getFacet
} from './sparql/Manuscripts'; } from './sparql/Manuscripts';
const DEFAULT_PORT = 3001; const DEFAULT_PORT = 3001;
const app = express(); const app = express();
...@@ -73,6 +74,18 @@ app.get(`${apiPath}/facets`, (req, res) => { ...@@ -73,6 +74,18 @@ app.get(`${apiPath}/facets`, (req, res) => {
}); });
}); });
app.get(`${apiPath}/facet/:id`, (req, res) => {
const filters = req.query.filters == null ? null : JSON.parse(req.query.filters);
// console.log(filters)
return getFacet(req.params.id, filters).then((data) => {
res.json(data);
})
.catch((err) => {
console.log(err);
return res.sendStatus(500);
});
});
/* Routes are matched to a url in order of their definition /* Routes are matched to a url in order of their definition
Redirect all the the rest for react-router to handle */ Redirect all the the rest for react-router to handle */
app.get('*', function(request, response) { app.get('*', function(request, response) {
......
...@@ -78,7 +78,7 @@ export const getPlace = id => { ...@@ -78,7 +78,7 @@ export const getPlace = id => {
}; };
export const getFacets = filters => { export const getFacets = filters => {
return Promise.all(Object.values(facetConfigs).map(value => getFacet(value, filters))) return Promise.all(Object.keys(facetConfigs).map(id => getFacet(id, filters)))
.then(data => { .then(data => {
let results = {}; let results = {};
let i = 0; let i = 0;
...@@ -90,9 +90,9 @@ export const getFacets = filters => { ...@@ -90,9 +90,9 @@ export const getFacets = filters => {
}); });
}; };
const getFacet = (facetConfig, filters) => { export const getFacet = (id, filters) => {
let { endpoint, facetQuery } = datasetConfig['mmm']; let { endpoint, facetQuery } = datasetConfig['mmm'];
//console.log(filters) const facetConfig = facetConfigs[id];
if (filters == null) { if (filters == null) {
facetQuery = facetQuery.replace('<FILTER>', ''); facetQuery = facetQuery.replace('<FILTER>', '');
} else { } else {
...@@ -113,12 +113,10 @@ const generateFacetFilter = (facetConfig, filters) => { ...@@ -113,12 +113,10 @@ const generateFacetFilter = (facetConfig, filters) => {
?id ${facetConfigs[property].predicate} ?${property}Filter . ?id ${facetConfigs[property].predicate} ?${property}Filter .
`; `;
} }
// console.log(filterStr)
return filterStr; return filterStr;
}; };
const generateResultFilter = filters => { const generateResultFilter = filters => {
//console.log(filters)
let filterStr = ''; let filterStr = '';
for (let property in filters) { for (let property in filters) {
filterStr += ` filterStr += `
...@@ -126,6 +124,5 @@ const generateResultFilter = filters => { ...@@ -126,6 +124,5 @@ const generateResultFilter = filters => {
?id ${facetConfigs[property].predicate} ?${property}Filter . ?id ${facetConfigs[property].predicate} ?${property}Filter .
`; `;
} }
//console.log(filterStr)
return filterStr; return filterStr;
}; };
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