parent
0964424a36
commit
19ac0eea08
|
@ -0,0 +1,34 @@
|
||||||
|
(ns quo.components.counter.collectible-counter.component-spec
|
||||||
|
(:require
|
||||||
|
[quo.components.counter.collectible-counter.view :as collectible-counter]
|
||||||
|
[test-helpers.component :as h]))
|
||||||
|
|
||||||
|
(defn render
|
||||||
|
[component]
|
||||||
|
(h/render-with-theme-provider component :dark))
|
||||||
|
|
||||||
|
(h/describe "collectible counter component"
|
||||||
|
(h/test "default render of component"
|
||||||
|
(render [collectible-counter/view {}])
|
||||||
|
(-> (h/expect (h/get-by-label-text :collectible-counter))
|
||||||
|
(h/is-truthy)))
|
||||||
|
|
||||||
|
(h/test "render with a string value"
|
||||||
|
(render [collectible-counter/view {:value "x500"}])
|
||||||
|
(-> (h/expect (h/get-by-text "x500"))
|
||||||
|
(h/is-truthy)))
|
||||||
|
|
||||||
|
(h/test "render with an integer value and default status"
|
||||||
|
(render [collectible-counter/view
|
||||||
|
{:value 100
|
||||||
|
:status :default}])
|
||||||
|
(-> (h/expect (h/get-by-text "100"))
|
||||||
|
(h/is-truthy)))
|
||||||
|
|
||||||
|
(h/test "render with all availiable props"
|
||||||
|
(render [collectible-counter/view
|
||||||
|
{:value "x100"
|
||||||
|
:status :error
|
||||||
|
:size :size-24}])
|
||||||
|
(-> (h/expect (h/get-by-text "x100"))
|
||||||
|
(h/is-truthy))))
|
|
@ -0,0 +1,57 @@
|
||||||
|
(ns quo.components.counter.collectible-counter.style
|
||||||
|
(:require
|
||||||
|
[quo.foundations.colors :as colors]))
|
||||||
|
|
||||||
|
(defn- get-background-color
|
||||||
|
[{:keys [status theme]}]
|
||||||
|
(case status
|
||||||
|
:default (colors/theme-colors colors/white-opa-70 colors/neutral-95-opa-70 theme)
|
||||||
|
:error (colors/resolve-color :danger theme 10)
|
||||||
|
(colors/theme-colors colors/white-opa-70 colors/neutral-95-opa-70 theme)))
|
||||||
|
|
||||||
|
(defn- get-container-border-styles
|
||||||
|
[{:keys [status theme]}]
|
||||||
|
(when (= status :error)
|
||||||
|
{:border-color (colors/resolve-color :danger theme 20)
|
||||||
|
:border-width 1}))
|
||||||
|
|
||||||
|
(defn- get-container-styles-by-size
|
||||||
|
[{:keys [size]}]
|
||||||
|
(let [style-size-24 {:height 24
|
||||||
|
:padding-vertical 3
|
||||||
|
:padding-horizontal 8}
|
||||||
|
style-size-32 {:height 32
|
||||||
|
:padding-vertical 5
|
||||||
|
:padding-horizontal 12}]
|
||||||
|
(case size
|
||||||
|
:size-32 style-size-32
|
||||||
|
:size-24 style-size-24
|
||||||
|
style-size-32)))
|
||||||
|
|
||||||
|
(defn container
|
||||||
|
[props]
|
||||||
|
(merge {:align-self :flex-start
|
||||||
|
:flex-direcrion :row
|
||||||
|
:justify-content :center
|
||||||
|
:border-radius 999
|
||||||
|
:background-color (get-background-color props)}
|
||||||
|
(get-container-border-styles props)
|
||||||
|
(get-container-styles-by-size props)))
|
||||||
|
|
||||||
|
(defn- get-text-color
|
||||||
|
[{:keys [status theme]}]
|
||||||
|
(case status
|
||||||
|
:default (colors/theme-colors colors/neutral-100 colors/white theme)
|
||||||
|
:error (colors/resolve-color :danger theme)
|
||||||
|
(colors/theme-colors colors/neutral-100 colors/white theme)))
|
||||||
|
|
||||||
|
(defn get-text-size
|
||||||
|
[{:keys [size]}]
|
||||||
|
(case size
|
||||||
|
:size-32 :paragraph-1
|
||||||
|
:size-24 :paragraph-2
|
||||||
|
:paragraph-1))
|
||||||
|
|
||||||
|
(defn text
|
||||||
|
[props]
|
||||||
|
{:color (get-text-color props)})
|
|
@ -0,0 +1,39 @@
|
||||||
|
(ns quo.components.counter.collectible-counter.view
|
||||||
|
(:require
|
||||||
|
[quo.components.counter.collectible-counter.style :as style]
|
||||||
|
[quo.components.markdown.text :as text]
|
||||||
|
[quo.theme]
|
||||||
|
[react-native.core :as rn]
|
||||||
|
[schema.core :as schema]))
|
||||||
|
|
||||||
|
(def ?schema
|
||||||
|
[:=>
|
||||||
|
[:catn
|
||||||
|
[:props
|
||||||
|
[:map {:closed true}
|
||||||
|
[:value {:optional true} [:maybe [:or :string :int]]]
|
||||||
|
[:status {:optional true} [:maybe :keyword]]
|
||||||
|
[:size {:optional true} [:maybe [:enum :size-32 :size-24]]]
|
||||||
|
[:accessibility-label {:optional true} [:maybe :keyword]]
|
||||||
|
[:theme :schema.common/theme]]]]
|
||||||
|
:any])
|
||||||
|
|
||||||
|
(defn- view-internal
|
||||||
|
[{:keys [value accessibility-label]
|
||||||
|
:as props}]
|
||||||
|
(let [default-props {:status :default
|
||||||
|
:size :size-32}
|
||||||
|
props (merge default-props props)]
|
||||||
|
[rn/view
|
||||||
|
{:accessible true
|
||||||
|
:accessibility-label (or accessibility-label :collectible-counter)
|
||||||
|
:style (style/container props)}
|
||||||
|
[text/text
|
||||||
|
{:weight :medium
|
||||||
|
:size (style/get-text-size props)
|
||||||
|
:style (style/text props)}
|
||||||
|
value]]))
|
||||||
|
|
||||||
|
(def view
|
||||||
|
(quo.theme/with-theme
|
||||||
|
(schema/instrument #'view-internal ?schema)))
|
|
@ -36,6 +36,7 @@
|
||||||
quo.components.community.community-view
|
quo.components.community.community-view
|
||||||
quo.components.community.icon
|
quo.components.community.icon
|
||||||
quo.components.community.token-gating
|
quo.components.community.token-gating
|
||||||
|
quo.components.counter.collectible-counter.view
|
||||||
quo.components.counter.counter.view
|
quo.components.counter.counter.view
|
||||||
quo.components.counter.step.view
|
quo.components.counter.step.view
|
||||||
quo.components.dividers.date
|
quo.components.dividers.date
|
||||||
|
@ -229,6 +230,7 @@
|
||||||
(def channel-actions quo.components.community.channel-actions/channel-actions)
|
(def channel-actions quo.components.community.channel-actions/channel-actions)
|
||||||
|
|
||||||
;;;; Counter
|
;;;; Counter
|
||||||
|
(def collectible-counter quo.components.counter.collectible-counter.view/view)
|
||||||
(def counter quo.components.counter.counter.view/view)
|
(def counter quo.components.counter.counter.view/view)
|
||||||
(def step #'quo.components.counter.step.view/view)
|
(def step #'quo.components.counter.step.view/view)
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
quo.components.calendar.calendar.month-picker.component-spec
|
quo.components.calendar.calendar.month-picker.component-spec
|
||||||
quo.components.colors.color-picker.component-spec
|
quo.components.colors.color-picker.component-spec
|
||||||
quo.components.community.community-stat.component-spec
|
quo.components.community.community-stat.component-spec
|
||||||
|
quo.components.counter.collectible-counter.component-spec
|
||||||
quo.components.counter.counter.component-spec
|
quo.components.counter.counter.component-spec
|
||||||
quo.components.counter.step.component-spec
|
quo.components.counter.step.component-spec
|
||||||
quo.components.dividers.divider-label.component-spec
|
quo.components.dividers.divider-label.component-spec
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
(ns status-im.contexts.preview.quo.counter.collectible-counter
|
||||||
|
(:require
|
||||||
|
[quo.core :as quo]
|
||||||
|
[reagent.core :as reagent]
|
||||||
|
[status-im.contexts.preview.quo.preview :as preview]))
|
||||||
|
|
||||||
|
(def descriptor
|
||||||
|
[{:key :status
|
||||||
|
:type :select
|
||||||
|
:options [{:key :default}
|
||||||
|
{:key :error}]}
|
||||||
|
{:key :size
|
||||||
|
:type :select
|
||||||
|
:options [{:key :size-32}
|
||||||
|
{:key :size-24}]}
|
||||||
|
{:key :value
|
||||||
|
:type :text}])
|
||||||
|
|
||||||
|
(defn view
|
||||||
|
[]
|
||||||
|
(let [state (reagent/atom {:value "x500"
|
||||||
|
:status :default
|
||||||
|
:size :size-32})]
|
||||||
|
(fn []
|
||||||
|
[preview/preview-container
|
||||||
|
{:state state
|
||||||
|
:descriptor descriptor
|
||||||
|
:show-blur-background? true
|
||||||
|
:blur? true}
|
||||||
|
[quo/collectible-counter @state]])))
|
|
@ -43,6 +43,7 @@
|
||||||
[status-im.contexts.preview.quo.community.discover-card :as discover-card]
|
[status-im.contexts.preview.quo.community.discover-card :as discover-card]
|
||||||
[status-im.contexts.preview.quo.community.list-item :as community-list-item]
|
[status-im.contexts.preview.quo.community.list-item :as community-list-item]
|
||||||
[status-im.contexts.preview.quo.community.token-gating :as token-gating]
|
[status-im.contexts.preview.quo.community.token-gating :as token-gating]
|
||||||
|
[status-im.contexts.preview.quo.counter.collectible-counter :as collectible-counter]
|
||||||
[status-im.contexts.preview.quo.counter.counter :as counter]
|
[status-im.contexts.preview.quo.counter.counter :as counter]
|
||||||
[status-im.contexts.preview.quo.counter.step :as step]
|
[status-im.contexts.preview.quo.counter.step :as step]
|
||||||
[status-im.contexts.preview.quo.dividers.date :as divider-date]
|
[status-im.contexts.preview.quo.dividers.date :as divider-date]
|
||||||
|
@ -260,7 +261,9 @@
|
||||||
{:name :channel-actions
|
{:name :channel-actions
|
||||||
:options {:insets {:bottom? true}}
|
:options {:insets {:bottom? true}}
|
||||||
:component channel-actions/view}]
|
:component channel-actions/view}]
|
||||||
:counter [{:name :counter
|
:counter [{:name :collectible-counter
|
||||||
|
:component collectible-counter/view}
|
||||||
|
{:name :counter
|
||||||
:component counter/view}
|
:component counter/view}
|
||||||
{:name :step
|
{:name :step
|
||||||
:component step/view}]
|
:component step/view}]
|
||||||
|
|
Loading…
Reference in New Issue