2019-05-22 15:00:34 +00:00
|
|
|
(ns status-im.ethereum.macros
|
2017-11-22 10:37:20 +00:00
|
|
|
(:require [clojure.string :as string]
|
|
|
|
[clojure.java.io :as io]))
|
|
|
|
|
2018-10-10 11:07:48 +00:00
|
|
|
(defn token-icon-path
|
2018-04-18 12:17:10 +00:00
|
|
|
[network symbol]
|
2019-05-22 05:50:49 +00:00
|
|
|
(let [s (str "./resources/images/tokens/" (name network) "/" (name symbol) ".png")
|
|
|
|
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)))))
|
|
|
|
`(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
|
|
|
|
2018-04-18 12:17:10 +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.
|
2018-10-10 11:07:48 +00:00
|
|
|
(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."
|
2018-04-18 12:17:10 +00:00
|
|
|
[network tokens]
|
2018-10-10 11:07:48 +00:00
|
|
|
(mapv #(assoc-in % [:icon :source] (token->icon network %)) tokens))
|
|
|
|
|
|
|
|
(defn network->icon [network]
|
2019-05-22 05:50:49 +00:00
|
|
|
(let [s (str "./resources/images/tokens/" (name network) "/0-native.png")
|
|
|
|
image (gensym)]
|
2018-10-10 11:07:48 +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)))))
|
|
|
|
`(let [~image (atom nil)]
|
|
|
|
(fn []
|
|
|
|
(or
|
|
|
|
@~image
|
|
|
|
(reset! ~image
|
|
|
|
(js/require "./resources/images/tokens/default-native.png"))))))))
|
2018-10-10 11:07:48 +00:00
|
|
|
|
|
|
|
(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]
|
2019-05-22 15:00:34 +00:00
|
|
|
(network->icon network))]) all-native-currencies)))
|