From 3a9807f2e37400844bbae86344d1424efbcc286f Mon Sep 17 00:00:00 2001 From: Esko Ikkala <esko.ikkala@aalto.fi> Date: Tue, 19 Jun 2018 11:11:04 +0300 Subject: [PATCH] Selectable data sources --- src/client/actions/index.js | 8 ++--- src/client/components/DatasetSelector.js | 35 ++++++++++--------- .../components/IntegrationAutosuggest.js | 2 +- src/client/containers/MapApp.js | 8 ++--- src/client/reducers/search.js | 14 ++++++-- 5 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/client/actions/index.js b/src/client/actions/index.js index 44835036..73132ff7 100644 --- a/src/client/actions/index.js +++ b/src/client/actions/index.js @@ -1,7 +1,7 @@ export const OPEN_DRAWER = 'OPEN_DRAWER'; export const CLOSE_DRAWER = 'CLOSE_DRAWER'; export const UPDATE_QUERY = 'UPDATE_QUERY'; -export const UPDATE_DATASETS = 'UPDATE_DATASETS'; +export const TOGGLE_DATASET = 'TOGGLE_DATASET'; export const START_SPINNER = 'START_SPINNER'; export const FETCH_SUGGESTIONS = 'FETCH_SUGGESTIONS'; export const FETCH_SUGGESTIONS_FAILED = 'FETCH_SUGGESTIONS_FAILED'; @@ -31,9 +31,9 @@ export const updateQuery = (query) => ({ query }); -export const updateDatasets = (datasets) => ({ - type: UPDATE_DATASETS, - datasets +export const toggleDataset = (dataset) => ({ + type: TOGGLE_DATASET, + dataset }); export const startSpinner = () => ({ diff --git a/src/client/components/DatasetSelector.js b/src/client/components/DatasetSelector.js index c203d0ab..47b2e478 100644 --- a/src/client/components/DatasetSelector.js +++ b/src/client/components/DatasetSelector.js @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; -import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +//import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; import ListItemText from '@material-ui/core/ListItemText'; import Checkbox from '@material-ui/core/Checkbox'; -import IconButton from '@material-ui/core/IconButton'; -import CommentIcon from '@material-ui/icons/Comment'; +//import IconButton from '@material-ui/core/IconButton'; +//import CommentIcon from '@material-ui/icons/Comment'; import ListSubheader from '@material-ui/core/ListSubheader'; const styles = theme => ({ @@ -25,35 +25,36 @@ const styles = theme => ({ const DatasetSelector = props => { const { classes } = props; - //onClick={props.updateDatasets(dataset.id)} - const handleOnChange = (value) => { - props.updateDatasets(value); + const handleToggle = value => () => { + props.toggleDataset(value); }; + // <ListItemSecondaryAction> + // <IconButton aria-label="Comments"> + // <CommentIcon /> + // </IconButton> + // </ListItemSecondaryAction> + return ( <div className={classes.root}> <List subheader={<ListSubheader>Select data sources</ListSubheader>}> - {Object.keys(props.datasets).map(key => ( + {Object.keys(props.datasets).map(id => ( <ListItem - key={key} + key={id} role={undefined} dense button - onClick={handleOnChange} + onClick={handleToggle(id)} className={classes.listItem} > <Checkbox - checked={props.datasets[key].selected} + checked={props.datasets[id].selected} tabIndex={-1} disableRipple /> - <ListItemText primary={props.datasets[key].title} /> - <ListItemSecondaryAction> - <IconButton aria-label="Comments"> - <CommentIcon /> - </IconButton> - </ListItemSecondaryAction> + <ListItemText primary={props.datasets[id].title} /> + </ListItem> ))} </List> @@ -64,7 +65,7 @@ const DatasetSelector = props => { DatasetSelector.propTypes = { classes: PropTypes.object.isRequired, datasets: PropTypes.object.isRequired, - updateDatasets: PropTypes.func.isRequired + toggleDataset: PropTypes.func.isRequired }; export default withStyles(styles)(DatasetSelector); diff --git a/src/client/components/IntegrationAutosuggest.js b/src/client/components/IntegrationAutosuggest.js index 1b76d9ed..52e27b9d 100644 --- a/src/client/components/IntegrationAutosuggest.js +++ b/src/client/components/IntegrationAutosuggest.js @@ -127,7 +127,7 @@ const IntegrationAutosuggest = (props) => { // }; const handleOnSuggestionsFetchRequested = ({ value }) => { - if (props.search.suggestionsQuery != value ) { + if (props.search.suggestionsQuery != value || props.search.suggestions.length === 0) { console.log('fetching suggestions'); props.fetchSuggestions(); } diff --git a/src/client/containers/MapApp.js b/src/client/containers/MapApp.js index a6c3c3d3..b9aecd37 100644 --- a/src/client/containers/MapApp.js +++ b/src/client/containers/MapApp.js @@ -22,7 +22,7 @@ import DatasetSelector from '../components/DatasetSelector'; import Immutable from 'immutable'; import { updateQuery, - updateDatasets, + toggleDataset, fetchSuggestions, clearSuggestions, fetchResults, @@ -155,7 +155,7 @@ let MapApp = (props) => { <Divider /> <DatasetSelector datasets={props.search.datasets} - updateDatasets={props.updateDatasets} + toggleDataset={props.toggleDataset} /> <Divider /> <IntegrationAutosuggest @@ -247,7 +247,7 @@ const mapDispatchToProps = ({ openDrawer, closeDrawer, updateQuery, - updateDatasets, + toggleDataset, fetchSuggestions, clearSuggestions, fetchResults, @@ -266,7 +266,7 @@ MapApp.propTypes = { openDrawer: PropTypes.func.isRequired, closeDrawer: PropTypes.func.isRequired, updateQuery: PropTypes.func.isRequired, - updateDatasets: PropTypes.func.isRequired, + toggleDataset: PropTypes.func.isRequired, fetchSuggestions: PropTypes.func.isRequired, clearSuggestions: PropTypes.func.isRequired, fetchResults: PropTypes.func.isRequired, diff --git a/src/client/reducers/search.js b/src/client/reducers/search.js index dd3e3b81..73dfe7c4 100644 --- a/src/client/reducers/search.js +++ b/src/client/reducers/search.js @@ -1,6 +1,6 @@ import { UPDATE_QUERY, - UPDATE_DATASETS, + TOGGLE_DATASET, FETCH_SUGGESTIONS, FETCH_RESULTS, UPDATE_SUGGESTIONS, @@ -49,10 +49,18 @@ const search = (state = INITIAL_STATE, action) => { switch (action.type) { case UPDATE_QUERY: return { ...state, query: action.query || '' }; - case UPDATE_DATASETS: + case TOGGLE_DATASET: return { ...state, - datasets: state.datasets + suggestions: [], + results: [], + datasets: { + ...state.datasets, + [action.dataset]: { + ...state.datasets[action.dataset], + selected: state.datasets[action.dataset].selected ? false : true + } + } }; case FETCH_SUGGESTIONS: return { ...state, fetchingSuggestions: true }; -- GitLab