Wallet/Account Permissions Quo Component (#18224)
This commit is contained in:
parent
d0e624afd7
commit
04184b41e5
|
@ -0,0 +1,74 @@
|
||||||
|
(ns quo.components.wallet.account-permissions.component-spec
|
||||||
|
(:require
|
||||||
|
[quo.components.wallet.account-permissions.view :as account-permissions]
|
||||||
|
[test-helpers.component :as h]
|
||||||
|
[utils.address :as utils]))
|
||||||
|
|
||||||
|
(defn- render
|
||||||
|
[component]
|
||||||
|
(h/render-with-theme-provider component :light))
|
||||||
|
|
||||||
|
(def ^:private account
|
||||||
|
{:name "Trip to Vegas"
|
||||||
|
:address "0x2f0fbf0a93c5999e9b4410848403a02b38983eb2"
|
||||||
|
:emoji "😊"
|
||||||
|
:customization-color :blue})
|
||||||
|
|
||||||
|
(h/describe "Wallet: Account Permissions"
|
||||||
|
(h/test "basic render"
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account}])
|
||||||
|
(h/is-truthy (h/get-by-label-text :wallet-account-permissions)))
|
||||||
|
|
||||||
|
(h/test "render with correct account name, emoji and address"
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account}])
|
||||||
|
(h/is-truthy (h/get-by-text (:name account)))
|
||||||
|
(h/is-truthy (h/get-by-text (:emoji account)))
|
||||||
|
(h/is-truthy (h/get-by-text (utils/get-short-wallet-address (:address account)))))
|
||||||
|
|
||||||
|
(h/test "render without keycard"
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account}])
|
||||||
|
(h/is-falsy (h/query-by-label-text :wallet-account-permissions-keycard)))
|
||||||
|
|
||||||
|
(h/test "render with keycard"
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account
|
||||||
|
:keycard? true}])
|
||||||
|
(h/is-truthy (h/get-by-label-text :wallet-account-permissions-keycard)))
|
||||||
|
|
||||||
|
(h/test "render with token details"
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account
|
||||||
|
:token-details [{:token "SNT"
|
||||||
|
:amount "100"}]}])
|
||||||
|
(h/is-truthy (h/get-by-text "100 SNT")))
|
||||||
|
|
||||||
|
(h/test "render with multiple token details"
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account
|
||||||
|
:token-details [{:token "SNT"
|
||||||
|
:amount "100"}
|
||||||
|
{:token "ETH"
|
||||||
|
:amount "18"}
|
||||||
|
{:token "BTM"
|
||||||
|
:amount "1000"}]}])
|
||||||
|
(h/is-truthy (h/get-by-text "100 SNT"))
|
||||||
|
(h/is-truthy (h/get-by-text "18 ETH"))
|
||||||
|
(h/is-truthy (h/get-by-text "1000 BTM")))
|
||||||
|
|
||||||
|
(h/test "render with no relevant tokens"
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account
|
||||||
|
:token-details []}])
|
||||||
|
(h/is-truthy (h/get-by-translation-text :t/no-relevant-tokens)))
|
||||||
|
|
||||||
|
(h/test "render checked? & on-change"
|
||||||
|
(let [mock-on-change (h/mock-fn)]
|
||||||
|
(render [account-permissions/view
|
||||||
|
{:account account
|
||||||
|
:on-change mock-on-change
|
||||||
|
:checked? true}])
|
||||||
|
(h/fire-event :press (h/get-by-label-text :checkbox-on))
|
||||||
|
(h/was-called-with mock-on-change false))))
|
|
@ -0,0 +1,37 @@
|
||||||
|
(ns quo.components.wallet.account-permissions.style
|
||||||
|
(:require [quo.foundations.colors :as colors]))
|
||||||
|
|
||||||
|
(defn container
|
||||||
|
[theme]
|
||||||
|
{:font-size 30
|
||||||
|
:border-radius 16
|
||||||
|
:border-width 1
|
||||||
|
:border-color (colors/theme-colors colors/neutral-10 colors/neutral-90 theme)})
|
||||||
|
|
||||||
|
(def row1
|
||||||
|
{:flex-direction :row
|
||||||
|
:height 56
|
||||||
|
:padding-horizontal 12
|
||||||
|
:align-items :center})
|
||||||
|
|
||||||
|
(def account-details
|
||||||
|
{:flex 1
|
||||||
|
:margin-horizontal 8})
|
||||||
|
|
||||||
|
(def name-and-keycard
|
||||||
|
{:flex-direction :row
|
||||||
|
:align-items :center
|
||||||
|
:gap 4})
|
||||||
|
|
||||||
|
(def row2-content
|
||||||
|
{:flex-direction :row
|
||||||
|
:flex-wrap :wrap
|
||||||
|
:margin-vertical 4
|
||||||
|
:margin-horizontal 8})
|
||||||
|
|
||||||
|
(def no-relevant-tokens
|
||||||
|
{:color colors/neutral-40
|
||||||
|
:margin 4})
|
||||||
|
|
||||||
|
(def token-and-text
|
||||||
|
{:margin 4})
|
|
@ -0,0 +1,95 @@
|
||||||
|
(ns quo.components.wallet.account-permissions.view
|
||||||
|
(:require [quo.components.avatars.account-avatar.view :as account-avatar]
|
||||||
|
[quo.components.dividers.divider-line.view :as divider-line]
|
||||||
|
[quo.components.icon :as icons]
|
||||||
|
[quo.components.markdown.text :as text]
|
||||||
|
[quo.components.selectors.selectors.view :as selectors]
|
||||||
|
[quo.components.wallet.account-permissions.style :as style]
|
||||||
|
[quo.components.wallet.address-text.view :as address-text]
|
||||||
|
[quo.components.wallet.required-tokens.view :as required-tokens]
|
||||||
|
[quo.foundations.colors :as colors]
|
||||||
|
[quo.theme :as quo.theme]
|
||||||
|
[react-native.core :as rn]
|
||||||
|
[schema.core :as schema]
|
||||||
|
[utils.i18n :as i18n]))
|
||||||
|
|
||||||
|
(def ?schema
|
||||||
|
[:=>
|
||||||
|
[:catn
|
||||||
|
[:props
|
||||||
|
[:map {:closed true}
|
||||||
|
[:account
|
||||||
|
[:map {:closed true}
|
||||||
|
[:name [:maybe :string]]
|
||||||
|
[:address [:maybe :string]]
|
||||||
|
[:emoji [:maybe :string]]
|
||||||
|
[:customization-color [:maybe [:or :string :keyword]]]]]
|
||||||
|
[:token-details {:optional true} [:maybe [:vector required-tokens/?schema]]]
|
||||||
|
[:keycard? {:optional true} [:maybe :boolean]]
|
||||||
|
[:checked? {:optional true} [:maybe :boolean]]
|
||||||
|
[:disabled? {:optional true} [:maybe :boolean]]
|
||||||
|
[:on-change {:optional true} [:maybe fn?]]
|
||||||
|
[:theme :schema.common/theme]]]]
|
||||||
|
:any])
|
||||||
|
|
||||||
|
(defn- token-details-section
|
||||||
|
[tokens]
|
||||||
|
(when tokens
|
||||||
|
[:<>
|
||||||
|
[divider-line/view]
|
||||||
|
[rn/view {:style style/row2-content}
|
||||||
|
|
||||||
|
(if (empty? tokens)
|
||||||
|
[text/text
|
||||||
|
{:size :paragraph-2
|
||||||
|
:style style/no-relevant-tokens}
|
||||||
|
(i18n/label :t/no-relevant-tokens)]
|
||||||
|
|
||||||
|
(let [token-length (dec (count tokens))]
|
||||||
|
(map-indexed (fn [idx {:keys [token amount]}]
|
||||||
|
^{:key idx}
|
||||||
|
[required-tokens/view
|
||||||
|
{:container-style style/token-and-text
|
||||||
|
:type :token
|
||||||
|
:amount amount
|
||||||
|
:token token
|
||||||
|
:divider? (not= token-length idx)}])
|
||||||
|
tokens)))]]))
|
||||||
|
|
||||||
|
(defn- view-internal
|
||||||
|
[{:keys
|
||||||
|
[checked? disabled? on-change token-details keycard? theme]
|
||||||
|
{:keys
|
||||||
|
[name address emoji customization-color]} :account}]
|
||||||
|
[rn/view
|
||||||
|
{:style (style/container theme)
|
||||||
|
:accessibility-label :wallet-account-permissions}
|
||||||
|
[rn/view {:style style/row1}
|
||||||
|
[account-avatar/view
|
||||||
|
{:size 32
|
||||||
|
:emoji emoji
|
||||||
|
:customization-color customization-color}]
|
||||||
|
[rn/view {:style style/account-details}
|
||||||
|
[rn/view {:style style/name-and-keycard}
|
||||||
|
[text/text
|
||||||
|
{:size :paragraph-1
|
||||||
|
:weight :semi-bold} name]
|
||||||
|
(when keycard?
|
||||||
|
[icons/icon :i/keycard-card
|
||||||
|
{:accessibility-label :wallet-account-permissions-keycard
|
||||||
|
:size 20
|
||||||
|
:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)}])]
|
||||||
|
[address-text/view
|
||||||
|
{:address address
|
||||||
|
:format :short}]]
|
||||||
|
[selectors/view
|
||||||
|
{:type :checkbox
|
||||||
|
:checked? checked?
|
||||||
|
:disabled? disabled?
|
||||||
|
:on-change on-change}]]
|
||||||
|
|
||||||
|
[token-details-section token-details]])
|
||||||
|
|
||||||
|
(def view
|
||||||
|
(quo.theme/with-theme
|
||||||
|
(schema/instrument #'view-internal ?schema)))
|
|
@ -149,6 +149,7 @@
|
||||||
quo.components.wallet.account-card.view
|
quo.components.wallet.account-card.view
|
||||||
quo.components.wallet.account-origin.view
|
quo.components.wallet.account-origin.view
|
||||||
quo.components.wallet.account-overview.view
|
quo.components.wallet.account-overview.view
|
||||||
|
quo.components.wallet.account-permissions.view
|
||||||
quo.components.wallet.address-text.view
|
quo.components.wallet.address-text.view
|
||||||
quo.components.wallet.confirmation-progress.view
|
quo.components.wallet.confirmation-progress.view
|
||||||
quo.components.wallet.keypair.view
|
quo.components.wallet.keypair.view
|
||||||
|
@ -401,6 +402,7 @@
|
||||||
(def account-card quo.components.wallet.account-card.view/view)
|
(def account-card quo.components.wallet.account-card.view/view)
|
||||||
(def account-origin quo.components.wallet.account-origin.view/view)
|
(def account-origin quo.components.wallet.account-origin.view/view)
|
||||||
(def account-overview quo.components.wallet.account-overview.view/view)
|
(def account-overview quo.components.wallet.account-overview.view/view)
|
||||||
|
(def account-permissions quo.components.wallet.account-permissions.view/view)
|
||||||
(def address-text quo.components.wallet.address-text.view/view)
|
(def address-text quo.components.wallet.address-text.view/view)
|
||||||
(def confirmation-propgress quo.components.wallet.confirmation-progress.view/view)
|
(def confirmation-propgress quo.components.wallet.confirmation-progress.view/view)
|
||||||
(def keypair quo.components.wallet.keypair.view/view)
|
(def keypair quo.components.wallet.keypair.view/view)
|
||||||
|
|
|
@ -84,6 +84,7 @@
|
||||||
[quo.components.wallet.account-card.component-spec]
|
[quo.components.wallet.account-card.component-spec]
|
||||||
[quo.components.wallet.account-origin.component-spec]
|
[quo.components.wallet.account-origin.component-spec]
|
||||||
[quo.components.wallet.account-overview.component-spec]
|
[quo.components.wallet.account-overview.component-spec]
|
||||||
|
[quo.components.wallet.account-permissions.component-spec]
|
||||||
[quo.components.wallet.confirmation-progress.component-spec]
|
[quo.components.wallet.confirmation-progress.component-spec]
|
||||||
[quo.components.wallet.keypair.component-spec]
|
[quo.components.wallet.keypair.component-spec]
|
||||||
[quo.components.wallet.network-amount.component-spec]
|
[quo.components.wallet.network-amount.component-spec]
|
||||||
|
|
|
@ -172,6 +172,7 @@
|
||||||
[status-im.contexts.quo-preview.wallet.account-origin :as account-origin]
|
[status-im.contexts.quo-preview.wallet.account-origin :as account-origin]
|
||||||
[status-im.contexts.quo-preview.wallet.account-overview :as
|
[status-im.contexts.quo-preview.wallet.account-overview :as
|
||||||
account-overview]
|
account-overview]
|
||||||
|
[status-im.contexts.quo-preview.wallet.account-permissions :as account-permissions]
|
||||||
[status-im.contexts.quo-preview.wallet.confirmation-progress :as confirmation-progress]
|
[status-im.contexts.quo-preview.wallet.confirmation-progress :as confirmation-progress]
|
||||||
[status-im.contexts.quo-preview.wallet.keypair :as keypair]
|
[status-im.contexts.quo-preview.wallet.keypair :as keypair]
|
||||||
[status-im.contexts.quo-preview.wallet.network-amount :as network-amount]
|
[status-im.contexts.quo-preview.wallet.network-amount :as network-amount]
|
||||||
|
@ -473,6 +474,8 @@
|
||||||
{:name :account-origin :component account-origin/view}
|
{:name :account-origin :component account-origin/view}
|
||||||
{:name :account-overview
|
{:name :account-overview
|
||||||
:component account-overview/view}
|
:component account-overview/view}
|
||||||
|
{:name :account-permissions
|
||||||
|
:component account-permissions/view}
|
||||||
{:name :confirmation-progress
|
{:name :confirmation-progress
|
||||||
:component confirmation-progress/view}
|
:component confirmation-progress/view}
|
||||||
{:name :keypair :component keypair/view}
|
{:name :keypair :component keypair/view}
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
(ns status-im.contexts.quo-preview.wallet.account-permissions
|
||||||
|
(:require
|
||||||
|
[quo.core :as quo]
|
||||||
|
[reagent.core :as reagent]
|
||||||
|
[status-im.contexts.quo-preview.preview :as preview]))
|
||||||
|
|
||||||
|
(def ^:private descriptor
|
||||||
|
[{:key :name
|
||||||
|
:type :text}
|
||||||
|
{:key :address
|
||||||
|
:type :text}
|
||||||
|
{:key :emoji
|
||||||
|
:type :text}
|
||||||
|
(preview/customization-color-option {:key :account-color})
|
||||||
|
{:key :keycard?
|
||||||
|
:type :boolean}
|
||||||
|
{:key :checked?
|
||||||
|
:type :boolean}
|
||||||
|
{:key :disabled?
|
||||||
|
:type :boolean}
|
||||||
|
{:key :token-details
|
||||||
|
:type :select
|
||||||
|
:options [{:key :no-tokens}
|
||||||
|
{:key :empty-token-list}
|
||||||
|
{:key :1-token}
|
||||||
|
{:key :3-tokens}
|
||||||
|
{:key :5-tokens}]}])
|
||||||
|
|
||||||
|
(def ^:private token-details
|
||||||
|
{:no-tokens nil
|
||||||
|
:empty-token-list []
|
||||||
|
:1-token [{:token "SNT"
|
||||||
|
:amount "100"}]
|
||||||
|
:3-tokens [{:token "SNT"
|
||||||
|
:amount "100"}
|
||||||
|
{:token "ETH"
|
||||||
|
:amount "18"}
|
||||||
|
{:token "BTM"
|
||||||
|
:amount "1000"}]
|
||||||
|
:5-tokens [{:token "SNT"
|
||||||
|
:amount "100"}
|
||||||
|
{:token "ETH"
|
||||||
|
:amount "18"}
|
||||||
|
{:token "BTM"
|
||||||
|
:amount "1000"}
|
||||||
|
{:token "CFI"
|
||||||
|
:amount "1"}
|
||||||
|
{:token "CK"
|
||||||
|
:amount "18"}]})
|
||||||
|
|
||||||
|
(defn view
|
||||||
|
[]
|
||||||
|
(let [state (reagent/atom {:name "Trip to Vegas"
|
||||||
|
:address "0x2f0fbf0a93c5999e9b4410848403a02b38983eb2"
|
||||||
|
:emoji "😊"
|
||||||
|
:account-color :blue
|
||||||
|
:token-details :no-tokens
|
||||||
|
:keycard? true
|
||||||
|
:checked? true
|
||||||
|
:disabled? false})]
|
||||||
|
(fn []
|
||||||
|
[preview/preview-container {:state state :descriptor descriptor}
|
||||||
|
[quo/account-permissions
|
||||||
|
{:account {:name (:name @state)
|
||||||
|
:address (:address @state)
|
||||||
|
:emoji (:emoji @state)
|
||||||
|
:customization-color (:account-color @state)}
|
||||||
|
:token-details (token-details (:token-details @state))
|
||||||
|
:keycard? (:keycard? @state)
|
||||||
|
:checked? (:checked? @state)
|
||||||
|
:disabled? (:disabled? @state)
|
||||||
|
:on-change (fn [checked?] (swap! state assoc :checked? checked?))}]])))
|
|
@ -2437,5 +2437,6 @@
|
||||||
"save-image-to-photos": "Save image to Photos",
|
"save-image-to-photos": "Save image to Photos",
|
||||||
"copy-all-details": "Copy all details",
|
"copy-all-details": "Copy all details",
|
||||||
"share-details": "Share details",
|
"share-details": "Share details",
|
||||||
"what-are-you-waiting-for": "What are you waiting for?"
|
"what-are-you-waiting-for": "What are you waiting for?",
|
||||||
|
"no-relevant-tokens": "No relevant tokens"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue