diff --git a/src/cljs/airsonic_ui/views.cljs b/src/cljs/airsonic_ui/views.cljs index d4a79f2..f83769f 100644 --- a/src/cljs/airsonic_ui/views.cljs +++ b/src/cljs/airsonic_ui/views.cljs @@ -102,15 +102,15 @@ (defn media-content "Provides the complete UI to browse the media library, interact with search results etc" - [route-id params query] + [[route-id :as route]] (let [;; TODO: Move this to a layer 3 subscription ↓ route-events @(subscribe [:routes/events-for-current-route]) content @(subscribe [:api/route-data route-events])] [:div [:section.section - [breadcrumbs content] + [breadcrumbs route content] (case route-id - ::routes/library [library/main [route-id params query] content] + ::routes/library [library/main route content] ::routes/artist.detail [artist/detail content] ::routes/album.detail [collection/detail content] ::routes/search [search/results content] @@ -127,7 +127,7 @@ [] (let [notifications @(subscribe [::subs/notifications]) is-booting? @(subscribe [::subs/is-booting?]) - [route-id params query] @(subscribe [:routes/current-route])] + [route-id :as route] @(subscribe [:routes/current-route])] [(add-classes :div route-id) [notification-list notifications] (if is-booting? @@ -136,4 +136,4 @@ [navbar-top] (case route-id ::routes/login [login-form] - [media-content route-id params query])])])) + [media-content route])])])) diff --git a/src/cljs/airsonic_ui/views/breadcrumbs.cljs b/src/cljs/airsonic_ui/views/breadcrumbs.cljs index fe747f1..1ecb5aa 100644 --- a/src/cljs/airsonic_ui/views/breadcrumbs.cljs +++ b/src/cljs/airsonic_ui/views/breadcrumbs.cljs @@ -5,16 +5,6 @@ ;; hierarchy no matter how you came to the url. They should allow easy ;; navigation upwards that hierarchy (e.g. album -> artist) -(defn page-type - "Helper to see what kind of view we're currently dealing with" - [content] - (case (set (keys content)) - #{:artist :artist-info} :artist - #{:album} :album - #{:search} :search - #{:podcasts} :podcast - :other-content)) - (defn- bulma-breadcrumbs [& items] [:div.container>nav.breadcrumb {:aria-label "breadcrumbs"} [:ul @@ -22,25 +12,32 @@ [:li {:key idx} [:a {:href href} label]]) [:li.is-active>a (last items)]]]) -(defmulti breadcrumbs page-type) +(defmulti breadcrumbs + (fn dispatch-on [[route-id] content] route-id)) -(defmethod breadcrumbs :default [content] +(defmethod breadcrumbs :default [_ _] [bulma-breadcrumbs "Start"]) (def start [(url-for ::routes/library) "Start"]) -(defmethod breadcrumbs :artist [{:keys [artist]}] +(defmethod breadcrumbs ::routes/artist.detail [_ {:keys [artist]}] [bulma-breadcrumbs start (:name artist)]) -(defmethod breadcrumbs :album [{:keys [album]}] +(defmethod breadcrumbs ::routes/album.detail [_ {:keys [album]}] [bulma-breadcrumbs start [(url-for ::routes/artist.detail {:id (:artistId album)}) (:artist album)] (:name album)]) -(defmethod breadcrumbs :search [_] +(defmethod breadcrumbs ::routes/search [_ _] [bulma-breadcrumbs start "Search"]) -(defmethod breadcrumbs :podcast [{:keys [channel]}] +(defmethod breadcrumbs ::routes/podcast.overview [_ _] ;; TODO: Detail view [bulma-breadcrumbs start "Podcasts"]) + +(defmethod breadcrumbs ::routes/current-queue [_ _] + [bulma-breadcrumbs start "Current Queue"]) + +(defmethod breadcrumbs ::routes/about [_ _] + [bulma-breadcrumbs start "About"])