aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/tau/views.cljs
blob: 139bb83e6dda46ce6e7cfeca689d2585238d61aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
(ns tau.views
  (:require
   [tau.views.player :as player]
   [reitit.frontend.easy :as rfe]
   [re-frame.core :as rf]))

(defn footer
  []
  [:footer.bg-slate-900.text-gray-300.p-5.text-center
   [:div
    [:p (str "Tau " (.getFullYear (js/Date.)))]]])

(defn search-bar
  []
  (let [global-search @(rf/subscribe [:global-search])
        services @(rf/subscribe [:services])
        service-id @(rf/subscribe [:service-id])]
    [:div.flex
     [:form {:on-submit (fn [e]
                          (.preventDefault e)
                          (rfe/push-state :tau.routes/search {} {:q global-search :serviceId service-id}))}
      [:input.bg-slate-900.border.border-solid.border-black.rounded.py-2.px-1.mx-2.text-gray-500
       {:type "text"
        :value global-search
        :on-change #(rf/dispatch [:change-global-search (.. % -target -value)])
        :placeholder "Search for something"}]
      [:select.mx-2.bg-gray-50.border.border-gray-900.text-gray-900
       {:on-change #(rf/dispatch [:change-service-id (js/parseInt (.. % -target -value))])}
       (for [service services]
         [:option {:value (:id service) :key (:id service) :selected (= (:id service) service-id)}
          (-> service :info :name)])]
      [:button..bg-slate-900.border.border-black.rounded.border-solid.text-gray-500.p-2.mx-2
       {:type "submit"} "Search"]]]))

(defn navbar []
  [:nav.bg-slate-800.flex.p-2.content-center.sticky.top-0.z-50
   [:div.px-5.text-white.p-2
    [:a {:href (rfe/href :tau.routes/home) :dangerouslySetInnerHTML {:__html "τ"}}]]
   [:ul.flex.content-center.text-white.p-2
    [:li.px-5 [:a {:href (rfe/href :tau.routes/home)} "Home"]]
    [:li.px-5 [:a {:href (rfe/href :tau.routes/search)} "Search"]]]
   [search-bar]])

(defn app
  []
  (rf/dispatch [:get-services])
  (let [current-match @(rf/subscribe [:current-match])]
    [:div.font-sans.bg-slate-700.min-h-screen.flex.flex-col.h-full
     [navbar]
     [:div.flex.flex-col.justify-between {:class "min-h-[calc(100vh-58px)]"}
      (when-let [view (-> current-match :data :view)]
        [view current-match])
      [player/global-player]
      [footer]]]))