Skip to content

Commit

Permalink
Sidebar: use nom.ui/defcomponentmethod.
Browse files Browse the repository at this point in the history
  • Loading branch information
Moritz Ulrich committed Mar 5, 2015
1 parent f866efd commit ffab080
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 46 deletions.
5 changes: 4 additions & 1 deletion .dir-locals.el
Expand Up @@ -7,5 +7,8 @@
(eval put-clojure-indent 'let->> 1)

(eval put 'defcomponent 'clojure-backtracking-indent '(4 (2)))
(eval put 'ui/defcomponent 'clojure-backtracking-indent '(4 (2)))))
(eval put 'ui/defcomponent 'clojure-backtracking-indent '(4 (2)))

(eval put 'defcomponentmethod 'clojure-backtracking-indent '(4 (2)))
(eval put 'ui/defcomponentmethod 'clojure-backtracking-indent '(4 (2)))))

79 changes: 34 additions & 45 deletions src-cljs/pepa/components/sidebar.cljs
Expand Up @@ -39,14 +39,10 @@

(defmulti ^:private navigation-element (fn [_ _ [name id _ route]] id))

(defmethod navigation-element :default [state _ [title id _ href]]
(reify
om/IDisplayName (display-name [_] "DefaultNavigation")
om/IRender
(render [_]
(html
[:a.menu-link {:href href}
[:div title]]))))
(ui/defcomponentmethod navigation-element :default [state _ [title id _ href]]
(render [_]
[:a.menu-link {:href href}
[:div title]]))

(defn ^:private inbox-drop! [state owner e]
;; NOTE: We need to handle all event-object interop BEFORE entering
Expand All @@ -67,40 +63,31 @@
(om/set-state! :drop? false))))))
(.preventDefault e))

(defmethod navigation-element :inbox [state owner [title id _ href]]
(reify
om/IDisplayName (display-name [_] "InboxNavigation")
om/IRenderState
(render-state [_ {:keys [drop? working?]}]
(html
[:a.menu-link {:href href}
[:div {:class [(when working? "working")
(when drop? "drop-target")]
:on-drag-over upload/accept-file-drag
:on-drag-enter #(om/set-state! owner :drop? true)
:on-drag-leave #(om/set-state! owner :drop? false)
:on-drop (partial inbox-drop! state owner)}
title
(when-let [pages (-> state :workflows :inbox :documents :inbox :pages seq)]
[:span.count (count pages)])]]))))
(ui/defcomponentmethod navigation-element :inbox [state owner [title id _ href]]
(render-state [_ {:keys [drop? working?]}]
[:a.menu-link {:href href}
[:div {:class [(when working? "working")
(when drop? "drop-target")]
:on-drag-over upload/accept-file-drag
:on-drag-enter #(om/set-state! owner :drop? true)
:on-drag-leave #(om/set-state! owner :drop? false)
:on-drop (partial inbox-drop! state owner)}
title
(when-let [pages (-> state :workflows :inbox :documents :inbox :pages seq)]
[:span.count (count pages)])]]))

(defmethod navigation-element :tags [state owner [title id _ href]]
(reify
om/IDisplayName (display-name [_] "TagsNavigation")
om/IInitState
(init-state [_]
{:open? true})
om/IRenderState
(render-state [_ {:keys [open?]}]
(html
[:div.menu-link
[:div {:on-click (fn [e]
(om/update-state! owner :open? not)
(.preventDefault e))
:class [(when open? "open")]}
title]
(when open?
(om/build tags/tags-list (data/sorted-tags state)))]))))
(ui/defcomponentmethod navigation-element :tags [state owner [title id _ href]]
(init-state [_]
{:open? true})
(render-state [_ {:keys [open?]}]
[:div.menu-link
[:div {:on-click (fn [e]
(om/update-state! owner :open? not)
(.preventDefault e))
:class [(when open? "open")]}
title]
(when open?
(om/build tags/tags-list (data/sorted-tags state)))]))

(defn ^:private route-matches? [route workflows]
(let [route (if (seqable? route)
Expand All @@ -127,8 +114,10 @@
[:ul
;; TODO: Use build-all
(for [element nav/navigation-elements]
(let [[title ident routes href] element]
[:li {:class [(name ident)
(let [[title ident routes href] element
ident (name ident)]
[:li {:class [ident
(when (route-matches? route routes) "active")]
:key (name ident)}
(om/build navigation-element state {:opts element})]))]]])))
:key ident}
(om/build navigation-element state {:opts element
:react-key ident})]))]]])))

0 comments on commit ffab080

Please sign in to comment.