1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- (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 [_ _]
- (println "initializing db")
- (-> db/default-db
- (update-in [:table-data] (partial map utils/add-parsed-variables))
- (update-in [:table-data] utils/re-evaluate)
- (update-in [:alt-table-data] utils/create-all-references)
- (update-in [:alt-table-data] utils/create-all-back-references))))
- (re-frame/reg-event-db
- ::movement-enter-cell
- (fn [db [_ c r]]
- (println "::movement-enter-cell" c r)
- (assoc-in db [:position :cursor] {:col c :row r})))
- (defn re-evaluate-if-dirty [db dirty]
- (if dirty
- (update-in db [:table-data] utils/re-evaluate)
- db))
- (re-frame/reg-event-db
- ::movement-leave-cell
- (fn [db [_ c r]]
- (let [datum (utils/get-datum (:table-data db) c r)
- alt-datum (get-in (:alt-table-data db) [c r])]
- (println "::movement-leave-cell" c r (if (:dirty datum) "- dirty" ""))
- (-> db
- (assoc-in [:position :cursor] nil)
- (assoc-in [:position :selection] nil)
- (update-in [:table-data] (partial utils/add-parsed-variables-to-specific-datum c r))
- (update-in [:alt-table-data c r] utils/add-references)
- (re-evaluate-if-dirty (:dirty datum))))))
- (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);TODO: when removing list-based data, remove this conditional, and all references to "existing-datum" (not needed in map-based data)
- (-> db
- (assoc :table-data (conj (:table-data db) {:row r :col c :value value :dirty true}))
- (update-in [:alt-table-data] #(utils/change-datum-value % c r value)))
- (-> db
- (assoc :table-data (map #(if (and (= r (:row %)) (= c (:col %))) (assoc (assoc % :dirty true) :value value) %) (:table-data db)))
- (update-in [:alt-table-data] #(utils/change-datum-value % c r value))))))
|