Skip to content

Commit

Permalink
Show time of changes
Browse files Browse the repository at this point in the history
  • Loading branch information
nenadalm committed Aug 10, 2023
1 parent 57e8c2e commit e8b3f0e
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 4 deletions.
32 changes: 31 additions & 1 deletion src/app/events.cljs
Original file line number Diff line number Diff line change
@@ -1,9 +1,38 @@
(ns app.events
(:refer-clojure :exclude [time])
(:require
[clojure.edn :as edn]
[re-frame.core :as re-frame]
[reagent.core :as reagent]
[app.util :as u]))

(defn- animation-interval
"https://gist.github.com/jakearchibald/cb03f15670817001b1157e62a076fe95"
[ms signal f]
(let [start (.-currentTime js/document.timeline)]
(letfn [(frame [time]
(when-not (.-aborted signal)
(f time)
(schedule-frame time)))
(schedule-frame [time]
(let [elapsed (- time start)
rounded-elapsed (* (js/Math.round (/ elapsed ms)) ms)
target-next (+ start rounded-elapsed ms)
delay (- target-next (js/performance.now))]
(js/setTimeout #(js/requestAnimationFrame frame) delay)))]
(schedule-frame start))))

(def time (reagent/atom 0))

(re-frame/reg-fx
:update-time
(fn [interval-ms]
(animation-interval
interval-ms
(.-signal (js/AbortController.))
(fn [_]
(reset! time (.getTime (js/Date.)))))))

(re-frame/reg-cofx
:time
(fn [coeffects _]
Expand Down Expand Up @@ -96,7 +125,8 @@
(let [db (reset-game {:settings (merge default-settings settings)
:profiles (if (seq profiles) profiles default-profiles)
:app-info {:version app-version}})]
(cond-> {:db db}
(cond-> {:db db
:update-time 1000}
(not= profiles (:profiles db)) (assoc :profiles (:profiles db))))))

(re-frame/reg-event-db
Expand Down
7 changes: 7 additions & 0 deletions src/app/util.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@
(str/lower-case x)
(str/lower-case y)))

(defn format-elapsed [ms]
(let [s (js/Math.trunc (/ ms 1000))
m (js/Math.trunc (/ s 60))]
(if (== 0 m)
(str s "s")
(str m "m"))))

(defn merge-close
"Merges close inputs next to each other
Expand Down
8 changes: 5 additions & 3 deletions src/app/views.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
(:require
[reagent.core :as reagent]
[re-frame.core :as re-frame]
[app.util :as u]
[app.subs :as subs]
[app.events :as events]
[app.components.icons.views :as i]))
Expand Down Expand Up @@ -58,9 +59,10 @@
"Update"]]]]))))

(defn amount-history [{:keys [history]}]
[:div.life-input--amount-history
(for [{:keys [time amount]} history]
^{:key time} [:div (str (when (< 0 amount) "+")) amount])])
(let [now @events/time]
[:div.life-input--amount-history
(for [{:keys [time amount]} history]
^{:key time} [:div (str (when (< 0 amount) "+")) amount " (" (u/format-elapsed (- now time)) ")"])]))

(defn life-input [_]
(let [event (reagent/atom nil)
Expand Down

0 comments on commit e8b3f0e

Please sign in to comment.