From 503ab5c66ab524dfe36aed84a01899cd07ed2bc5 Mon Sep 17 00:00:00 2001
From: Noah Loomans <noahloomans@gmail.com>
Date: Wed, 13 Dec 2017 15:53:19 +0100
Subject: Allow selection of result using keyboard

---
 src/client/react/reducers/search.js | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

(limited to 'src/client/react/reducers')

diff --git a/src/client/react/reducers/search.js b/src/client/react/reducers/search.js
index f566b49..6ef0f4d 100644
--- a/src/client/react/reducers/search.js
+++ b/src/client/react/reducers/search.js
@@ -48,6 +48,34 @@ const search = (state = DEFAULT_STATE, action) => {
         isExactMatch,
       };
     }
+
+    case 'SEARCH/CHANGE_SELECTED_RESULT': {
+      const { results, isExactMatch } = state;
+      const prevSelectedResult = state.selectedResult;
+      const prevSelectedResultIndex = results.indexOf(prevSelectedResult);
+      let nextSelectedResultIndex =
+        prevSelectedResultIndex + action.relativeChange;
+
+      if (nextSelectedResultIndex < -1) {
+        nextSelectedResultIndex = results.length - 1;
+      } else if (nextSelectedResultIndex > results.length - 1) {
+        nextSelectedResultIndex = -1;
+      }
+
+      let nextSelectedResult =
+        nextSelectedResultIndex === -1
+          ? null
+          : results[nextSelectedResultIndex];
+
+      if (isExactMatch) {
+        nextSelectedResult = prevSelectedResult;
+      }
+
+      return {
+        ...state,
+        selectedResult: nextSelectedResult,
+      };
+    }
     default:
       return state;
   }
-- 
cgit v1.1