|
| 1 | + |
| 2 | +(ns app.main |
| 3 | + (:require [respo.core :refer [render! clear-cache! realize-ssr!]] |
| 4 | + [app.comp.container :refer [comp-container]] |
| 5 | + [app.updater :refer [updater]] |
| 6 | + [app.schema :as schema] |
| 7 | + [reel.util :refer [listen-devtools!]] |
| 8 | + [reel.core :refer [reel-updater refresh-reel]] |
| 9 | + [reel.schema :as reel-schema] |
| 10 | + [cljs.reader :refer [read-string]] |
| 11 | + [app.config :as config])) |
| 12 | + |
| 13 | +(defonce *reel |
| 14 | + (atom (-> reel-schema/reel (assoc :base schema/store) (assoc :store schema/store)))) |
| 15 | + |
| 16 | +(defn dispatch! [op op-data] |
| 17 | + (comment println "Dispatch:" op) |
| 18 | + (reset! *reel (reel-updater updater @*reel op op-data))) |
| 19 | + |
| 20 | +(def mount-target (.querySelector js/document ".app")) |
| 21 | + |
| 22 | +(defn on-key! [event] |
| 23 | + (cond |
| 24 | + (and (.-ctrlKey event) (= "b" (.-key event))) (dispatch! :toggle-color nil) |
| 25 | + (and (.-ctrlKey event) (= "=" (.-key event))) (dispatch! :inc-line nil) |
| 26 | + (and (.-ctrlKey event) (= "-" (.-key event))) (dispatch! :dec-line nil))) |
| 27 | + |
| 28 | +(defn persist-storage! [] |
| 29 | + (.setItem js/localStorage (:storage config/site) (pr-str (:store @*reel)))) |
| 30 | + |
| 31 | +(defn render-app! [renderer] |
| 32 | + (renderer mount-target (comp-container @*reel) #(dispatch! %1 %2))) |
| 33 | + |
| 34 | +(def ssr? (some? (js/document.querySelector "meta.respo-ssr"))) |
| 35 | + |
| 36 | +(defn main! [] |
| 37 | + (if ssr? (render-app! realize-ssr!)) |
| 38 | + (render-app! render!) |
| 39 | + (add-watch *reel :changes (fn [] (render-app! render!))) |
| 40 | + (listen-devtools! "a" dispatch!) |
| 41 | + (.addEventListener js/window "beforeunload" persist-storage!) |
| 42 | + (.addEventListener js/window "keydown" #(on-key! %)) |
| 43 | + (js/setInterval persist-storage! (* 1000 60)) |
| 44 | + (let [raw (.getItem js/localStorage (:storage config/site))] |
| 45 | + (when (some? raw) (dispatch! :hydrate-storage (read-string raw)))) |
| 46 | + (println "App started.")) |
| 47 | + |
| 48 | +(defn reload! [] |
| 49 | + (clear-cache!) |
| 50 | + (reset! *reel (refresh-reel @*reel schema/store updater)) |
| 51 | + (println "Code updated.")) |
0 commit comments