deleteSavedQuery(id: number) {
this.savedQueries.splice(id, 1);
localStorage.setItem('savedQueries', JSON.stringify(this.savedQueries));
-
}
}
\ No newline at end of file
OPEN_SEARCH_VIEW: ofType<{}>(),
CLOSE_SEARCH_VIEW: ofType<{}>(),
SET_SEARCH_RESULTS: ofType<GroupContentsResource[]>(),
- SET_SEARCH_VALUE: ofType<string>()
+ SET_SEARCH_VALUE: ofType<string>(),
+ SET_SAVED_QUERIES: ofType<string[]>()
});
export type SearchBarActions = UnionOf<typeof searchBarActions>;
export const saveQuery = (query: string) =>
(dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
services.searchQueriesService.saveQuery(query);
- };
-
-export const loadSavedQueries = () =>
- (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
- const savedSearchQueries = services.searchQueriesService.getSavedQueries();
- return savedSearchQueries || [];
+ dispatch(searchBarActions.SET_SAVED_QUERIES(services.searchQueriesService.getSavedQueries()));
};
export const deleteSavedQuery = (id: number) =>
(dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
services.searchQueriesService.deleteSavedQuery(id);
const savedSearchQueries = services.searchQueriesService.getSavedQueries();
+ dispatch(searchBarActions.SET_SAVED_QUERIES(services.searchQueriesService.getSavedQueries()));
return savedSearchQueries || [];
};
open: boolean;
searchResults: GroupContentsResource[];
searchValue: string;
+ savedQueries: string[];
}
export enum SearchView {
currentView: SearchView.BASIC,
open: false,
searchResults: [],
- searchValue: ''
+ searchValue: '',
+ savedQueries: JSON.parse(localStorage.getItem('savedQueries') || '[]') as string[]
};
export const searchBarReducer = (state = initialState, action: SearchBarActions): SearchBar =>
CLOSE_SEARCH_VIEW: () => ({ ...state, open: false }),
SET_SEARCH_RESULTS: (searchResults) => ({ ...state, searchResults }),
SET_SEARCH_VALUE: (searchValue) => ({ ...state, searchValue }),
+ SET_SAVED_QUERIES: savedQueries => ({ ...state, savedQueries }),
default: () => state
});
\ No newline at end of file
interface SearchBarBasicViewProps {
setView: (currentView: string) => void;
recentQueries: () => string[];
- savedQueries: () => string[];
deleteSavedQuery: (id: number) => void;
+ savedQueries: string[];
}
export const SearchBarBasicView = withStyles(styles)(
- ({ classes, setView, recentQueries, savedQueries, deleteSavedQuery }: SearchBarBasicViewProps & WithStyles<CssRules>) =>
+ ({ classes, setView, recentQueries, deleteSavedQuery, savedQueries }: SearchBarBasicViewProps & WithStyles<CssRules>) =>
<Paper className={classes.searchView}>
<div className={classes.searchQueryList}>Saved search queries</div>
<List component="nav" className={classes.list}>
- {savedQueries().map((query, index) => <RenderSavedQueries key={index} text={query} id={index} deleteSavedQuery={deleteSavedQuery}/>)}
+ {savedQueries.map((query, index) => <RenderSavedQueries key={index} text={query} id={index} deleteSavedQuery={deleteSavedQuery}/>)}
</List>
<div className={classes.searchQueryList}>Recent search queries</div>
<List component="nav" className={classes.list}>
searchValue: string;
currentView: string;
isPopoverOpen: boolean;
+ savedQueries: string[];
} & SearchBarAutocompleteViewDataProps;
interface SearchBarActionProps {
saveRecentQuery: (query: string) => void;
loadRecentQueries: () => string[];
saveQuery: (query: string) => void;
- loadSavedQueries: () => string[];
deleteSavedQuery: (id: number) => void;
}
}
getView = (currentView: string) => {
+ const { onSetView, loadRecentQueries, savedQueries, deleteSavedQuery, searchValue, searchResults } = this.props;
switch (currentView) {
case SearchView.BASIC:
- return <SearchBarBasicView setView={this.props.onSetView} recentQueries={this.props.loadRecentQueries} savedQueries={this.props.loadSavedQueries} deleteSavedQuery={this.props.deleteSavedQuery}/>;
+ return <SearchBarBasicView setView={onSetView} recentQueries={loadRecentQueries} savedQueries={savedQueries} deleteSavedQuery={deleteSavedQuery} />;
case SearchView.ADVANCED:
- return <SearchBarAdvancedView setView={this.props.onSetView} />;
+ return <SearchBarAdvancedView setView={onSetView} />;
case SearchView.AUTOCOMPLETE:
return <SearchBarAutocompleteView
- searchResults={this.props.searchResults}
- searchValue={this.props.searchValue} />;
+ searchResults={searchResults}
+ searchValue={searchValue} />;
default:
- return <SearchBarBasicView setView={this.props.onSetView} recentQueries={this.props.loadRecentQueries} savedQueries={this.props.loadSavedQueries} deleteSavedQuery={this.props.deleteSavedQuery}/>;
+ return <SearchBarBasicView setView={onSetView} recentQueries={loadRecentQueries} savedQueries={savedQueries} deleteSavedQuery={deleteSavedQuery} />;
}
}
this.props.saveQuery(this.state.value);
this.props.onSearch(this.state.value);
this.props.loadRecentQueries();
- this.props.loadSavedQueries();
}
handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
deleteSavedQuery,
saveRecentQuery,
loadRecentQueries,
- saveQuery,
- loadSavedQueries
+ saveQuery
} from '~/store/search-bar/search-bar-actions';
import { SearchBarView } from '~/views-components/search-bar/search-bar-view';
searchValue: searchBar.searchValue,
currentView: searchBar.currentView,
isPopoverOpen: searchBar.open,
- searchResults: searchBar.searchResults
+ searchResults: searchBar.searchResults,
+ savedQueries: searchBar.savedQueries
};
};
saveRecentQuery: (query: string) => dispatch<any>(saveRecentQuery(query)),
loadRecentQueries: () => dispatch<any>(loadRecentQueries()),
saveQuery: (query: string) => dispatch<any>(saveQuery(query)),
- loadSavedQueries: () => dispatch<any>(loadSavedQueries()),
deleteSavedQuery: (id: number) => dispatch<any>(deleteSavedQuery(id))
});