diff --git a/src/status_im/ethereum/json_rpc.cljs b/src/status_im/ethereum/json_rpc.cljs index 1bf2efaec3..2f31628ecf 100644 --- a/src/status_im/ethereum/json_rpc.cljs +++ b/src/status_im/ethereum/json_rpc.cljs @@ -14,7 +14,7 @@ "eth_getBalance" {:on-result money/bignumber} "eth_estimateGas" - {:on-result #(money/bignumber (int (* % 1.2)))} + {:on-result #(money/bignumber (if (= (int %) 21000) % (int (* % 1.2))))} "eth_gasPrice" {:on-result money/bignumber} "eth_getBlockByHash" diff --git a/src/status_im/goog/i18n.cljs b/src/status_im/goog/i18n.cljs index e876e41336..7a7c557840 100644 --- a/src/status_im/goog/i18n.cljs +++ b/src/status_im/goog/i18n.cljs @@ -370,77 +370,73 @@ "Formats an amount of a currency based on the currency pattern If currency-symbol? is false, the currency symbol is excluded from the formatting" - ([value currency-code] - (format-currency value currency-code true)) - ([value currency-code currency-symbol?] - (.addTier2Support ^js goog.i18n.currency) - (let [currency-code-to-nfs-map {"ZAR" ^js goog.i18n.NumberFormatSymbols_af - "ETB" ^js goog.i18n.NumberFormatSymbols_am - "EGP" ^js goog.i18n.NumberFormatSymbols_ar - "DZD" ^js goog.i18n.NumberFormatSymbols_ar_DZ - "AZN" ^js goog.i18n.NumberFormatSymbols_az - "BYN" ^js goog.i18n.NumberFormatSymbols_be - "BGN" ^js goog.i18n.NumberFormatSymbols_bg - "BDT" ^js goog.i18n.NumberFormatSymbols_bn - "EUR" ^js goog.i18n.NumberFormatSymbols_br - "BAM" ^js goog.i18n.NumberFormatSymbols_bs - "USD" ^js goog.i18n.NumberFormatSymbols_en - "CZK" ^js goog.i18n.NumberFormatSymbols_cs - "GBP" ^js goog.i18n.NumberFormatSymbols_cy - "DKK" ^js goog.i18n.NumberFormatSymbols_da - "CHF" ^js goog.i18n.NumberFormatSymbols_de_CH - "AUD" ^js goog.i18n.NumberFormatSymbols_en_AU - "CAD" ^js goog.i18n.NumberFormatSymbols_en_CA - "INR" ^js goog.i18n.NumberFormatSymbols_en_IN - "SGD" ^js goog.i18n.NumberFormatSymbols_en_SG - "MXN" ^js goog.i18n.NumberFormatSymbols_es_419 - "IRR" ^js goog.i18n.NumberFormatSymbols_fa - "PHP" ^js goog.i18n.NumberFormatSymbols_fil - "ILS" ^js goog.i18n.NumberFormatSymbols_he - "HRK" ^js goog.i18n.NumberFormatSymbols_hr - "HUF" ^js goog.i18n.NumberFormatSymbols_hu - "AMD" ^js goog.i18n.NumberFormatSymbols_hy - "IDR" ^js goog.i18n.NumberFormatSymbols_id - "ISK" ^js goog.i18n.NumberFormatSymbols_is - "JPY" ^js goog.i18n.NumberFormatSymbols_ja - "GEL" ^js goog.i18n.NumberFormatSymbols_ka - "KZT" ^js goog.i18n.NumberFormatSymbols_kk - "KHR" ^js goog.i18n.NumberFormatSymbols_km - "KRW" ^js goog.i18n.NumberFormatSymbols_ko - "KGS" ^js goog.i18n.NumberFormatSymbols_ky - "CDF" ^js goog.i18n.NumberFormatSymbols_ln - "LAK" ^js goog.i18n.NumberFormatSymbols_lo - "MKD" ^js goog.i18n.NumberFormatSymbols_mk - "MNT" ^js goog.i18n.NumberFormatSymbols_mn - "MDL" ^js goog.i18n.NumberFormatSymbols_mo - "MYR" ^js goog.i18n.NumberFormatSymbols_ms - "MMK" ^js goog.i18n.NumberFormatSymbols_my - "NOK" ^js goog.i18n.NumberFormatSymbols_nb - "NPR" ^js goog.i18n.NumberFormatSymbols_ne - "PLN" ^js goog.i18n.NumberFormatSymbols_pl - "BRL" ^js goog.i18n.NumberFormatSymbols_pt - "RON" ^js goog.i18n.NumberFormatSymbols_ro - "RUB" ^js goog.i18n.NumberFormatSymbols_ru - "RSD" ^js goog.i18n.NumberFormatSymbols_sh - "LKR" ^js goog.i18n.NumberFormatSymbols_si - "ALL" ^js goog.i18n.NumberFormatSymbols_sq - "SEK" ^js goog.i18n.NumberFormatSymbols_sv - "TZS" ^js goog.i18n.NumberFormatSymbols_sw - "THB" ^js goog.i18n.NumberFormatSymbols_th - "TRY" ^js goog.i18n.NumberFormatSymbols_tr - "UAH" ^js goog.i18n.NumberFormatSymbols_uk - "PKR" ^js goog.i18n.NumberFormatSymbols_ur - "UZS" ^js goog.i18n.NumberFormatSymbols_uz - "VND" ^js goog.i18n.NumberFormatSymbols_vi - "CNY" ^js goog.i18n.NumberFormatSymbols_zh - "HKD" ^js goog.i18n.NumberFormatSymbols_zh_HK - "TWD" ^js goog.i18n.NumberFormatSymbols_zh_TW} - nfs (or (get currency-code-to-nfs-map currency-code) - ^js goog.i18n.NumberFormatSymbols_en)] - (.format - ^js (new ^js goog.i18n.NumberFormat - (let [pattern (.-CURRENCY_PATTERN ^js nfs)] - (if currency-symbol? - pattern - (string/replace pattern #"\s*¤\s*" "")))) - value)))) + [value currency-code] + (.addTier2Support ^js goog.i18n.currency) + (let [currency-code-to-nfs-map {"ZAR" ^js goog.i18n.NumberFormatSymbols_af + "ETB" ^js goog.i18n.NumberFormatSymbols_am + "EGP" ^js goog.i18n.NumberFormatSymbols_ar + "DZD" ^js goog.i18n.NumberFormatSymbols_ar_DZ + "AZN" ^js goog.i18n.NumberFormatSymbols_az + "BYN" ^js goog.i18n.NumberFormatSymbols_be + "BGN" ^js goog.i18n.NumberFormatSymbols_bg + "BDT" ^js goog.i18n.NumberFormatSymbols_bn + "EUR" ^js goog.i18n.NumberFormatSymbols_br + "BAM" ^js goog.i18n.NumberFormatSymbols_bs + "USD" ^js goog.i18n.NumberFormatSymbols_en + "CZK" ^js goog.i18n.NumberFormatSymbols_cs + "GBP" ^js goog.i18n.NumberFormatSymbols_cy + "DKK" ^js goog.i18n.NumberFormatSymbols_da + "CHF" ^js goog.i18n.NumberFormatSymbols_de_CH + "AUD" ^js goog.i18n.NumberFormatSymbols_en_AU + "CAD" ^js goog.i18n.NumberFormatSymbols_en_CA + "INR" ^js goog.i18n.NumberFormatSymbols_en_IN + "SGD" ^js goog.i18n.NumberFormatSymbols_en_SG + "MXN" ^js goog.i18n.NumberFormatSymbols_es_419 + "IRR" ^js goog.i18n.NumberFormatSymbols_fa + "PHP" ^js goog.i18n.NumberFormatSymbols_fil + "ILS" ^js goog.i18n.NumberFormatSymbols_he + "HRK" ^js goog.i18n.NumberFormatSymbols_hr + "HUF" ^js goog.i18n.NumberFormatSymbols_hu + "AMD" ^js goog.i18n.NumberFormatSymbols_hy + "IDR" ^js goog.i18n.NumberFormatSymbols_id + "ISK" ^js goog.i18n.NumberFormatSymbols_is + "JPY" ^js goog.i18n.NumberFormatSymbols_ja + "GEL" ^js goog.i18n.NumberFormatSymbols_ka + "KZT" ^js goog.i18n.NumberFormatSymbols_kk + "KHR" ^js goog.i18n.NumberFormatSymbols_km + "KRW" ^js goog.i18n.NumberFormatSymbols_ko + "KGS" ^js goog.i18n.NumberFormatSymbols_ky + "CDF" ^js goog.i18n.NumberFormatSymbols_ln + "LAK" ^js goog.i18n.NumberFormatSymbols_lo + "MKD" ^js goog.i18n.NumberFormatSymbols_mk + "MNT" ^js goog.i18n.NumberFormatSymbols_mn + "MDL" ^js goog.i18n.NumberFormatSymbols_mo + "MYR" ^js goog.i18n.NumberFormatSymbols_ms + "MMK" ^js goog.i18n.NumberFormatSymbols_my + "NOK" ^js goog.i18n.NumberFormatSymbols_nb + "NPR" ^js goog.i18n.NumberFormatSymbols_ne + "PLN" ^js goog.i18n.NumberFormatSymbols_pl + "BRL" ^js goog.i18n.NumberFormatSymbols_pt + "RON" ^js goog.i18n.NumberFormatSymbols_ro + "RUB" ^js goog.i18n.NumberFormatSymbols_ru + "RSD" ^js goog.i18n.NumberFormatSymbols_sh + "LKR" ^js goog.i18n.NumberFormatSymbols_si + "ALL" ^js goog.i18n.NumberFormatSymbols_sq + "SEK" ^js goog.i18n.NumberFormatSymbols_sv + "TZS" ^js goog.i18n.NumberFormatSymbols_sw + "THB" ^js goog.i18n.NumberFormatSymbols_th + "TRY" ^js goog.i18n.NumberFormatSymbols_tr + "UAH" ^js goog.i18n.NumberFormatSymbols_uk + "PKR" ^js goog.i18n.NumberFormatSymbols_ur + "UZS" ^js goog.i18n.NumberFormatSymbols_uz + "VND" ^js goog.i18n.NumberFormatSymbols_vi + "CNY" ^js goog.i18n.NumberFormatSymbols_zh + "HKD" ^js goog.i18n.NumberFormatSymbols_zh_HK + "TWD" ^js goog.i18n.NumberFormatSymbols_zh_TW} + nfs (or (get currency-code-to-nfs-map currency-code) + ^js goog.i18n.NumberFormatSymbols_en)] + (.format + ^js (new ^js goog.i18n.NumberFormat + (let [pattern (.-CURRENCY_PATTERN ^js nfs)] + (string/replace pattern #"\s*¤\s*" ""))) + value))) \ No newline at end of file diff --git a/src/status_im/signing/core.cljs b/src/status_im/signing/core.cljs index baacb4ea31..0a7dd535ce 100644 --- a/src/status_im/signing/core.cljs +++ b/src/status_im/signing/core.cljs @@ -207,7 +207,7 @@ (prices/update-prices) #(when-not gas {:db (assoc-in (:db %) [:signing/edit-fee :gas-loading?] true) - :signing/update-estimated-gas {:obj tx-obj + :signing/update-estimated-gas {:obj (dissoc tx-obj :gasPrice) :success-event :signing/update-estimated-gas-success :error-event :signing/update-estimated-gas-error}}) #(when-not gasPrice diff --git a/src/status_im/subs.cljs b/src/status_im/subs.cljs index cc4fcbe07b..86ceceae3c 100644 --- a/src/status_im/subs.cljs +++ b/src/status_im/subs.cljs @@ -1077,7 +1077,7 @@ (-> balance-total-value (money/with-precision 2) str - (i18n/format-currency (:code currency) false)) + (i18n/format-currency (:code currency))) "0")) "..."))) @@ -1096,7 +1096,7 @@ (-> balance-total-value (money/with-precision 2) str - (i18n/format-currency (:code currency) false)) + (i18n/format-currency (:code currency))) "0")) "..."))) @@ -1182,7 +1182,7 @@ (money/crypto->fiat price) (money/with-precision 2) str - (i18n/format-currency (:code currency) false))))))) + (i18n/format-currency (:code currency)))))))) (re-frame/reg-sub :wallet/visible-assets-with-values diff --git a/src/status_im/ui/screens/signing/views.cljs b/src/status_im/ui/screens/signing/views.cljs index f99bd2c55a..8388190d63 100644 --- a/src/status_im/ui/screens/signing/views.cljs +++ b/src/status_im/ui/screens/signing/views.cljs @@ -326,7 +326,8 @@ " • "] (if prices-loading? [react/small-loading-indicator] - [react/text {:style {:color colors/black}} (i18n/format-currency converted-value (:code wallet-currency))]) + [react/text {:style {:color colors/black}} + (i18n/format-currency converted-value (:code wallet-currency))]) [react/text {:style {:color colors/gray}} (str " " (:code wallet-currency))]]]}])) (views/defview fee-item [prices wallet-currency fee-display-symbol fee gas-error gas-error-state prices-loading?] @@ -353,7 +354,8 @@ " • "] (if prices-loading? [react/small-loading-indicator] - [react/text {:style {:color colors/black}} (i18n/format-currency converted-fee-value (:code wallet-currency))]) + [react/text {:style {:color colors/black}} + (i18n/format-currency converted-fee-value (:code wallet-currency))]) [react/text {:style {:color colors/gray}} (str " " (:code wallet-currency))]] :chevron])) :on-press #(re-frame/dispatch diff --git a/src/status_im/ui/screens/wallet/send/styles.cljs b/src/status_im/ui/screens/wallet/send/styles.cljs index d346434c92..c9dba2408b 100644 --- a/src/status_im/ui/screens/wallet/send/styles.cljs +++ b/src/status_im/ui/screens/wallet/send/styles.cljs @@ -12,4 +12,15 @@ :align-items :center :justify-content :space-between :padding-top (when-not small-screen? 16) - :padding-left 16}) \ No newline at end of file + :padding-left 16}) + +(def set-max-button + {:height 35 + :border-radius 40 + :background-color colors/blue-light + :margin-horizontal 12 + :align-self :flex-start + :margin-bottom 12 + :align-items :center + :justify-content :center + :padding-horizontal 12}) \ No newline at end of file diff --git a/src/status_im/ui/screens/wallet/send/views.cljs b/src/status_im/ui/screens/wallet/send/views.cljs index d9d7e4299e..646f464ea1 100644 --- a/src/status_im/ui/screens/wallet/send/views.cljs +++ b/src/status_im/ui/screens/wallet/send/views.cljs @@ -18,37 +18,34 @@ [status-im.ui.screens.wallet.send.sheets :as sheets] [status-im.ui.screens.wallet.components.views :as components] [status-im.utils.utils :as utils] - [status-im.ui.components.button :as button] - [status-im.ethereum.core :as ethereum])) + [status-im.ethereum.core :as ethereum] + [status-im.utils.money :as money])) -(defn header [{:keys [label small-screen? on-cancel]}] +(defn header [{:keys [label small-screen?]}] [react/view (styles/header small-screen?) [react/view {:flex 1} [react/text {:style (merge {:typography :title-bold} (when small-screen? {:font-size 15}))} - (i18n/label (or label :t/send-transaction))]] - [button/button {:type :secondary - :container-style {:padding-horizontal 24} - :label (i18n/label :t/cancel) - :on-press on-cancel}]]) + (i18n/label (or label :t/send-transaction))]]]) -(defn asset-selector [{:keys [request? token from]}] +(defn asset-selector [{:keys [request? token from]} window-width] (let [{:keys [name icon color]} token] [react/touchable-highlight - {:style {:flex 1} - :on-press (when-not request? #(do - (re-frame/dispatch [:dismiss-keyboard]) - (re-frame/dispatch [:bottom-sheet/show-sheet - {:content (fn [] [sheets/assets (:address from)]) - :content-height 300}])))} + {:on-press (when-not request? + #(do + (re-frame/dispatch [:dismiss-keyboard]) + (re-frame/dispatch [:bottom-sheet/show-sheet + {:content (fn [] [sheets/assets (:address from)]) + :content-height 300}])))} [react/view {:style {:flex-direction :row :align-items :center - :flex 1 :margin-left 16} + :margin-left 16} :accessibility-label :choose-asset-button} (if icon [list/item-image (assoc icon :style {:background-color colors/gray-lighter :border-radius 50} :image-style {:width 32 :height 32})] [chat-icon/custom-icon-view-list name color 32]) - [react/text {:style {:margin-left 8 :flex-shrink 0.5} + [react/text {:style {:margin-left 8 + :max-width (/ window-width 4)} :number-of-lines 2} (wallet.utils/display-symbol token)] (when-not request? @@ -58,9 +55,10 @@ [list-item/list-item {:icon [chat-icon/custom-icon-view-list (:name account) (:color account)] :title (:name account) - :subtitle (str (wallet.utils/format-amount amount decimals) - " " - (wallet.utils/display-symbol token)) + :subtitle (when token + (str (wallet.utils/format-amount amount decimals) + " " + (wallet.utils/display-symbol token))) :accessories [:chevron] :on-press #(do (re-frame/dispatch [:dismiss-keyboard]) @@ -70,40 +68,56 @@ (defn render-contact [contact from-chat?] (if from-chat? - [list-item/list-item {:title (multiaccounts/displayed-name contact) + [list-item/list-item {:title (multiaccounts/displayed-name contact) :subtitle (:address contact) - :icon (multiaccounts/displayed-photo contact)}] + :icon (multiaccounts/displayed-photo contact)}] [list-item/list-item - {:title (utils/get-shortened-checksum-address - (if (string? contact) contact (:address contact))) - :subtitle (when-not contact (i18n/label :t/wallet-choose-recipient)) + {:title (utils/get-shortened-checksum-address + (if (string? contact) contact (:address contact))) + :subtitle (when-not contact (i18n/label :t/wallet-choose-recipient)) :accessibility-label :choose-recipient-button - :on-press #(do - (re-frame/dispatch [:dismiss-keyboard]) - (re-frame/dispatch [:bottom-sheet/show-sheet - {:content sheets/choose-recipient - :content-height 200}])) - :accessories [:chevron]}])) + :on-press #(do + (re-frame/dispatch [:dismiss-keyboard]) + (re-frame/dispatch [:bottom-sheet/show-sheet + {:content sheets/choose-recipient + :content-height 200}])) + :accessories [:chevron]}])) + +(defn set-max [token] + [react/touchable-highlight + {:on-press + #(when token + (re-frame/dispatch [:wallet.send/set-max-amount token]))} + [react/view {:style styles/set-max-button} + [react/text {:style {:color colors/blue}} (i18n/label :t/set-max)]]]) + +(defn fiat-value [amount {:keys [symbol]} prices wallet-currency] + (when-let [price (get-in prices [(keyword symbol) (keyword (:code wallet-currency)) :price])] + (let [norm-amount (js/parseFloat (money/normalize amount)) + amount (if (js/isNaN norm-amount) 0 norm-amount)] + [react/text {:style {:color colors/gray :margin-left 16 :margin-bottom 8 + :font-size 15 :line-height 22}} + (str (i18n/format-currency (* amount price) (:code wallet-currency)) " " (:code wallet-currency))]))) (views/defview sheet [_] (views/letsubs [{:keys [amount-error amount-text request? from token to sign-enabled? from-chat?] :as tx} [:wallet.send/prepare-transaction-with-balance] + prices [:prices] + wallet-currency [:wallet/currency] window-height [:dimensions/window-height] + window-width [:dimensions/window-width] keyboard-height [:keyboard-height]] (let [small-screen? (< (- window-height keyboard-height) 450) to-norm (ethereum/normalized-hex (if (string? to) to (:address to)))] [react/view {:style (styles/sheet small-screen?)} - [header {:small-screen? small-screen? - :on-cancel #(re-frame/dispatch [:wallet/cancel-transaction-command])}] - [react/view {:flex-direction :row :padding-horizontal 24 :align-items :center - :flex 1 - :margin-vertical (if small-screen? 8 16)} + [react/view {:flex-direction :row :padding-horizontal 16 :align-items :center + :margin-top 12 :margin-bottom 4} [react/text-input {:style {:font-size (if small-screen? 24 38) - :color (if amount-error colors/red colors/black) - :flex-shrink 1} + :max-width (- (* (/ window-width 4) 3) 106) + :color (if amount-error colors/red colors/black)} :keyboard-type :decimal-pad :auto-capitalize :words :accessibility-label :amount-input @@ -112,13 +126,16 @@ :auto-focus true :on-change-text #(re-frame/dispatch [:wallet.send/set-amount-text %]) :placeholder "0.0 "}] - [asset-selector tx] + [asset-selector tx window-width] (when amount-error [tooltip/tooltip (if from amount-error (i18n/label :t/select-account-first)) {:bottom-value 2 :font-size 12}])] + [fiat-value amount-text token prices wallet-currency] + (when-not (or request? from-chat?) + [set-max token]) [components/separator] (when-not small-screen? [list-item/list-item {:type :section-header :title :t/from}]) @@ -135,7 +152,11 @@ [react/view {:flex 1} [render-contact to from-chat?]]] [toolbar/toolbar - {:center + {:left + {:label :t/cancel + :type :secondary + :on-press #(re-frame/dispatch [:wallet/cancel-transaction-command])} + :right {:label (if (and (not request?) from-chat? (not to-norm)) :t/wallet-send :t/next) :accessibility-label :send-transaction-bottom-sheet :disabled? (not sign-enabled?) @@ -152,17 +173,19 @@ (views/letsubs [{:keys [amount-error amount-text from token sign-enabled?] :as tx} [:wallet.request/prepare-transaction-with-balance] window-height [:dimensions/window-height] + window-width [:dimensions/window-width] + prices [:prices] + wallet-currency [:wallet/currency] keyboard-height [:keyboard-height]] (let [small-screen? (< (- window-height keyboard-height) 450)] [react/view {:style (styles/sheet small-screen?)} [header {:small-screen? small-screen? - :label :t/request-transaction - :on-cancel #(re-frame/dispatch [:wallet/cancel-transaction-command])}] - [react/view {:flex-direction :row :padding-horizontal 24 :align-items :center + :label :t/request-transaction}] + [react/view {:flex-direction :row :padding-horizontal 24 :align-items :center :margin-vertical (if small-screen? 8 16)} [react/text-input - {:style {:font-size (if small-screen? 24 38) - :color (when amount-error colors/red) + {:style {:font-size (if small-screen? 24 38) + :color (when amount-error colors/red) :flex-shrink 1} :keyboard-type :decimal-pad :auto-capitalize :words @@ -171,10 +194,11 @@ :auto-focus true :on-change-text #(re-frame/dispatch [:wallet.request/set-amount-text %]) :placeholder "0.0 "}] - [asset-selector tx] + [asset-selector tx window-width] (when amount-error [tooltip/tooltip amount-error {:bottom-value 2 :font-size 12}])] + [fiat-value amount-text token prices wallet-currency] [components/separator] (when-not small-screen? [list-item/list-item {:type :section-header :title :t/to}]) @@ -184,7 +208,11 @@ [react/view {:flex 1} [render-account from token :wallet.request/set-field]]] [toolbar/toolbar - {:center + {:left + {:label :t/cancel + :type :secondary + :on-press #(re-frame/dispatch [:wallet/cancel-transaction-command])} + :right {:label :t/wallet-request :accessibility-label :request-transaction-bottom-sheet :disabled? (not sign-enabled?) @@ -197,9 +225,8 @@ (let [small-screen? (< (- window-height keyboard-height) 450)] [react/view {:style (styles/sheet small-screen?)} [header {:small-screen? small-screen? - :label :t/select-account - :on-cancel #(re-frame/dispatch [:set :commands/select-account nil])}] - [react/view {:flex-direction :row :padding-horizontal 24 :align-items :center + :label :t/select-account}] + [react/view {:flex-direction :row :padding-horizontal 24 :align-items :center :margin-vertical (if small-screen? 8 16)}] (when-not small-screen? [list-item/list-item {:type :section-header :title :t/from}]) @@ -209,8 +236,12 @@ [react/view {:flex 1} [render-account from nil ::commands/set-selected-account]]] [toolbar/toolbar - {:center - {:label :t/select + {:left + {:label :t/cancel + :type :secondary + :on-press #(re-frame/dispatch [:set :commands/select-account nil])} + :right + {:label :t/share :accessibility-label :select-account-bottom-sheet :disabled? (nil? from) :on-press #(re-frame/dispatch diff --git a/src/status_im/wallet/core.cljs b/src/status_im/wallet/core.cljs index e3e6629d93..1278fdb118 100644 --- a/src/status_im/wallet/core.cljs +++ b/src/status_im/wallet/core.cljs @@ -23,7 +23,8 @@ [status-im.ethereum.ens :as ens] [status-im.ethereum.stateofus :as stateofus] [status-im.ui.components.bottom-sheet.core :as bottom-sheet] - [status-im.wallet.prices :as prices])) + [status-im.wallet.prices :as prices] + [status-im.wallet.utils :as wallet.utils])) (defn get-balance [{:keys [address on-success on-error]}] @@ -305,6 +306,24 @@ [{:keys [db]} amount] {:db (assoc-in db [:wallet/prepare-transaction :amount-text] amount)}) +(fx/defn wallet-send-gas-price-success + {:events [:wallet.send/update-gas-price-success]} + [{db :db} price] + {:db (assoc-in db [:wallet/prepare-transaction :gasPrice] price)}) + +(fx/defn set-max-amount + {:events [:wallet.send/set-max-amount]} + [{:keys [db]} {:keys [amount decimals symbol]}] + (let [^js gas (money/bignumber 21000) + ^js gasPrice (get-in db [:wallet/prepare-transaction :gasPrice]) + ^js fee (when gasPrice (.times gas gasPrice)) + amount-text (if (= :ETH symbol) + (when (and fee (money/sufficient-funds? fee amount)) + (str (wallet.utils/format-amount (.minus amount fee) decimals))) + (str (wallet.utils/format-amount amount decimals)))] + (when amount-text + {:db (assoc-in db [:wallet/prepare-transaction :amount-text] amount-text)}))) + (fx/defn set-and-validate-request-amount {:events [:wallet.request/set-amount-text]} [{:keys [db]} amount] @@ -466,7 +485,8 @@ (fx/defn on-recipient-address-resolved {:events [::recipient-address-resolved]} [{:keys [db]} address] - {:db (assoc-in db [:wallet/prepare-transaction :to :address] address)}) + {:db (assoc-in db [:wallet/prepare-transaction :to :address] address) + :signing/update-gas-price {:success-event :wallet.send/update-gas-price-success}}) (fx/defn prepare-transaction-from-chat {:events [:wallet/prepare-transaction-from-chat]} @@ -515,7 +535,8 @@ {:from account :to nil :symbol :ETH - :from-chat? false})}) + :from-chat? false}) + :signing/update-gas-price {:success-event :wallet.send/update-gas-price-success}}) (fx/defn cancel-transaction-command {:events [:wallet/cancel-transaction-command]} diff --git a/translations/en.json b/translations/en.json index 2d376c5ebe..a5d86ea7fb 100644 --- a/translations/en.json +++ b/translations/en.json @@ -1156,5 +1156,6 @@ "tx-fail-description1" : "This transaction is likely to fail. Sign at your own risk using custom network fee.", "tx-fail-description2" : "This transaction is likely to fail. Set a custom network fee to sign at your own risk.", "set-custom-fee" : "Set custom fee", - "not-enough-snt": "Not enough SNT" + "not-enough-snt": "Not enough SNT", + "set-max": "Set max" }