events.cljs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. (ns microtables-frontend.events
  2. (:require
  3. [re-frame.core :as re-frame]
  4. [microtables-frontend.db :as db]
  5. [microtables-frontend.utils :as utils]))
  6. (re-frame/reg-event-db
  7. ::initialize-db
  8. (fn [_ _]
  9. db/default-db))
  10. (re-frame/reg-event-db
  11. ::movement-enter-cell
  12. (fn [db [_ c r]]
  13. (println "::movement-enter-cell" c r)
  14. (assoc-in db [:position :cursor] {:c c :r r})))
  15. (re-frame/reg-event-db
  16. ::movement-leave-cell
  17. (fn [db [_ c r]]
  18. (let [datum (utils/get-datum (:table-data db) c r)]
  19. (println "::movement-leave-cell" c r "dirty?" (true? (:dirty datum)))
  20. (-> db
  21. (assoc-in [:position :cursor] nil)
  22. (assoc-in [:position :selection] nil)))))
  23. (re-frame/reg-event-db
  24. ::edit-cell-value
  25. (fn [db [_ c r existing-datum value]]
  26. (println "::edit-cell-value" c r value)
  27. (if (nil? existing-datum)
  28. (assoc db :table-data (conj (:table-data db) {:row r :col c :value value :dirty true}))
  29. (assoc db :table-data (map #(if (and (= r (:row %)) (= c (:col %))) (assoc (assoc % :dirty true) :value value) %) (:table-data db))))))