Browse code

Hook suggestion cycling/completing functionality up to keypress events

Joseph Weston authored on 12/12/2021 23:05:34
Showing 1 changed files
... ...
@@ -120,11 +120,24 @@
120 120
    (let [direction (case (.-key event)
121 121
                      "ArrowUp"   :backward
122 122
                      "ArrowDown" :forward
123
-                     nil)]
124
-     (if direction
125
-       (do (.preventDefault event)
126
-           (merge cmd (cycle-history cmd direction)))
127
-       cmd))))
123
+                     "ArrowRight" :right
124
+                     nil)
125
+         tab (= (.-key event) "Tab")
126
+         escape (= (.-key event) "Escape")]
127
+     (println (.-key event) direction (contains? #{:backward :forward} direction))
128
+     (cond
129
+      (contains? #{:backward :forward} direction) (do (.preventDefault event)
130
+                                                      (if (some-> cmd :suggestions :options)
131
+                                                          (merge cmd (cycle-suggestions cmd direction))
132
+                                                          (merge cmd (cycle-history cmd direction))))
133
+      (and (= :right direction)
134
+           (some-> cmd :suggestions :selected)) (do (.preventDefault event)
135
+                                                    (merge cmd (complete-suggestion cmd)))
136
+      tab (do (.preventDefault event)
137
+              (merge cmd (cycle-suggestions cmd :forward)))
138
+      (and escape (some-> cmd :suggestions :options)) (do (.preventDefault event)
139
+                                                          (merge cmd {:suggestions null-suggestions}))
140
+      :else     cmd))))
128 141
 
129 142
 (re-frame/reg-event-fx
130 143
  ::submit-cmd