From 903b0100b5e5e8b198d479741a4681284a725d2c Mon Sep 17 00:00:00 2001 From: prabhanshuguptagit Date: Wed, 19 Jun 2024 18:24:29 +0530 Subject: [PATCH] Clear many cells with backspace/delete --- src/bean/grid.cljs | 9 ++++++++- src/bean/ui/events.cljs | 10 +++++++--- src/bean/ui/paste.cljs | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/bean/grid.cljs b/src/bean/grid.cljs index 89cb1c2..df8e2d8 100644 --- a/src/bean/grid.cljs +++ b/src/bean/grid.cljs @@ -295,7 +295,7 @@ ;; untested and slightly weird interface, exists for pasting ;; many cells and handling merged cells etc. -(defn update-cells-bulk [sheet start addressed-attrs] +(defn update-cells-bulk [sheet {:keys [start]} addressed-attrs] (->> addressed-attrs (map #(do [(offset (first %) start) (second %)])) (reduce @@ -313,6 +313,13 @@ (unmerge-cells sheet (map #(offset % start) (keys addressed-attrs)))) eval-sheet-a-few-times)) +(defn clear-selection [sheet {:keys [start end]}] + (->> (util/addresses-matrix start end) + (mapcat identity) + (map #(do [% {:content ""}])) + (into {}) + (update-cells-bulk sheet start))) + (defn eval-named ([name {:keys [bindings] :as sheet}] (if-let [value (bindings name)] diff --git a/src/bean/ui/events.cljs b/src/bean/ui/events.cljs index 1349abc..eb0ff17 100644 --- a/src/bean/ui/events.cljs +++ b/src/bean/ui/events.cljs @@ -45,14 +45,18 @@ (rf/reg-event-fx ::handle-global-kbd (fn handle-global-kbd [{:keys [db]} [_ e]] - (when-let [[r c] (:start (get-in db [:ui :grid :selection]))] - {:fx [[:dispatch [::edit-cell [r c]]]]}))) + (let [selection (get-in db [:ui :grid :selection])] + (when-let [[r c] (:start selection)] + (if (or (= (.-key e) "Backspace") + (= (.-key e) "Delete")) + {:db (update-in db [:sheet] #(grid/clear-selection % selection))} + {:fx [[:dispatch [::edit-cell [r c]]]]}))))) (rf/reg-event-db ::paste-addressed-cells (fn paste-addressed-cells [db [_ addressed-cells]] (update-in db [:sheet] #(grid/update-cells-bulk % - (:start (get-in db [:ui :grid :selection])) + (get-in db [:ui :grid :selection]) addressed-cells)))) (rf/reg-fx diff --git a/src/bean/ui/paste.cljs b/src/bean/ui/paste.cljs index 5bb0f48..aa714c4 100644 --- a/src/bean/ui/paste.cljs +++ b/src/bean/ui/paste.cljs @@ -77,8 +77,8 @@ (defn hiccup-matrix->html [matrix] (hr/hiccup-to-html - [[:body {} [:table {} - (into [:tbody {}] matrix)]]])) + [[:table {} + (into [:tbody {}] matrix)]])) (defn hickory-table->cells [hickory-table] (loop [hiccup-cells (->>