+ SET_RECENT_QUERIES: recentQueries => ({ ...state, recentQueries }),
+ UPDATE_SAVED_QUERY: searchQuery => ({ ...state, savedQueries: searchQuery }),
+ SET_SELECTED_ITEM: item => ({ ...state, selectedItem: makeSelectedItem(item) }),
+ MOVE_UP: () => {
+ let selectedItem = state.selectedItem;
+ if (state.currentView === SearchView.AUTOCOMPLETE) {
+ const idx = state.searchResults.findIndex(r => r.uuid === selectedItem.id);
+ if (idx > 0) {
+ selectedItem = makeSelectedItem(state.searchResults[idx - 1].uuid);
+ } else {
+ selectedItem = makeSelectedItem(state.searchValue);
+ }
+ } else if (state.currentView === SearchView.BASIC) {
+ const items = makeQueryList(state.recentQueries, state.savedQueries);
+
+ const idx = items.findIndex(i => i.id === selectedItem.id);
+ if (idx > 0) {
+ selectedItem = items[idx - 1];
+ }
+ }
+ return {
+ ...state,
+ selectedItem
+ };
+ },
+ MOVE_DOWN: () => {
+ let selectedItem = state.selectedItem;
+ if (state.currentView === SearchView.AUTOCOMPLETE) {
+ const idx = state.searchResults.findIndex(r => r.uuid === selectedItem.id);
+ if (idx >= 0 && idx < state.searchResults.length - 1) {
+ selectedItem = makeSelectedItem(state.searchResults[idx + 1].uuid);
+ } else if (idx < 0 && state.searchResults.length > 0) {
+ selectedItem = makeSelectedItem(state.searchResults[0].uuid);
+ }
+ } else if (state.currentView === SearchView.BASIC) {
+ const items = makeQueryList(state.recentQueries, state.savedQueries);
+
+ const idx = items.findIndex(i => i.id === selectedItem.id);
+ if (idx >= 0 && idx < items.length - 1) {
+ selectedItem = items[idx + 1];
+ }
+
+ if (idx < 0 && items.length > 0) {
+ selectedItem = items[0];
+ }
+ }
+ return {
+ ...state,
+ selectedItem
+ };
+ },
+ SELECT_FIRST_ITEM: () => {
+ let selectedItem = state.selectedItem;
+ if (state.currentView === SearchView.AUTOCOMPLETE) {
+ selectedItem = makeSelectedItem(state.searchValue);
+ } else if (state.currentView === SearchView.BASIC) {
+ const items = makeQueryList(state.recentQueries, state.savedQueries);
+ if (items.length > 0) {
+ selectedItem = items[0];
+ }
+ }
+ return {
+ ...state,
+ selectedItem
+ };
+ },