Переглянути джерело

add shift-enter to move up, mirroring enter moving down

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brandon Wong 3 тижнів тому
батько
коміт
41b6afea64

+ 15 - 0
frontend/src/cljs/microtables_frontend/events.cljs

@@ -67,6 +67,21 @@
      (println "::press-enter-in-cell" c r)
      {:focus-on-cell [new-col new-row]})))
 
+(re-frame/reg-event-fx
+ ::press-shift-enter-in-cell
+ (fn [{:keys [db]} [_ c r]]
+   (let [min-row? (= r 1)
+         min-col? (= c "A")
+         new-col (if min-row?
+                   (if min-col?
+                     (coords/highest-col db)
+                     (coords/prev-letter c))
+                   c)
+         new-row (if min-row?
+                   (coords/highest-row db)
+                   (dec r))]
+     {:focus-on-cell [new-col new-row]})))
+
 (re-frame/reg-fx
  :focus-on-cell
  (fn [[c r]]

+ 3 - 0
frontend/src/cljs/microtables_frontend/utils/coordinates.cljs

@@ -44,6 +44,9 @@
 (def col-letters
   (iterate next-letter "A"))
 
+(defn prev-letter [lc]
+  (last (take-while #(not= % lc) col-letters)))
+
 (defn- order-two-cols
   "Accepts two column names (letters) and returns them in order."
   [col1 col2]

+ 3 - 1
frontend/src/cljs/microtables_frontend/views/sheet.cljs

@@ -30,7 +30,9 @@
                                         :on-focus #(re-frame/dispatch [::events/movement-enter-cell c r])
                                         :on-blur #(re-frame/dispatch [::events/movement-leave-cell c r])
                                         :on-keyPress #(when (= (.. % -which) 13)
-                                                        (re-frame/dispatch [::events/press-enter-in-cell c r]))}
+                                                        (if (.. % -shiftKey)
+                                                          (re-frame/dispatch [::events/press-shift-enter-in-cell c r])
+                                                          (re-frame/dispatch [::events/press-enter-in-cell c r])))}
                                  ; column-major tabindex on touch devices so "Next" moves down instead of right
                                  touch-device? (assoc :tab-index (+ (* col-idx maxrow) r)))]]))