diff --git a/src/cljs/swinging_needle_meter/core.cljs b/src/cljs/swinging_needle_meter/core.cljs index ea96433..04ceafc 100644 --- a/src/cljs/swinging_needle_meter/core.cljs +++ b/src/cljs/swinging_needle_meter/core.cljs @@ -1,6 +1,6 @@ (ns swinging-needle-meter.core (:require [reagent.core :as reagent] - [re-frame.core :as re-frame] + [re-frame.core :as rf] [swinging-needle-meter.events] [swinging-needle-meter.subs] [swinging-needle-meter.views :as views] @@ -14,12 +14,20 @@ (enable-console-print!) (println "dev mode"))) +(defn dispatch-timer-event + [] + (let [now (js/Date.)] + (rf/dispatch [:timer now]))) ;; <-- dispatch used + +;; call the dispatching function every tenth of a second +(defonce do-timer (js/setInterval dispatch-timer-event 100)) + (defn mount-root [] - (re-frame/clear-subscription-cache!) + (rf/clear-subscription-cache!) (reagent/render [views/main-panel] (.getElementById js/document "app"))) (defn ^:export init [] - (re-frame/dispatch-sync [:initialize-db]) + (rf/dispatch-sync [:initialize-db]) (dev-setup) (mount-root)) diff --git a/src/cljs/swinging_needle_meter/events.cljs b/src/cljs/swinging_needle_meter/events.cljs index b474e3f..b35980c 100644 --- a/src/cljs/swinging_needle_meter/events.cljs +++ b/src/cljs/swinging_needle_meter/events.cljs @@ -8,17 +8,22 @@ (fn [_ _] state/default-state)) -;; The clock ticked. +;; The clock ticked. Implement a mechanical swing. (re-frame/reg-event-db :timer - (fn [db _] - db)) + (fn [db [x value]] + (let [old-value (:old-value db) + target (:value db) + new-value (+ old-value (/ (- target old-value) 10))] + (assoc db :old-value new-value)))) (re-frame/reg-event-db :set-value (fn [db [x value]] - (js/console.log (str :set-value " " x " " value)) - (assoc db :value value))) + (assoc + (assoc db :old-value (:value db)) + :value + value))) (re-frame/reg-event-db :set-setpoint diff --git a/src/cljs/swinging_needle_meter/state.cljs b/src/cljs/swinging_needle_meter/state.cljs index 0ea97f2..b69bed9 100644 --- a/src/cljs/swinging_needle_meter/state.cljs +++ b/src/cljs/swinging_needle_meter/state.cljs @@ -5,6 +5,7 @@ (def default-state {:timer (js/Date.) :value 60 + :old-value 0 :setpoint 75 :gradations 5 :size 70 diff --git a/src/cljs/swinging_needle_meter/subs.cljs b/src/cljs/swinging_needle_meter/subs.cljs index 0e488c4..8414bdf 100644 --- a/src/cljs/swinging_needle_meter/subs.cljs +++ b/src/cljs/swinging_needle_meter/subs.cljs @@ -12,6 +12,11 @@ (fn [db] (:value db))) +(re-frame/reg-sub + :old-value + (fn [db] + (:old-value db))) + (re-frame/reg-sub :setpoint (fn [db] diff --git a/src/cljs/swinging_needle_meter/views.cljs b/src/cljs/swinging_needle_meter/views.cljs index 8fac950..688eaa9 100644 --- a/src/cljs/swinging_needle_meter/views.cljs +++ b/src/cljs/swinging_needle_meter/views.cljs @@ -11,14 +11,6 @@ ;; Demo: swinging-needle-meter ;; ------------------------------------------------------------------------------------ -(defn dispatch-timer-event - [] - (let [now (js/Date.)] - (rf/dispatch [:timer now]))) ;; <-- dispatch used - -;; call the dispatching function every tenth of a second -(defonce do-timer (js/setInterval dispatch-timer-event 100)) - (defn swinging-needle-demo [] @@ -69,7 +61,7 @@ [v-box :gap "20px" :children [[swinging-needle-meter - :model @(rf/subscribe [:value]) + :model @(rf/subscribe [:old-value]) :setpoint @(rf/subscribe [:setpoint]) :unit @(rf/subscribe [:unit]) :min-value @(rf/subscribe [:min-val])