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])])]))
|