From 357c5d2ab0c0a26cda59bb2556f1db3fde4c040c Mon Sep 17 00:00:00 2001 From: Esko Ikkala <esko.ikkala@aalto.fi> Date: Wed, 6 Jun 2018 16:35:19 +0300 Subject: [PATCH] Clear suggestions on input change, use old suggestions if input unchanged --- src/components/IntegrationAutosuggest.js | 47 ++++++++++++++++++++---- src/reducers/search.js | 16 +++++--- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/components/IntegrationAutosuggest.js b/src/components/IntegrationAutosuggest.js index ed9122c0..cb7b5f70 100644 --- a/src/components/IntegrationAutosuggest.js +++ b/src/components/IntegrationAutosuggest.js @@ -72,7 +72,13 @@ const styles = theme => ({ const IntegrationAutosuggest = (props) => { - const handleOnChange = (event, { newValue }) => props.updateQuery(newValue); + const handleOnChange = (event, { newValue }) => { + props.clearSuggestions(); + props.updateQuery(newValue); + //if (newValue.length < 3) { + + // } + }; const handleOnSuggestionSelected = () => { props.clearSuggestions(); @@ -86,9 +92,37 @@ const IntegrationAutosuggest = (props) => { } }; + // const handleOnBlur = (event, { highlightedSuggestion }) => { + // // console.log(event); + // // console.log(highlightedSuggestion); + // }; + + const handleOnSuggestionsFetchRequested = ({ value }) => { + // console.log(value) + // console.log(reason) + // console.log(props.search.suggestionsQuery) + if (props.search.suggestionsQuery != value ) { + // console.log('fetching suggestions'); + props.fetchSuggestions(); + } + // else { + // console.log('using old suggestions'); + // } + }; + + const shouldRenderSuggestions = (value) => { + return value.trim().length > 2; + }; + + const handleOnSuggestionsClearRequested = () => { + //console.log('SuggestionsClearRequested'); + //props.clearSuggestions(); + }; + //alwaysRenderSuggestions={true} + const { classes } = props; - //console.log('IntegrationAutosuggest', props); + //console.log('IntegrationAutosuggest', props.search.suggestions); return ( <Autosuggest @@ -97,13 +131,12 @@ const IntegrationAutosuggest = (props) => { suggestionsContainerOpen: classes.suggestionsContainerOpen, suggestionsList: classes.suggestionsList, suggestion: classes.suggestion, - sectionContainer : classes.sectionContainer, - sectionContainerFirst : classes.sectionContainerFirst, }} renderInputComponent={renderInput} suggestions={props.search.suggestions} - onSuggestionsClearRequested={props.clearSuggestions} - onSuggestionsFetchRequested={props.fetchSuggestions} + shouldRenderSuggestions={shouldRenderSuggestions} + onSuggestionsFetchRequested={handleOnSuggestionsFetchRequested} + onSuggestionsClearRequested={handleOnSuggestionsClearRequested} renderSuggestionsContainer={renderSuggestionsContainer} getSuggestionValue={getSuggestionValue} renderSuggestion={renderSuggestion} @@ -113,7 +146,7 @@ const IntegrationAutosuggest = (props) => { placeholder: 'Search place names', value: props.search.query, onChange: handleOnChange, - onKeyDown: handleOnKeyDown + onKeyDown: handleOnKeyDown, }} /> ); diff --git a/src/reducers/search.js b/src/reducers/search.js index 9ef2998a..dcf09469 100644 --- a/src/reducers/search.js +++ b/src/reducers/search.js @@ -11,9 +11,11 @@ import results from './results'; export const INITIAL_STATE = { query: '', - datasets: ['warsa_karelian_places', 'warsa_municipalities'], + datasets: ['warsa_karelian_places', 'warsa_municipalities', 'kotus'], suggestions: [], - results: [] + suggestionsQuery: '', + results: [], + resultsQuery: '' }; const search = (state = INITIAL_STATE, action) => { @@ -24,14 +26,18 @@ const search = (state = INITIAL_STATE, action) => { return { ...state, datasets: action.datasets || [] }; case CLEAR_SUGGESTIONS: case UPDATE_SUGGESTIONS: - return { ...state, suggestions: suggestions(state.suggestions, action) }; + return { + ...state, + suggestions: suggestions(state.suggestions, action), + suggestionsQuery: state.query + }; case CLEAR_RESULTS: case UPDATE_RESULTS: return { ...state, suggestions: [], - results: results(state.results, action) - + results: results(state.results, action), + resultsQuery: state.query }; default: return state; -- GitLab