aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/tau/views/search.cljs
blob: 64bddf39135acfd52e7bd51b03ddf63557ce9fe3 (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
(ns tau.views.search
  (:require
   [re-frame.core :as rf]
   [reitit.frontend.easy :as rfe]))

(defn search-result
  [title author url thumbnail id]
  [:div.w-56.h-64.my-2 {:key id}
   [:div.p-5.border.rounded.border-slate-900.m-2.bg-slate-600.flex.flex-col.max-w-full.min-h-full.max-h-full
    [:a.overflow-hidden {:href (rfe/href :tau.routes/stream {} {:url url}) :title title}
     [:div.flex.justify-center.min-w-full.py-3.box-border
      [:div.h-28.min-w-full.flex.justify-center
       [:img.rounded.object-cover.max-h-full {:src thumbnail}]]]
     [:div.overflow-hidden
      [:h1.text-gray-300.font-bold author]
      [:h1 title]]]]])

(defn search
  [m]
  (let [search-results (rf/subscribe [:search-results])
        services (rf/subscribe [:services])
        service-id (rf/subscribe [:service-id])]
    [:div.text-gray-300.text-center.py-5.relative
     [:h2 (str "Showing search results for: \"" (-> m :query-params :q) "\"")]
     [:h1 (str "Number of search results: " (count (:items @search-results)))]
     ;; TODO: Create loadable component that wraps other components that need to fetch from API
     ;; or use a :loading key to show a spinner component instead
     (if (empty? @search-results)
       [:p "Loading"]
       [:div.flex.justify-center.align-center.flex-wrap
        (for [[i result] (map-indexed vector (:items @search-results))]
          ;; TODO: Add a component per result type
          [search-result
           (:name result)
           (:upload-author result)
           (:url result)
           (:thumbnail-url result)
           i])])]))