(ns microtables-frontend.events (:require [re-frame.core :as re-frame] [microtables-frontend.db :as db] [microtables-frontend.utils :as utils])) (re-frame/reg-event-db ::initialize-db (fn [_ _] db/default-db)) (re-frame/reg-event-db ::movement-enter-cell (fn [db [_ c r]] (println "::movement-enter-cell" c r) (assoc-in db [:position :cursor] {:c c :r r}))) (re-frame/reg-event-db ::movement-leave-cell (fn [db [_ c r]] (let [datum (utils/get-datum (:table-data db) c r)] (println "::movement-leave-cell" c r "dirty?" (true? (:dirty datum))) (-> db (assoc-in [:position :cursor] nil) (assoc-in [:position :selection] nil))))) (re-frame/reg-event-db ::edit-cell-value (fn [db [_ c r existing-datum value]] (println "::edit-cell-value" c r value) (if (nil? existing-datum) (assoc db :table-data (conj (:table-data db) {:row r :col c :value value :dirty true})) (assoc db :table-data (map #(if (and (= r (:row %)) (= c (:col %))) (assoc (assoc % :dirty true) :value value) %) (:table-data db))))))