Set new recipe to edit mode
This commit is contained in:
parent
608ef993d3
commit
a22a32d996
3 changed files with 55 additions and 18 deletions
|
@ -25,18 +25,20 @@
|
||||||
(dom/on-body-mousedown #(put! >events {:type :body-mousedown :event %}))))))
|
(dom/on-body-mousedown #(put! >events {:type :body-mousedown :event %}))))))
|
||||||
|
|
||||||
(defn render-app [state]
|
(defn render-app [state]
|
||||||
(let [add (chan)
|
(let [grub-add (chan)
|
||||||
update (chan)
|
grub-update (chan)
|
||||||
clear-all (chan)
|
grub-clear-all (chan)
|
||||||
out (a/merge [add update clear-all])
|
recipe-add (chan)
|
||||||
|
out (a/merge [grub-add grub-update grub-clear-all recipe-add])
|
||||||
>events (chan)
|
>events (chan)
|
||||||
<events (a/pub >events :type)]
|
<events (a/pub >events :type)]
|
||||||
(om/root app-view
|
(om/root app-view
|
||||||
state
|
state
|
||||||
{:target (.getElementById js/document "container")
|
{:target (.getElementById js/document "container")
|
||||||
:shared {:add add
|
:shared {:grub-add grub-add
|
||||||
:update update
|
:grub-update grub-update
|
||||||
:clear-all clear-all
|
:grub-clear-all grub-clear-all
|
||||||
|
:recipe-add recipe-add
|
||||||
:>events >events
|
:>events >events
|
||||||
:<events <events}})
|
:<events <events}})
|
||||||
out))
|
out))
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
:on-mouse-up #(put! >local-events :mouse-up)
|
:on-mouse-up #(put! >local-events :mouse-up)
|
||||||
:on-mouse-leave #(put! >local-events :mouse-leave)
|
:on-mouse-leave #(put! >local-events :mouse-leave)
|
||||||
:on-click #(when (#{:waiting :pressed} edit-state)
|
:on-click #(when (#{:waiting :pressed} edit-state)
|
||||||
(put! (om/get-shared owner :update) (complete-event @props)))}
|
(put! (om/get-shared owner :grub-update) (complete-event @props)))}
|
||||||
[:span.grub-static
|
[:span.grub-static
|
||||||
(if completed
|
(if completed
|
||||||
[:span.glyphicon.glyphicon-check]
|
[:span.glyphicon.glyphicon-check]
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
(recur))))
|
(recur))))
|
||||||
(a/unsub <events :body-mousedown subscriber)
|
(a/unsub <events :body-mousedown subscriber)
|
||||||
(a/unsub <local-events :enter subscriber)
|
(a/unsub <local-events :enter subscriber)
|
||||||
(put! (om/get-shared owner :update)
|
(put! (om/get-shared owner :grub-update)
|
||||||
(edit-event id (om/get-state owner :grub))))
|
(edit-event id (om/get-state owner :grub))))
|
||||||
(om/set-state! owner :edit-state :waiting)))
|
(om/set-state! owner :edit-state :waiting)))
|
||||||
(recur))))))
|
(recur))))))
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
{:new-grub ""})
|
{:new-grub ""})
|
||||||
om/IRenderState
|
om/IRenderState
|
||||||
(render-state [this {:keys [new-grub] :as state}]
|
(render-state [this {:keys [new-grub] :as state}]
|
||||||
(let [add (om/get-shared owner :add)]
|
(let [add (om/get-shared owner :grub-add)]
|
||||||
(html
|
(html
|
||||||
[:div
|
[:div
|
||||||
[:h3 "Grub List"]
|
[:h3 "Grub List"]
|
||||||
|
@ -139,5 +139,6 @@
|
||||||
{:id "clear-all-btn"
|
{:id "clear-all-btn"
|
||||||
:class (when (empty? props) "hidden")
|
:class (when (empty? props) "hidden")
|
||||||
:type "button"
|
:type "button"
|
||||||
:on-click #(put! (om/get-shared owner :clear-all) {:event :clear-all-grubs})}
|
:on-click #(put! (om/get-shared owner :grub-clear-all)
|
||||||
|
{:event :clear-all-grubs})}
|
||||||
"Clear all"]])))))
|
"Clear all"]])))))
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
(ns grub.view.recipe
|
(ns grub.view.recipe
|
||||||
(:require [om.core :as om :include-macros true]
|
(:require [om.core :as om :include-macros true]
|
||||||
[sablono.core :as html :refer-macros [html]]
|
[sablono.core :as html :refer-macros [html]]
|
||||||
[cljs.core.async :as a :refer [<! put! chan]])
|
[cljs.core.async :as a :refer [<! put! chan]]
|
||||||
|
[grub.view.dom :as dom])
|
||||||
(:require-macros [grub.macros :refer [log logs]]
|
(:require-macros [grub.macros :refer [log logs]]
|
||||||
[cljs.core.async.macros :refer [go go-loop]]))
|
[cljs.core.async.macros :refer [go go-loop]]))
|
||||||
|
|
||||||
|
@ -34,19 +35,27 @@
|
||||||
|
|
||||||
(defn recipes-view [recipes owner]
|
(defn recipes-view [recipes owner]
|
||||||
(reify
|
(reify
|
||||||
om/IRender
|
om/IInitState
|
||||||
(render [this]
|
(init-state [_]
|
||||||
|
(let [publisher (chan)]
|
||||||
|
{:editing false
|
||||||
|
:>local-events publisher
|
||||||
|
:<local-events (a/pub publisher identity)}))
|
||||||
|
|
||||||
|
om/IRenderState
|
||||||
|
(render-state [this {:keys [editing >local-events]}]
|
||||||
(html
|
(html
|
||||||
[:div
|
[:div
|
||||||
[:h3.recipes-title "Recipes"]
|
[:h3.recipes-title "Recipes"]
|
||||||
[:div.panel.panel-default.recipe-panel
|
[:div.panel.panel-default.recipe-panel
|
||||||
|
{:on-click #(put! >local-events :click)}
|
||||||
[:div.panel-heading.recipe-header
|
[:div.panel-heading.recipe-header
|
||||||
[:input.form-control.recipe-header-input
|
[:input.form-control.recipe-header-input
|
||||||
{:id "recipe-name"
|
{:id "recipe-name"
|
||||||
:type "text"
|
:type "text"
|
||||||
:placeholder "Grub pie"}]
|
:placeholder "Grub pie"}]]
|
||||||
[:button.btn.btn-primary.btn-sm.recipe-add-grubs-btn {:type "button"} "Add Grubs"]]
|
[:div.panel-body.recipe-grubs
|
||||||
[:div.panel-body.recipe-grubs.hidden
|
{:class (when (not editing) "hidden")}
|
||||||
[:textarea.form-control.recipe-grubs-input
|
[:textarea.form-control.recipe-grubs-input
|
||||||
{:id "recipe-grubs"
|
{:id "recipe-grubs"
|
||||||
:rows 3
|
:rows 3
|
||||||
|
@ -55,4 +64,29 @@
|
||||||
{:type "button"} "Done"]]]
|
{:type "button"} "Done"]]]
|
||||||
[:ul#recipe-list.list-group.recipe-list
|
[:ul#recipe-list.list-group.recipe-list
|
||||||
(for [recipe (vals recipes)]
|
(for [recipe (vals recipes)]
|
||||||
(om/build recipe-view recipe {:key :id}))]]))))
|
(om/build recipe-view recipe {:key :id}))]]))
|
||||||
|
|
||||||
|
om/IWillMount
|
||||||
|
(will-mount [_]
|
||||||
|
(let [<local-events (om/get-state owner :<local-events)
|
||||||
|
<events (om/get-shared owner :<events)]
|
||||||
|
(go-loop []
|
||||||
|
(log "waiting")
|
||||||
|
(let [subscriber (chan)]
|
||||||
|
(a/sub <local-events :click subscriber)
|
||||||
|
(<! subscriber)
|
||||||
|
(a/unsub <local-events :click subscriber)
|
||||||
|
(a/close! subscriber))
|
||||||
|
(om/set-state! owner :editing true)
|
||||||
|
(log "editing")
|
||||||
|
(let [subscriber (chan)]
|
||||||
|
(a/sub <events :body-mousedown subscriber)
|
||||||
|
(loop []
|
||||||
|
(let [event (<! subscriber)]
|
||||||
|
(when (and (= (:type event) :body-mousedown)
|
||||||
|
(dom/click-on-self? (:event event) (om/get-node owner)))
|
||||||
|
(recur))))
|
||||||
|
(a/unsub <events :body-mousedown subscriber)
|
||||||
|
(a/close! subscriber))
|
||||||
|
(om/set-state! owner :editing false)
|
||||||
|
(recur))))))
|
||||||
|
|
Loading…
Add table
Reference in a new issue