mirror of
https://github.com/status-im/re-natal.git
synced 2025-02-23 17:58:14 +00:00
follow best practices of re-frame and give an app-db a schema
This commit is contained in:
parent
bef4f05188
commit
da97f17a0a
@ -232,11 +232,14 @@ init = (projName) ->
|
|||||||
|
|
||||||
handlersPath = "src/#{projNameUs}/handlers.cljs"
|
handlersPath = "src/#{projNameUs}/handlers.cljs"
|
||||||
subsPath = "src/#{projNameUs}/subs.cljs"
|
subsPath = "src/#{projNameUs}/subs.cljs"
|
||||||
|
dbPath = "src/#{projNameUs}/db.cljs"
|
||||||
exec "cp #{resources}cljs/handlers.cljs #{handlersPath}"
|
exec "cp #{resources}cljs/handlers.cljs #{handlersPath}"
|
||||||
exec "cp #{resources}cljs/subs.cljs #{subsPath}"
|
exec "cp #{resources}cljs/subs.cljs #{subsPath}"
|
||||||
|
exec "cp #{resources}cljs/db.cljs #{dbPath}"
|
||||||
|
|
||||||
edit handlersPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
|
edit handlersPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
|
||||||
edit subsPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
|
edit subsPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
|
||||||
|
edit dbPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
|
||||||
|
|
||||||
fs.mkdirSync 'src/cljsjs'
|
fs.mkdirSync 'src/cljsjs'
|
||||||
exec "echo '(ns cljsjs.react)' > src/cljsjs/react.cljs"
|
exec "echo '(ns cljsjs.react)' > src/cljsjs/react.cljs"
|
||||||
@ -283,8 +286,7 @@ init = (projName) ->
|
|||||||
exec 'npm i'
|
exec 'npm i'
|
||||||
|
|
||||||
fs.unlinkSync '.gitignore'
|
fs.unlinkSync '.gitignore'
|
||||||
exec "
|
exec "node -e
|
||||||
node -e
|
|
||||||
\"require('react-native/local-cli/cli').init('.', '#{projName}')\"
|
\"require('react-native/local-cli/cli').init('.', '#{projName}')\"
|
||||||
"
|
"
|
||||||
|
|
||||||
|
8
resources/cljs/db.cljs
Normal file
8
resources/cljs/db.cljs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
(ns $PROJECT_NAME_HYPHENATED$.db
|
||||||
|
(:require [schema.core :as s :include-macros true]))
|
||||||
|
|
||||||
|
;; schema of app-db
|
||||||
|
(def schema {:greeting s/Str})
|
||||||
|
|
||||||
|
;; initial state of app-db
|
||||||
|
(def app-db {:greeting "Hello Clojure in iOS and Android!"})
|
@ -1,15 +1,32 @@
|
|||||||
(ns $PROJECT_NAME_HYPHENATED$.handlers
|
(ns $PROJECT_NAME_HYPHENATED$.handlers
|
||||||
(:require
|
(:require
|
||||||
[re-frame.core :refer [register-handler path trim-v after dispatch]]))
|
[re-frame.core :refer [register-handler after]]
|
||||||
|
[schema.core :as s :include-macros true]
|
||||||
|
[$PROJECT_NAME_HYPHENATED$.db :refer [app-db schema]]))
|
||||||
|
|
||||||
(def app-db {:greeting "Hello Clojure in iOS and Android!"})
|
;; -- Middleware ------------------------------------------------------------
|
||||||
|
;;
|
||||||
|
;; See https://github.com/Day8/re-frame/wiki/Using-Handler-Middleware
|
||||||
|
;;
|
||||||
|
(defn check-and-throw
|
||||||
|
"throw an exception if db doesn't match the schema."
|
||||||
|
[a-schema db]
|
||||||
|
(if-let [problems (s/check a-schema db)]
|
||||||
|
(throw (js/Error. (str "schema check failed: " problems)))))
|
||||||
|
|
||||||
|
(def validate-schema-mw
|
||||||
|
(after (partial check-and-throw schema)))
|
||||||
|
|
||||||
|
;; -- Handlers --------------------------------------------------------------
|
||||||
|
|
||||||
(register-handler
|
(register-handler
|
||||||
:initialize-db
|
:initialize-db
|
||||||
|
validate-schema-mw
|
||||||
(fn [_ _]
|
(fn [_ _]
|
||||||
app-db))
|
app-db))
|
||||||
|
|
||||||
(register-handler
|
(register-handler
|
||||||
:set-greeting
|
:set-greeting
|
||||||
|
validate-schema-mw
|
||||||
(fn [db [_ value]]
|
(fn [db [_ value]]
|
||||||
(assoc db :greeting value)))
|
(assoc db :greeting value)))
|
@ -6,7 +6,8 @@
|
|||||||
:dependencies [[org.clojure/clojure "1.7.0"]
|
:dependencies [[org.clojure/clojure "1.7.0"]
|
||||||
[org.clojure/clojurescript "1.7.170"]
|
[org.clojure/clojurescript "1.7.170"]
|
||||||
[reagent "0.5.1" :exclusions [cljsjs/react]]
|
[reagent "0.5.1" :exclusions [cljsjs/react]]
|
||||||
[re-frame "0.5.0"]]
|
[re-frame "0.6.0"]
|
||||||
|
[prismatic/schema "1.0.4"]]
|
||||||
:plugins [[lein-cljsbuild "1.1.1"]
|
:plugins [[lein-cljsbuild "1.1.1"]
|
||||||
[lein-figwheel "0.5.0-2"]]
|
[lein-figwheel "0.5.0-2"]]
|
||||||
:clean-targets ["target/" "index.ios.js" "index.android.js"]
|
:clean-targets ["target/" "index.ios.js" "index.android.js"]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user