Compare commits

..
Author SHA1 Message Date
Mohamed Javid 73d5cb24f8 fix(wallet)_: Address or ENS - Paste button behaviour
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
2025-03-04 17:32:03 +05:30
Mohamed JavidandYevheniia Berdnyk 614eeafde9 feat(wallet)_: Add base chain indicator (#22215)
* feat(wallet)_: Add base chain indicator

Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>

* e2e: updated Base network name

---------

Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
2025-03-03 20:24:22 +00:00
Parvesh Monu 1dc4ea3a51 fix Some of the message longtap options disappear until relogin after unmuting chat (#22220) 2025-03-03 22:54:25 +05:30
dbef1c9edc Fix slide-button not resetting (#22210)
* nix: use openjdk_headless to avoid pulling GTK

This saves a whole bunch of downloading.

Signed-off-by: Jakub Sokołowski <jakub@status.im>

* fix_: no log file (#22122)

* fix_: no log file

https://github.com/status-im/status-go/compare/c5e4eb1a...388fce10

* chore_: fix lint issue

* chore_: set error level for release build

https://github.com/status-im/status-go/compare/c5e4eb1a...ba8fd519

* nix: replace yet another openjdk with headless version

Signed-off-by: Jakub Sokołowski <jakub@status.im>

* fix: moved slide-button reset from standard-auth to quo

---------

Signed-off-by: Jakub Sokołowski <jakub@status.im>
Co-authored-by: Jakub Sokołowski <jakub@status.im>
Co-authored-by: frank <lovefree103@gmail.com>
2025-03-03 10:46:40 +00:00
Mohsen 4853cde20b [#22206] fix: swap proposal keep sending update either after clean up (#22212) 2025-03-03 10:28:20 +00:00
Volodymyr Kozieiev 4c5f3282c4 Incorporated latest changes in status-go release branch
https://github.com/status-im/status-go/compare/c5e4eb1a...595dc68e
2025-02-28 14:54:17 +00:00
frank 376493b0b3 fix_: no log file (#22201) 2025-02-27 14:33:24 +00:00
Ulises Manuel 886f7b43d1 fix(keycard): light theme on "ready to scan" sheet (#22196) 2025-02-27 13:39:34 +00:00
Volodymyr Kozieiev c8c785f136 Switched to udpated release status-go branch. Log-related changes.
https://github.com/status-im/status-go/compare/c5e4eb1a...927f0c2b
2025-02-27 12:20:24 +00:00
Volodymyr Kozieiev b2602ba15e _TEMPORARY_ enabled all logging in release for testing purposes (#22192) 2025-02-26 11:36:41 +00:00
Volodymyr Kozieiev 4b0a983d68 swtiched to status-go version v10.7.0
https://github.com/status-im/status-go/compare/c5e4eb1a...6935cf11
2025-02-26 10:35:02 +00:00
Volodymyr Kozieiev af5c613cc0 Bump version to 2.33.0 2025-02-26 09:34:52 +00:00
38 changed files with 264 additions and 140 deletions
+2 -2
View File
@@ -2,7 +2,7 @@ DEBUG_WEBVIEW=0
ETHEREUM_DEV_CLUSTER=0 ETHEREUM_DEV_CLUSTER=0
EXTENSIONS=0 EXTENSIONS=0
GROUP_CHATS_ENABLED=1 GROUP_CHATS_ENABLED=1
LOG_LEVEL=error LOG_LEVEL=debug
MAILSERVER_CONFIRMATIONS_ENABLED=1 MAILSERVER_CONFIRMATIONS_ENABLED=1
MAINNET_WARNING_ENABLED=1 MAINNET_WARNING_ENABLED=1
PFS_ENCRYPTION_ENABLED=1 PFS_ENCRYPTION_ENABLED=1
@@ -20,6 +20,6 @@ FAST_CREATE_COMMUNITY_ENABLED=0
TEST_NETWORKS_ENABLED=0 TEST_NETWORKS_ENABLED=0
STATUS_PROXY_STAGE_NAME=prod STATUS_PROXY_STAGE_NAME=prod
FLAG_WALLET_CONNECT_ENABLED=1 FLAG_WALLET_CONNECT_ENABLED=1
API_LOGGING_ENABLED=0 API_LOGGING_ENABLED=1
SENTRY_ENABLED=1 SENTRY_ENABLED=1
SENTRY_ENVIRONMENT=production SENTRY_ENVIRONMENT=production
+1 -1
View File
@@ -1 +1 @@
2.32.0 2.33.0
+3 -12
View File
@@ -109,19 +109,10 @@ pipeline {
stage('Upload') { stage('Upload') {
steps { script { steps { script {
sshagent(credentials: ['nix-cache-ssh']) { sshagent(credentials: ['nix-cache-ssh']) {
nix.shell( nix.shell("""
"""
find /nix/store/ -mindepth 1 -maxdepth 1 -type d \ find /nix/store/ -mindepth 1 -maxdepth 1 -type d \
-not -name "*.links" -and -not -name "*-status-mobile-*" \ -not -name '*.links' -and -not -name '*-status-mobile-*' \
-and -not -name "tmp-*" \ | xargs nix copy --to ${NIX_SSH_REMOTE}
-print0 | xargs -0 nix-store -qR | sort -u > "${WORKSPACE_TMP}"/store-paths.txt
""",
pure: false
)
nix.shell(
"""
nix-store --export < "${WORKSPACE_TMP}"/store-paths.txt | \\
ssh ${env.NIX_SSHOPTS} ${params.NIX_CACHE_USER}@${params.NIX_CACHE_HOST} ${env.NIX_STORE_CMD} --import
""", """,
pure: false pure: false
) )
@@ -1,15 +1,15 @@
(ns quo.components.buttons.slide-button.constants) (ns quo.components.buttons.slide-button.constants)
(def track-padding 4) (def ^:constant small-dimensions
(def small-dimensions
{:track-height 40 {:track-height 40
:thumb 32}) :thumb 32})
(def large-dimensions (def ^:constant large-dimensions
{:track-height 48 {:track-height 48
:thumb 40}) :thumb 40})
(def disable-opacity 0.3) (def ^:constant track-padding 4)
(def ^:constant disable-opacity 0.3)
(def ^:constant default-width 300)
(def default-width 300) (def ^:constant reset-timeout-ms 500)
@@ -27,7 +27,8 @@
(when (and reached-end? (not sliding-complete?)) (when (and reached-end? (not sliding-complete?))
(set-sliding-complete true) (set-sliding-complete true)
(when on-complete (when on-complete
(on-complete reset-fn)))))) (js/setTimeout reset-fn constants/reset-timeout-ms)
(on-complete))))))
(gesture/on-end (fn [event] (gesture/on-end (fn [event]
(let [x-translation (oops/oget event "translationX") (let [x-translation (oops/oget event "translationX")
reached-end? (>= x-translation track-width)] reached-end? (>= x-translation track-width)]
@@ -55,10 +56,9 @@
on-track-layout (rn/use-callback on-track-layout (rn/use-callback
#(set-track-width (oops/oget % "nativeEvent.layout.width"))) #(set-track-width (oops/oget % "nativeEvent.layout.width")))
reset-fn (rn/use-callback reset-fn (rn/use-callback
(fn [keep-at-end-after-slide?] (fn []
(set-sliding-complete false) (set-sliding-complete false)
(when-not keep-at-end-after-slide? (animations/reset-track-position x-pos)))
(animations/reset-track-position x-pos))))
dimensions (rn/use-callback dimensions (rn/use-callback
(partial utils/get-dimensions (partial utils/get-dimensions
(or track-width constants/default-width) (or track-width constants/default-width)
@@ -0,0 +1,13 @@
(ns quo.components.common.new-feature-dot
(:require [quo.components.common.new-feature-gradient :as new-feature-gradient]))
(def ^:const size 8)
(defn view
[{:keys [style accessibility-label]}]
[new-feature-gradient/view
{:style (merge {:width size
:height size
:border-radius (/ size 2)}
style)
:accessibility-label accessibility-label}])
@@ -0,0 +1,16 @@
(ns quo.components.common.new-feature-gradient
(:require [quo.foundations.colors :as colors]
[quo.theme]
[react-native.linear-gradient :as linear-gradient]))
(defn view
[{:keys [style accessibility-label]}]
(let [theme (quo.theme/use-theme)]
[linear-gradient/linear-gradient
{:style style
:accessibility-label accessibility-label
:colors [(colors/resolve-color :yellow theme)
colors/new-feature-gradient-pink]
:use-angle true
:angle 78
:angle-center {:x 0.5 :y 0.5}}]))
@@ -33,4 +33,12 @@
networks-list]) networks-list])
(h/is-truthy (h/query-by-label-text :network-dropdown)) (h/is-truthy (h/query-by-label-text :network-dropdown))
(h/fire-event :press (h/query-by-label-text :network-dropdown)) (h/fire-event :press (h/query-by-label-text :network-dropdown))
(h/was-not-called on-press)))) (h/was-not-called on-press)))
(h/test "Should display new chain indicator"
(h/render [network-dropdown/view
{:state :default
:show-new-chain-indicator? true}
networks-list])
(h/is-truthy (h/query-by-label-text :network-dropdown))
(h/is-truthy (h/query-by-label-text :new-chain-indicator))))
@@ -23,3 +23,7 @@
:opacity (if (= state :disabled) 0.3 1) :opacity (if (= state :disabled) 0.3 1)
:border-color (container-border-color props) :border-color (container-border-color props)
:align-items :center}) :align-items :center})
(def new-chain-indicator
{:position :absolute
:right 0})
@@ -1,12 +1,13 @@
(ns quo.components.dropdowns.network-dropdown.view (ns quo.components.dropdowns.network-dropdown.view
(:require (:require
[quo.components.common.new-feature-dot :as new-feature-dot]
[quo.components.dropdowns.network-dropdown.style :as style] [quo.components.dropdowns.network-dropdown.style :as style]
[quo.components.list-items.preview-list.view :as preview-list] [quo.components.list-items.preview-list.view :as preview-list]
[quo.theme :as quo.theme] [quo.theme :as quo.theme]
[react-native.core :as rn])) [react-native.core :as rn]))
(defn view (defn view
[{:keys [on-press state] :as props} networks] [{:keys [on-press state show-new-chain-indicator?] :as props} networks]
(let [theme (quo.theme/use-theme) (let [theme (quo.theme/use-theme)
[pressed? set-pressed] (rn/use-state false) [pressed? set-pressed] (rn/use-state false)
on-press-in (rn/use-callback #(set-pressed true)) on-press-in (rn/use-callback #(set-pressed true))
@@ -18,6 +19,10 @@
:on-press on-press :on-press on-press
:on-press-in on-press-in :on-press-in on-press-in
:on-press-out on-press-out} :on-press-out on-press-out}
(when show-new-chain-indicator?
[new-feature-dot/view
{:style style/new-chain-indicator
:accessibility-label :new-chain-indicator}])
[preview-list/view [preview-list/view
{:type :network {:type :network
:list-size (count networks) :list-size (count networks)
@@ -200,12 +200,15 @@
shown-name]])) shown-name]]))
(defn- wallet-networks-center (defn- wallet-networks-center
[{:keys [networks networks-on-press background center-content-container-style]}] [{:keys [networks networks-on-press show-new-chain-indicator? background
center-content-container-style]}]
[reanimated/view {:style center-content-container-style} [reanimated/view {:style center-content-container-style}
[network-dropdown/view [network-dropdown/view
{:state :default {:state :default
:on-press networks-on-press :on-press networks-on-press
:blur? (= background :blur)} networks]]) :blur? (= background :blur)
:show-new-chain-indicator? show-new-chain-indicator?}
networks]])
(defn page-nav (defn page-nav
"Props: "Props:
@@ -64,3 +64,20 @@
{:margin-top 7 {:margin-top 7
:margin-bottom 2 :margin-bottom 2
:margin-left -1}) :margin-left -1})
(def new-feature-tag-container
{:margin-left 6
:border-radius 12
:justify-content :center})
(def new-feature-tag-gradient
{:border-radius 12
:position :absolute
:left 0
:right 0
:top 0
:bottom 0})
(def new-feature-tag-text
{:color colors/white
:margin-horizontal 5})
@@ -4,6 +4,7 @@
[quo.components.avatars.icon-avatar :as icon-avatar] [quo.components.avatars.icon-avatar :as icon-avatar]
[quo.components.avatars.user-avatar.view :as user-avatar] [quo.components.avatars.user-avatar.view :as user-avatar]
[quo.components.buttons.button.view :as button] [quo.components.buttons.button.view :as button]
[quo.components.common.new-feature-gradient :as new-feature-gradient]
[quo.components.icon :as icon] [quo.components.icon :as icon]
[quo.components.list-items.preview-list.view :as preview-list] [quo.components.list-items.preview-list.view :as preview-list]
[quo.components.markdown.text :as text] [quo.components.markdown.text :as text]
@@ -115,7 +116,9 @@
nil)]) nil)])
(defn view (defn view
[{:keys [title on-press action-props accessibility-label blur? container-style content] :as props}] [{:keys [title show-new-feature-tag? on-press action-props accessibility-label blur? container-style
content]
:as props}]
[rn/pressable [rn/pressable
{:style (merge style/container container-style) {:style (merge style/container container-style)
:on-press (or on-press (:on-change action-props)) :on-press (or on-press (:on-change action-props))
@@ -126,10 +129,19 @@
[rn/view {:style (style/left-sub-container props)} [rn/view {:style (style/left-sub-container props)}
[image-component props] [image-component props]
[rn/view {:style (style/left-container (:image props))} [rn/view {:style (style/left-container (:image props))}
[text/text [rn/view {:flex-direction :row}
{:weight :medium [text/text
:style {:color (when blur? colors/white)}} {:weight :medium
title] :style {:color (when blur? colors/white)}}
title]
(when show-new-feature-tag?
[rn/view {:style style/new-feature-tag-container}
[new-feature-gradient/view {:style style/new-feature-tag-gradient}]
[text/text
{:weight :semi-bold
:size :label
:style style/new-feature-tag-text}
(string/upper-case (i18n/label :t/new))]])]
[description-component props] [description-component props]
[tag-component props]]] [tag-component props]]]
[rn/view {:style (style/sub-container (:alignment action-props))} [rn/view {:style (style/sub-container (:alignment action-props))}
@@ -18,5 +18,6 @@
[:dropdown-on-press {:optional true} [:maybe fn?]] [:dropdown-on-press {:optional true} [:maybe fn?]]
[:networks {:optional true} [:networks {:optional true}
[:maybe [:sequential [:map [:source [:maybe :schema.common/image-source]]]]]] [:maybe [:sequential [:map [:source [:maybe :schema.common/image-source]]]]]]
[:dropdown-state {:optional true} [:maybe [:enum :default :disabled]]]]]] [:dropdown-state {:optional true} [:maybe [:enum :default :disabled]]]
[:show-new-chain-indicator? {:optional true} [:maybe :boolean]]]]]
:any]) :any])
@@ -25,7 +25,7 @@
bars)) bars))
(defn- view-info-top (defn- view-info-top
[{:keys [state balance networks dropdown-on-press dropdown-state]}] [{:keys [state balance networks dropdown-on-press dropdown-state show-new-chain-indicator?]}]
(let [theme (quo.theme/use-theme)] (let [theme (quo.theme/use-theme)]
[rn/view {:style style/container-info-top} [rn/view {:style style/container-info-top}
(if (= state :loading) (if (= state :loading)
@@ -36,9 +36,10 @@
:style (style/style-text-heading theme)} :style (style/style-text-heading theme)}
balance]) balance])
[network-dropdown/view [network-dropdown/view
{:state (or dropdown-state :default) {:state (or dropdown-state :default)
:blur? true :blur? true
:on-press dropdown-on-press} :on-press dropdown-on-press
:show-new-chain-indicator? show-new-chain-indicator?}
networks]])) networks]]))
(defn- view-metrics (defn- view-metrics
+2
View File
@@ -315,6 +315,8 @@
networks-short-name networks-short-name
socials)) socials))
(def new-feature-gradient-pink "#FF33A3")
(defn hex-string? (defn hex-string?
[s] [s]
(and (string? s) (string/starts-with? s "#"))) (and (string? s) (string/starts-with? s "#")))
@@ -26,8 +26,7 @@
:auth-button-label auth-button-label}])) :auth-button-label auth-button-label}]))
(vec (conj dependencies on-auth-success on-auth-fail))) (vec (conj dependencies on-auth-success on-auth-fail)))
on-slider-complete (rn/use-callback on-slider-complete (rn/use-callback
(fn [reset-slider-fn] (fn []
(js/setTimeout #(reset-slider-fn false) 500)
(if (fn? on-complete) (if (fn? on-complete)
(on-complete) (on-complete)
(on-complete-callback))) (on-complete-callback)))
@@ -18,11 +18,16 @@
:padding-horizontal 36 :padding-horizontal 36
:padding-vertical 30 :padding-vertical 30
:background-color (colors/theme-colors colors/white colors/neutral-95 theme)}} :background-color (colors/theme-colors colors/white colors/neutral-95 theme)}}
[rn/text {:style {:font-size 26 :color "#9F9FA5" :margin-bottom 36}} [rn/text
{:style {:font-size 26
:color (colors/theme-colors "#8F8E94" "#9F9FA5" theme)
:margin-bottom 36}}
(i18n/label :t/ready-to-scan)] (i18n/label :t/ready-to-scan)]
[rn/image [rn/image {:source (resources/get-image :nfc-prompt)}]
{:source (resources/get-image :nfc-prompt)}] [rn/text
[rn/text {:style {:font-size 16 :color :white :margin-vertical 36}} {:style {:font-size 16
:color (colors/theme-colors "#09101C" :white theme)
:margin-vertical 36}}
(if connected? (if connected?
(i18n/label :t/connected-dont-move) (i18n/label :t/connected-dont-move)
(i18n/label :t/hold-phone-near-keycard))] (i18n/label :t/hold-phone-near-keycard))]
@@ -32,6 +37,12 @@
(rf/dispatch [:keycard/hide-connection-sheet])) (rf/dispatch [:keycard/hide-connection-sheet]))
:style {:flex-direction :row}} :style {:flex-direction :row}}
[rn/view [rn/view
{:style {:background-color "#8E8E93" :flex 1 :align-items :center :padding 18 :border-radius 10}} {:style {:background-color (colors/theme-colors "#D5D4DB" "#8E8E93" theme)
[rn/text {:style {:color :white :font-size 16}} :flex 1
:align-items :center
:padding 18
:border-radius 10}}
[rn/text
{:style {:color (colors/theme-colors "#09101C" :white theme)
:font-size 16}}
(i18n/label :t/cancel)]]]]])) (i18n/label :t/cancel)]]]]]))
@@ -7,6 +7,7 @@
[react-native.safe-area :as safe-area] [react-native.safe-area :as safe-area]
[status-im.common.floating-button-page.view :as floating-button-page] [status-im.common.floating-button-page.view :as floating-button-page]
[status-im.contexts.settings.wallet.saved-addresses.add-address-to-save.style :as style] [status-im.contexts.settings.wallet.saved-addresses.add-address-to-save.style :as style]
[status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.validation :as validation] [status-im.contexts.wallet.common.validation :as validation]
[utils.address :as utils-address] [utils.address :as utils-address]
[utils.debounce :as debounce] [utils.debounce :as debounce]
@@ -159,7 +160,7 @@
(fn [clipboard-text] (fn [clipboard-text]
(when-not (string/blank? clipboard-text) (when-not (string/blank? clipboard-text)
(-> clipboard-text (-> clipboard-text
utils-address/extract-address-without-chains-info utils/on-paste-address-or-ens
on-change-text))))) on-change-text)))))
on-press-continue (rn/use-callback on-press-continue (rn/use-callback
(fn [] (fn []
@@ -7,6 +7,7 @@
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im.common.floating-button-page.view :as floating-button-page] [status-im.common.floating-button-page.view :as floating-button-page]
[status-im.contexts.wallet.add-account.add-address-to-watch.style :as style] [status-im.contexts.wallet.add-account.add-address-to-watch.style :as style]
[status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.validation :as validation] [status-im.contexts.wallet.common.validation :as validation]
[status-im.subs.wallet.add-account.address-to-watch] [status-im.subs.wallet.add-account.address-to-watch]
[utils.address :as utils-address] [utils.address :as utils-address]
@@ -42,7 +43,7 @@
paste-on-input #(clipboard/get-string paste-on-input #(clipboard/get-string
(fn [clipboard-text] (fn [clipboard-text]
(-> clipboard-text (-> clipboard-text
utils.address/extract-address-without-chains-info utils/on-paste-address-or-ens
on-change-text)))] on-change-text)))]
(rn/use-effect (fn [] (rn/use-effect (fn []
(when-not (string/blank? scanned-address) (when-not (string/blank? scanned-address)
@@ -1,6 +1,7 @@
(ns status-im.contexts.wallet.common.account-switcher.view (ns status-im.contexts.wallet.common.account-switcher.view
(:require (:require
[quo.core :as quo] [quo.core :as quo]
[react-native.core :as rn]
[status-im.contexts.wallet.sheets.account-options.view :as account-options] [status-im.contexts.wallet.sheets.account-options.view :as account-options]
[status-im.contexts.wallet.sheets.network-filter.view :as network-filter] [status-im.contexts.wallet.sheets.network-filter.view :as network-filter]
[status-im.contexts.wallet.sheets.select-account.view :as select-account] [status-im.contexts.wallet.sheets.select-account.view :as select-account]
@@ -30,25 +31,33 @@
type :no-title}}] type :no-title}}]
(let [{:keys [color emoji watch-only?]} (rf/sub [:wallet/current-viewing-account]) (let [{:keys [color emoji watch-only?]} (rf/sub [:wallet/current-viewing-account])
networks (rf/sub [:wallet/selected-network-details]) networks (rf/sub [:wallet/selected-network-details])
sending-collectible? (rf/sub [:wallet/sending-collectible?])] sending-collectible? (rf/sub [:wallet/sending-collectible?])
show-new-chain-indicator? (rf/sub [:wallet/show-new-chain-indicator?])
on-press-networks (rn/use-callback
(fn []
(rf/dispatch [:wallet/hide-new-chain-indicator])
(rf/dispatch [:show-bottom-sheet
{:content network-filter/view}])))]
[quo/page-nav [quo/page-nav
{:type type {:type type
:icon-name icon-name :icon-name icon-name
:margin-top margin-top :margin-top margin-top
:background :blur :background :blur
:on-press on-press :on-press on-press
:accessibility-label accessibility-label :accessibility-label accessibility-label
:networks networks :networks networks
:align-center? true :align-center? true
:networks-on-press #(rf/dispatch [:show-bottom-sheet {:content network-filter/view}]) :networks-on-press on-press-networks
:right-side [(when (and (ff/enabled? ::ff/wallet.wallet-connect) :show-new-chain-indicator? show-new-chain-indicator?
(not watch-only?) :right-side [(when (and (ff/enabled? ::ff/wallet.wallet-connect)
show-dapps-button?) (not watch-only?)
{:icon-name :i/dapps show-dapps-button?)
:on-press #(rf/dispatch [:navigate-to :screen/wallet.connected-dapps])}) {:icon-name :i/dapps
(when-not sending-collectible? :on-press #(rf/dispatch [:navigate-to
{:content-type :account-switcher :screen/wallet.connected-dapps])})
:customization-color color (when-not sending-collectible?
:on-press #(on-switcher-press switcher-type params) {:content-type :account-switcher
:emoji emoji :customization-color color
:type (when watch-only? :watch-only)})]}])) :on-press #(on-switcher-press switcher-type params)
:emoji emoji
:type (when watch-only? :watch-only)})]}]))
+22 -14
View File
@@ -4,6 +4,7 @@
[status-im.common.qr-codes.view :as qr-codes] [status-im.common.qr-codes.view :as qr-codes]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.wallet.common.utils.networks :as network-utils] [status-im.contexts.wallet.common.utils.networks :as network-utils]
[utils.address]
[utils.money :as money] [utils.money :as money]
[utils.number :as number] [utils.number :as number]
[utils.string])) [utils.string]))
@@ -324,20 +325,19 @@
(defn make-network-item (defn make-network-item
"This function generates props for quo/category component item" "This function generates props for quo/category component item"
[{:keys [network-name color on-change networks state label-props type blur?]}] [{:keys [network-name color on-change networks label-props type blur?]}]
(cond-> {:title (string/capitalize (name network-name)) (cond-> {:title (string/capitalize (name network-name))
:image :icon-avatar :image :icon-avatar
:image-props {:icon (resources/get-network network-name) :image-props {:icon (resources/get-network network-name)
:size :size-20} :size :size-20}
:action :selector ;; Remove the following line for v2.35
:action-props {:type (or type :show-new-feature-tag? (= network-name constants/base-network-name)
(if (= :default state) :action :selector
:filled-checkbox :action-props {:type (or type :checkbox)
:checkbox)) :blur? blur?
:blur? blur? :customization-color color
:customization-color color :checked? (contains? networks network-name)
:checked? (contains? networks network-name) :on-change on-change}}
:on-change on-change}}
label-props label-props
(assoc :label :text (assoc :label :text
@@ -480,3 +480,11 @@
(filter (fn [{:keys [tokens]}] (filter (fn [{:keys [tokens]}]
(some positive-balance-in-any-chain? tokens)) (some positive-balance-in-any-chain? tokens))
operable-account)))) operable-account))))
(defn on-paste-address-or-ens
"Check if the clipboard has any valid address and extract the address without any chain info.
If it does not contain an valid address or it is ENS, return the clipboard text as it is"
[clipboard-text]
(if (utils.address/supported-address? clipboard-text)
(utils.address/extract-address-without-chains-info clipboard-text)
clipboard-text))
@@ -3,6 +3,7 @@
[clojure.string :as string] [clojure.string :as string]
[native-module.core :as native-module] [native-module.core :as native-module]
[promesa.core :as promesa] [promesa.core :as promesa]
[react-native.async-storage :as async-storage]
[status-im.common.json-rpc.events :as json-rpc] [status-im.common.json-rpc.events :as json-rpc]
[status-im.contexts.profile.recover.effects :as profile.recover.effects] [status-im.contexts.profile.recover.effects :as profile.recover.effects]
[status-im.contexts.wallet.rpc :as wallet-rpc] [status-im.contexts.wallet.rpc :as wallet-rpc]
@@ -130,3 +131,14 @@
(-> (wallet-rpc/sign-message message address (security/safe-unmask-data password)) (-> (wallet-rpc/sign-message message address (security/safe-unmask-data password))
(promesa/then on-success) (promesa/then on-success)
(promesa/catch on-error)))) (promesa/catch on-error))))
(rf/reg-fx
:effects.wallet/retrieve-base-chain-indicator-shown
(fn []
(async-storage/get-item :base-chain-indicator-shown
#(rf/dispatch [:wallet/retrieve-new-chain-indicator (not %)]))))
(rf/reg-fx
:effects.wallet/set-base-chain-indicator-shown
(fn [flag]
(async-storage/set-item! :base-chain-indicator-shown flag)))
+11
View File
@@ -797,3 +797,14 @@
:wallet.swap/transaction-success :wallet.swap/transaction-success
:wallet/transaction-success) :wallet/transaction-success)
sent-transactions])]]}))) sent-transactions])]]})))
(rf/reg-event-fx
:wallet/retrieve-new-chain-indicator
(fn [{:keys [db]} [flag]]
{:db (assoc-in db [:wallet :ui :show-new-chain-indicator?] flag)}))
(rf/reg-event-fx
:wallet/hide-new-chain-indicator
(fn [{:keys [db]}]
{:db (assoc-in db [:wallet :ui :show-new-chain-indicator?] false)
:fx [[:effects.wallet/set-base-chain-indicator-shown true]]}))
+15 -8
View File
@@ -135,7 +135,13 @@
cards (conj account-cards-data (new-account-card-data)) cards (conj account-cards-data (new-account-card-data))
[init-loaded? set-init-loaded] (rn/use-state false) [init-loaded? set-init-loaded] (rn/use-state false)
{:keys [formatted-balance]} (rf/sub [:wallet/aggregated-token-values-and-balance]) {:keys [formatted-balance]} (rf/sub [:wallet/aggregated-token-values-and-balance])
theme (quo.theme/use-theme)] theme (quo.theme/use-theme)
show-new-chain-indicator? (rf/sub [:wallet/show-new-chain-indicator?])
on-press-network-selector (rn/use-callback
(fn []
(rf/dispatch [:wallet/hide-new-chain-indicator])
(rf/dispatch [:show-bottom-sheet
{:content network-filter/view}])))]
(rn/use-effect (fn [] (rn/use-effect (fn []
(when (and @account-list-ref (pos? (count cards))) (when (and @account-list-ref (pos? (count cards)))
(.scrollToOffset ^js @account-list-ref (.scrollToOffset ^js @account-list-ref
@@ -157,13 +163,14 @@
:on-refresh #(rf/dispatch [:wallet/get-accounts])}] :on-refresh #(rf/dispatch [:wallet/get-accounts])}]
:header [rn/view {:style (style/header-container theme)} :header [rn/view {:style (style/header-container theme)}
[quo/wallet-overview [quo/wallet-overview
{:state (if tokens-loading? :loading :default) {:state (if tokens-loading? :loading :default)
:time-frame :none :time-frame :none
:metrics :none :metrics :none
:balance formatted-balance :balance formatted-balance
:networks networks :networks networks
:dropdown-on-press #(rf/dispatch [:show-bottom-sheet :dropdown-on-press on-press-network-selector
{:content network-filter/view}])}] :show-new-chain-indicator? (when (not-empty networks)
show-new-chain-indicator?)}]
(when (ff/enabled? ::ff/wallet.graph) (when (ff/enabled? ::ff/wallet.graph)
[quo/wallet-graph {:time-frame :empty}]) [quo/wallet-graph {:time-frame :empty}])
[render-cards cards account-list-ref] [render-cards cards account-list-ref]
@@ -18,6 +18,7 @@
:network-name :mainnet :network-name :mainnet
:chain-id 1 :chain-id 1
:related-chain-id 5}] :related-chain-id 5}]
:wallet/show-new-chain-indicator? false
:wallet/current-viewing-account-address "0x1" :wallet/current-viewing-account-address "0x1"
:wallet/current-viewing-account {:path "m/44'/60'/0'/0/1" :wallet/current-viewing-account {:path "m/44'/60'/0'/0/1"
:emoji "💎" :emoji "💎"
@@ -61,7 +61,7 @@
(fn [clipboard] (fn [clipboard]
(when-not (empty? clipboard) (when-not (empty? clipboard)
(-> clipboard (-> clipboard
utils-address/extract-address-without-chains-info utils/on-paste-address-or-ens
on-change))))) on-change)))))
:ens-regex constants/regx-ens :ens-regex constants/regx-ens
:scanned-value (or (when recipient-plain-address? send-address) scanned-address) :scanned-value (or (when recipient-plain-address? send-address) scanned-address)
@@ -8,41 +8,26 @@
(defn view (defn view
[] []
(let [selected-networks (rf/sub [:wallet/selected-networks]) (let [selected-networks (rf/sub [:wallet/selected-networks])
selector-state (rf/sub [:wallet/network-filter-selector-state])
color (rf/sub [:profile/customization-color]) color (rf/sub [:profile/customization-color])
network-details (rf/sub [:wallet/network-details]) network-details (rf/sub [:wallet/network-details])]
viewing-account? (rf/sub [:wallet/viewing-account?])
balance-per-chain (if viewing-account?
(rf/sub [:wallet/current-viewing-account-fiat-balance-per-chain])
(rf/sub [:wallet/aggregated-fiat-balance-per-chain]))
mainnet (first network-details)
layer-2-networks (rest network-details)]
[:<> [:<>
[quo/drawer-top {:title (i18n/label :t/select-networks)}] [quo/drawer-top {:title (i18n/label :t/select-networks)}]
[quo/information-box
{:type :informative
:icon :i/info
:blur? false
:style {:margin-horizontal 20
:margin-bottom 4}}
(i18n/label :t/base-chain-available-info)]
[quo/category [quo/category
{:list-type :settings {:list-type :settings
:data [(utils/make-network-item
{:state selector-state
:network-name (:network-name mainnet)
:color color
:networks selected-networks
:label-props (get balance-per-chain (:chain-id mainnet))
:on-change #(rf/dispatch
[:wallet/update-selected-networks
(:network-name
mainnet)])})]}]
[quo/category
{:list-type :settings
:label (i18n/label :t/layer-2)
:data (mapv (fn [network] :data (mapv (fn [network]
(utils/make-network-item (utils/make-network-item
{:state selector-state {:network-name (:network-name network)
:network-name (:network-name network)
:color color :color color
:networks selected-networks :networks selected-networks
:label-props (get balance-per-chain (:chain-id network))
:on-change #(rf/dispatch :on-change #(rf/dispatch
[:wallet/update-selected-networks [:wallet/update-selected-networks
(:network-name (:network-name
network)])})) network)])}))
layer-2-networks)}]])) network-details)}]]))
@@ -249,15 +249,13 @@
(rf/reg-event-fx :wallet/stop-get-swap-proposal (rf/reg-event-fx :wallet/stop-get-swap-proposal
(fn [{:keys [db]}] (fn [{:keys [db]}]
(let [route-request-ongoing? (some? (get-in db [:wallet :ui :swap :last-request-uuid]))] {:db (update-in db [:wallet :ui :swap] dissoc :last-request-uuid)
(when route-request-ongoing? :json-rpc/call [{:method "wallet_stopSuggestedRoutesAsyncCalculation"
{:db (update-in db [:wallet :ui :swap] dissoc :last-request-uuid) :params []
:json-rpc/call [{:method "wallet_stopSuggestedRoutesAsyncCalculation" :on-error (fn [error]
:params [] (log/error "failed to stop fetching swap proposals"
:on-error (fn [error] {:event :wallet/stop-get-swap-proposal
(log/error "failed to stop fetching swap proposals" :error error}))}]}))
{:event :wallet/stop-get-swap-proposal
:error error}))}]}))))
(rf/reg-event-fx (rf/reg-event-fx
:wallet/clean-swap-proposal :wallet/clean-swap-proposal
+3 -1
View File
@@ -78,4 +78,6 @@
;;app starting flow continues in get-profiles-overview ;;app starting flow continues in get-profiles-overview
:profile/get-profiles-overview #(rf/dispatch [:profile/get-profiles-overview-success %]) :profile/get-profiles-overview #(rf/dispatch [:profile/get-profiles-overview-success %])
:effects.font/get-font-file-for-initials-avatar :effects.font/get-font-file-for-initials-avatar
#(rf/dispatch [:font/init-font-file-for-initials-avatar %])})) #(rf/dispatch [:font/init-font-file-for-initials-avatar %])
;; show new chain indicator to highlight base chain. This will be be removed in v2.35.
:effects.wallet/retrieve-base-chain-indicator-shown nil}))
+5
View File
@@ -47,6 +47,11 @@
:<- [:wallet/ui] :<- [:wallet/ui]
:-> :last-updates-per-address) :-> :last-updates-per-address)
(rf/reg-sub
:wallet/show-new-chain-indicator?
:<- [:wallet/ui]
:-> :show-new-chain-indicator?)
(rf/reg-sub (rf/reg-sub
:wallet/latest-update :wallet/latest-update
:<- [:wallet/last-updates-per-address] :<- [:wallet/last-updates-per-address]
+3 -3
View File
@@ -3,7 +3,7 @@
"_comment": "Instead use: scripts/update-status-go.sh <rev>", "_comment": "Instead use: scripts/update-status-go.sh <rev>",
"owner": "status-im", "owner": "status-im",
"repo": "status-go", "repo": "status-go",
"version": "v10.8.0", "version": "v10.7.0+hotfix.2",
"commit-sha1": "ba8fd51958686aea45e34e684ac925a4e65927f8", "commit-sha1": "595dc68e9ff5e6e57364818098616a97b83eabd5",
"src-sha256": "0kqn5rkfsn7aqc2n2flqvkm6cc53ssk0mc1l84f4czg0paci0717" "src-sha256": "04dsmz70h3i738bj3i3ba8bckpw61vxb56m8sc4qw8agc9pdaxc0"
} }
@@ -41,9 +41,9 @@ class TestWalletCollectibles(MultipleSharedDeviceTestCase):
@marks.testrail_id(741839) @marks.testrail_id(741839)
def test_wallet_collectibles_balance(self): def test_wallet_collectibles_balance(self):
self.wallet_view.collectibles_tab.click() self.wallet_view.collectibles_tab.click()
self.wallet_view.set_network_in_wallet(self.network_name) self.wallet_view.set_network_in_wallet(self.network_name + ', NEW')
collectibles = { collectibles = {
"BVL": {"quantity": 1, "BVL": {"quantity": 2,
"info": {"Account": "Account 1", "info": {"Account": "Account 1",
"Network": "Base", "Network": "Base",
"category": "Football Player", "category": "Football Player",
@@ -102,8 +102,8 @@ class TestWalletCollectibles(MultipleSharedDeviceTestCase):
self.wallet_view.collectibles_tab_on_select_token_view.click() self.wallet_view.collectibles_tab_on_select_token_view.click()
time.sleep(5) time.sleep(5)
self.wallet_view.get_collectible_element('BVL').click() self.wallet_view.get_collectible_element('BVL').click()
# self.wallet_view.amount_input_increase_button.click() self.wallet_view.amount_input_increase_button.click()
# self.wallet_view.confirm_button.click() self.wallet_view.confirm_button.click()
for text in [self.account_name, self.sender_short_address]: for text in [self.account_name, self.sender_short_address]:
if not self.wallet_view.from_data_container.get_child_element_by_text(text).is_element_displayed(): if not self.wallet_view.from_data_container.get_child_element_by_text(text).is_element_displayed():
self.errors.append(self.wallet_view, self.errors.append(self.wallet_view,
@@ -118,7 +118,7 @@ class TestWalletCollectibles(MultipleSharedDeviceTestCase):
data_to_check = { data_to_check = {
'Est. time': ' min', 'Est. time': ' min',
'Max fees': r"[$]\d+.\d+", 'Max fees': r"[$]\d+.\d+",
'Recipient gets': '1 ' 'Recipient gets': '2 '
} }
for key, expected_value in data_to_check.items(): for key, expected_value in data_to_check.items():
try: try:
@@ -52,7 +52,7 @@ class TestWalletOneDevice(MultipleSharedDeviceTestCase):
'Mainnet': self.mainnet_balance, 'Mainnet': self.mainnet_balance,
'Arbitrum': self.arb_balance, 'Arbitrum': self.arb_balance,
'Optimism': self.optimism_balance, 'Optimism': self.optimism_balance,
'Base': self.base_balance 'Base, NEW': self.base_balance
} }
for network in expected_balances: for network in expected_balances:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 KiB

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

+1 -1
View File
@@ -182,7 +182,7 @@ class WalletView(BaseView):
def set_network_in_wallet(self, network_name: str): def set_network_in_wallet(self, network_name: str):
self.network_drop_down.click() self.network_drop_down.click()
Button(self.driver, accessibility_id="%s, label-component" % network_name.capitalize()).click() Button(self.driver, accessibility_id="%s, label-component" % network_name).click()
self.network_drop_down.click() self.network_drop_down.click()
def get_account_element(self, account_name: str = 'Account 1'): def get_account_element(self, account_name: str = 'Account 1'):
+1
View File
@@ -200,6 +200,7 @@
"bad-fees-description": "Your priority fee is below our suggested parameters.", "bad-fees-description": "Your priority fee is below our suggested parameters.",
"balance": "Balance", "balance": "Balance",
"base": "Base", "base": "Base",
"base-chain-available-info": "Base chain is now on Status - view your assets, interact with dApps and swap tokens",
"be-safe-with-secure-cold-wallet": "Be safe with secure cold wallet", "be-safe-with-secure-cold-wallet": "Be safe with secure cold wallet",
"begin-set-up": "Begin setup", "begin-set-up": "Begin setup",
"below-base-fee": "max fee below base fee", "below-base-fee": "max fee below base fee",