From d2b38492205a48f00d027c2caa5412d14ef790d4 Mon Sep 17 00:00:00 2001 From: prabhanshuguptagit Date: Thu, 20 Jun 2024 00:31:05 +0530 Subject: [PATCH] Clear cell with pressed character if its filled, edit on enter --- src/bean/ui/events.cljs | 17 ++++++++++++----- src/bean/ui/views/sheet.cljs | 4 +++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/bean/ui/events.cljs b/src/bean/ui/events.cljs index f554664..c772c38 100644 --- a/src/bean/ui/events.cljs +++ b/src/bean/ui/events.cljs @@ -50,7 +50,9 @@ (if (or (= (.-key e) "Backspace") (= (.-key e) "Delete")) {:db (update-in db [:sheet] #(grid/clear-selection % selection))} - {:fx [[:dispatch [::edit-cell [r c]]]]}))))) + (if (= (count (.-key e)) 1) + {:fx [[:dispatch [::edit-cell [r c] (.-key e)]]]} + {:fx [[:dispatch [::edit-cell [r c]]]]})))))) (rf/reg-event-fx ::paste-addressed-cells @@ -118,16 +120,21 @@ (rf/reg-fx ::focus-element - (fn [el-id] - (rc/after-render #(some-> js/document (.getElementById el-id) .focus)))) + (fn [[el-id text]] + (rc/after-render + #(let [el (-> js/document (.getElementById el-id))] + (when text (set! (.-innerHTML el) text)) + (.focus el) + (.selectAllChildren (.getSelection js/window) el) + (.collapseToEnd (.getSelection js/window)))))) (rf/reg-event-fx ::edit-cell - (fn edit-cell [{:keys [db]} [_ rc]] + (fn edit-cell [{:keys [db]} [_ rc text]] (let [rc* (util/merged-or-self rc (:sheet db))] {:db (assoc-in db [:ui :grid :editing-cell] rc*) :fx [[:dispatch [::set-selection {:start rc* :end (util/merged-until-or-self rc* (:sheet db))}]] - [::focus-element "cell-input"]]}))) + [::focus-element ["cell-input" text]]]}))) (rf/reg-event-db ::clear-edit-cell diff --git a/src/bean/ui/views/sheet.cljs b/src/bean/ui/views/sheet.cljs index 79d7b00..a5da8ac 100644 --- a/src/bean/ui/views/sheet.cljs +++ b/src/bean/ui/views/sheet.cljs @@ -859,7 +859,9 @@ (or (.-ctrlKey e) (.-metaKey e))) (defn handle-global-kbd [e] - (when (and (not (editing-text?)) (not (ctrl-or-meta? e))) + (when (and (not (editing-text?)) (not (or (ctrl-or-meta? e) + (= (.-key e) "Shift") + (= (.-key e) "Escape")))) (rf/dispatch [::events/handle-global-kbd e]))) (defn handle-paste [e]