2016-05-19 16:31:56 +00:00
|
|
|
(ns status-im.utils.views)
|
2016-05-14 09:39:01 +00:00
|
|
|
|
|
|
|
(defn prepare-subs [subs]
|
|
|
|
(let [pairs (map (fn [[form sub]]
|
|
|
|
{:form form
|
|
|
|
:sub sub
|
|
|
|
:sym (gensym)})
|
|
|
|
(partition 2 subs))]
|
|
|
|
[(mapcat (fn [{:keys [sym sub]}]
|
|
|
|
[sym `(re-frame.core/subscribe ~sub)])
|
|
|
|
pairs)
|
|
|
|
(mapcat (fn [{:keys [sym form]}]
|
|
|
|
[form `(deref ~sym)])
|
|
|
|
pairs)]))
|
|
|
|
|
|
|
|
(defmacro defview
|
|
|
|
[n params & rest]
|
|
|
|
(let [[subs body] (if (= 1 (count rest))
|
|
|
|
[nil (first rest)]
|
|
|
|
rest)
|
|
|
|
[subs-bindings vars-bindings] (prepare-subs subs)]
|
|
|
|
`(defn ~n ~params
|
|
|
|
(let [~@subs-bindings]
|
|
|
|
(fn ~params
|
|
|
|
(let [~@vars-bindings]
|
|
|
|
~body))))))
|
|
|
|
|