status-react/src/status_im/ethereum/macros.clj

60 lines
2.1 KiB
Clojure
Raw Normal View History

(ns status-im.ethereum.macros
2017-11-22 10:37:20 +00:00
(:require [clojure.string :as string]
[clojure.java.io :as io]))
(defn token-icon-path
[network symbol]
(let [s (str "./resources/images/tokens/" (name network) "/" (name symbol) ".png")
s-js (str "." s)
2019-05-22 05:50:49 +00:00
image (gensym)]
2017-11-22 10:37:20 +00:00
(if (.exists (io/file s))
2019-05-22 05:50:49 +00:00
`(let [~image (atom nil)]
(fn []
(or @~image
(reset! ~image (js/require ~s-js)))))
2019-05-22 05:50:49 +00:00
`(let [~image (atom nil)]
(fn []
(or
@~image
(reset! ~image
(js/require "../resources/images/tokens/default-token.png"))))))))
2017-11-22 10:37:20 +00:00
(defn- token->icon [network {:keys [icon symbol]}]
2017-11-22 10:37:20 +00:00
;; Tokens can define their own icons.
;; If not try to make one using a local image as resource, if it does not exist fallback to default.
(or icon (token-icon-path network symbol)))
2017-11-22 10:37:20 +00:00
(defmacro resolve-icons
"In react-native arguments to require must be static strings.
Resolve all icons at compilation time so no variable is used."
[network tokens]
(mapv #(-> %
(assoc-in [:icon :source] (token->icon network %))
(update :address string/lower-case))
tokens))
(defn network->icon [network]
(let [s (str "../resources/images/tokens/" (name network) "/0-native.png")
2019-05-22 05:50:49 +00:00
image (gensym)]
(if (.exists (io/file s))
2019-05-22 05:50:49 +00:00
`(let [~image (atom nil)]
(fn []
(or @~image
(reset! ~image (js/require ~s)))))
`(let [~image (atom nil)]
(fn []
(or
@~image
(reset! ~image
(js/require "../resources/images/tokens/default-native.png"))))))))
(defmacro resolve-native-currency-icons
"In react-native arguments to require must be static strings.
Resolve all icons at compilation time so no variable is used."
[all-native-currencies]
(into {}
(map (fn [[network native-currency]]
[network (assoc-in native-currency
[:icon :source]
(network->icon network))]) all-native-currencies)))