status-react/src/status_im/utils/views.clj

28 lines
786 B
Clojure
Raw Normal View History

(ns status-im.utils.views)
(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))))))