And now with inertia

This commit is contained in:
simon 2017-07-18 13:49:32 +01:00
parent b3c624eb5c
commit c83b557d41
5 changed files with 28 additions and 17 deletions

View file

@ -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))

View file

@ -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

View file

@ -5,6 +5,7 @@
(def default-state
{:timer (js/Date.)
:value 60
:old-value 0
:setpoint 75
:gradations 5
:size 70

View file

@ -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]

View file

@ -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])