Skip to content

Commit

Permalink
Add visibility of active dropdown item (#25)
Browse files Browse the repository at this point in the history
  • Loading branch information
katauber committed Jan 18, 2022
1 parent 38c1eeb commit 5a40c6f
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 27 deletions.
7 changes: 5 additions & 2 deletions src/cljs/metafacture_playground/db.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@
:details nil
:show-details? false
:type nil}
:ui {:height nil}})
:ui {:height nil
:dropdown {:active-item nil
:open? false}}})

(defn- parseBoolean [val]
(if (= val "true")
Expand Down Expand Up @@ -53,4 +55,5 @@
:content str}
:message {:content str
:type keyword}
:ui {:height parseBoolean}})
:ui {:height parseBoolean
:dropdown {:active-item str}}})
19 changes: 16 additions & 3 deletions src/cljs/metafacture_playground/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,28 @@
::edit-input-value
edit-value)

(defn open-dropdown
[{db :db} [_ status]]
{:db (assoc-in db [:ui :dropdown :open?] status)})

(re-frame/reg-event-fx
::open-dropdown
open-dropdown)

(defn load-sample
[{db :db} [_ sample]]
{:db (assoc db :result nil)
[{db :db} [_ dropdown-value sample]]
{:db (-> db
(assoc :result nil)
(assoc-in [:ui :dropdown :active-item] dropdown-value))
:dispatch-n (conj
(mapv
(fn [editor]
[::edit-input-value editor (get sample editor "")])
[:data :flux :fix :morph])
[::switch-editor (:active-editor sample)])})
[::switch-editor (:active-editor sample)])
:storage/set {:session? true
:name (->storage-key [:ui :dropdown :active-item])
:value dropdown-value}})

(re-frame/reg-event-fx
::load-sample
Expand Down
10 changes: 10 additions & 0 deletions src/cljs/metafacture_playground/subs.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@
(fn [db _]
(get-in db [:message :show-details?])))

(re-frame/reg-sub
::dropdown-active-item
(fn [db _]
(get-in db [:ui :dropdown :active-item])))

(re-frame/reg-sub
::dropdown-open?
(fn [db _]
(get-in db [:ui :dropdown :open?])))

(defn- display-name [str]
(clj-str/replace str "_" " "))

Expand Down
39 changes: 22 additions & 17 deletions src/cljs/metafacture_playground/views.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@
(def menu (component "Menu"))
(def menu-item (component "Menu" "Item"))
(def dropdown (component "Dropdown"))
(def dropdown-menu (component "Dropdown" "Menu"))
(def dropdown-item (component "Dropdown" "Item"))

;;; Using monaco editor react component

Expand Down Expand Up @@ -184,21 +182,28 @@

(defn examples-dropdown []
[:> button-group {:color color
:basic true}
[:> dropdown
{:className "icon"
:button true
:icon "code"
:labeled true
:text "Load example"}
[:> dropdown-menu
(for [[k {:keys [display-name value]}] @(re-frame/subscribe [::subs/examples])]
^{:key k}
[:> dropdown-item
{:key k
:text display-name
:value display-name
:on-click #(re-frame/dispatch [::events/load-sample value])}])]]])
:basic true}
(let [dropdown-value (re-frame/subscribe [::subs/dropdown-active-item])
dropdown-open? (re-frame/subscribe [::subs/dropdown-open?])]
[:> dropdown
{:className "icon"
:button true
:labeled true
:search true
:placeholder "Load example"
:value (or @dropdown-value "")
:open @dropdown-open?
:options (mapv
(fn [[k {:keys [display-name value]}]]
{:key k
:text display-name
:value display-name
:active (= display-name @dropdown-value)
:selected (= display-name @dropdown-value)
:onClick #(re-frame/dispatch [::events/load-sample display-name value])})
@(re-frame/subscribe [::subs/examples]))
:on-blur #(re-frame/dispatch [::events/open-dropdown false])
:on-click #(re-frame/dispatch [::events/open-dropdown (not @dropdown-open?)])}])])

(defn process-button []
(let [data (re-frame/subscribe [::subs/field-value :data])
Expand Down
13 changes: 8 additions & 5 deletions test/cljs/metafacture_playground/event_handler_test.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,16 @@
(deftest load-sample-test
(testing "Test loading sample"
(rf-test/run-test-sync
(re-frame/dispatch [::events/load-sample sample-data])
(and (= (is @(re-frame/subscribe [::subs/field-value :data])
(re-frame/dispatch [::events/load-sample "sample data" sample-data])
(and (is (= @(re-frame/subscribe [::subs/field-value :data])
(:data sample-data)))
(= (is @(re-frame/subscribe [::subs/field-value :flux])
(is (= @(re-frame/subscribe [::subs/field-value :flux])
(:flux sample-data)))
(= (is @(re-frame/subscribe [::subs/field-value :fix])
(:fix sample-data)))))))
(is (= @(re-frame/subscribe [::subs/field-value :fix])
(:fix sample-data)))
(is (not @(re-frame/subscribe [::subs/dropdown-open?])))
(is (= @(re-frame/subscribe [::subs/dropdown-active-item])
"sample data"))))))


(deftest clear-all-test
Expand Down

0 comments on commit 5a40c6f

Please sign in to comment.