aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/tau/events.cljs
diff options
context:
space:
mode:
authorMiguel Ángel Moreno <mail@migalmoreno.com>2022-12-29 02:26:20 +0100
committerMiguel Ángel Moreno <mail@migalmoreno.com>2022-12-29 02:26:20 +0100
commit8c46de38348c421c0c9f102d604fcfc18807c0bb (patch)
tree3174b4392ca3eadd24c1da06929830b220764e38 /src/frontend/tau/events.cljs
parentdfcc61063822dfb0fe699896da312249e93d5439 (diff)
feat(frontend): Add further features and address quirks
Diffstat (limited to 'src/frontend/tau/events.cljs')
-rw-r--r--src/frontend/tau/events.cljs190
1 files changed, 151 insertions, 39 deletions
diff --git a/src/frontend/tau/events.cljs b/src/frontend/tau/events.cljs
index f52ebd2..ed01467 100644
--- a/src/frontend/tau/events.cljs
+++ b/src/frontend/tau/events.cljs
@@ -32,12 +32,24 @@
(fn [_ _]
{::history-back! nil}))
+(rf/reg-event-db
+ ::page-scroll
+ (fn [db _]
+ (when (> (.-scrollY js/window) 0)
+ (assoc db :page-scroll (+ (.-scrollY js/window) (.-innerHeight js/window))))))
+
+(rf/reg-event-db
+ ::reset-page-scroll
+ (fn [db _]
+ (assoc db :page-scroll 0)))
+
(rf/reg-event-fx
::navigated
(fn [{:keys [db]} [_ new-match]]
- {::scroll-to-top nil
- :db (assoc db :current-match new-match)
- :fx [[:dispatch [::reset-page-scroll]]]}))
+ {:db (-> db
+ (assoc :current-match new-match)
+ (assoc :show-pagination-loading false))
+ ::scroll-to-top nil}))
(rf/reg-event-fx
::navigate
@@ -61,9 +73,9 @@
(rf/reg-event-db
::change-service-color
- (fn [db [_ id]]
+ (fn [db [_ service-id]]
(assoc db :service-color
- (case id
+ (case service-id
0 "#cc0000"
1 "#ff7700"
2 "#333333"
@@ -72,9 +84,9 @@
(rf/reg-event-fx
::change-service-id
- (fn [{:keys [db]} [_ id]]
- {:db (assoc db :service-id id)
- :fx [[:dispatch [::change-service-color id]]]}))
+ (fn [{:keys [db]} [_ service-id]]
+ {:db (assoc db :service-id service-id)
+ :fx [[:dispatch [::change-service-color service-id]]]}))
(rf/reg-event-db
::load-paginated-channel-results
@@ -87,14 +99,38 @@
(assoc :show-pagination-loading false))))
(rf/reg-event-fx
- ::scroll-channel-pagination
+ ::channel-pagination
(fn [{:keys [db]} [_ uri next-page-url]]
- (assoc
- (api/get-request
- (str "/api/channels/" (js/encodeURIComponent uri) )
- [::load-paginated-channel-results] [::bad-response]
- {:nextPage (js/encodeURIComponent next-page-url)})
- :db (assoc db :show-pagination-loading true))))
+ (if (empty? next-page-url)
+ {:db (assoc db :show-pagination-loading false)}
+ (assoc
+ (api/get-request
+ (str "/api/channels/" (js/encodeURIComponent uri) )
+ [::load-paginated-channel-results] [::bad-response]
+ {:nextPage (js/encodeURIComponent next-page-url)})
+ :db (assoc db :show-pagination-loading true)))))
+
+(rf/reg-event-db
+ ::load-paginated-playlist-results
+ (fn [db [_ res]]
+ (-> db
+ (update-in [:playlist :related-streams] #(apply conj %1 %2)
+ (:related-streams (js->clj res :keywordize-keys true)))
+ (assoc-in [:playlist :next-page]
+ (:next-page (js->clj res :keywordize-keys true)))
+ (assoc :show-pagination-loading false))))
+
+(rf/reg-event-fx
+ ::playlist-pagination
+ (fn [{:keys [db]} [_ uri next-page-url]]
+ (if (empty? next-page-url)
+ {:db (assoc db :show-pagination-loading false)}
+ (assoc
+ (api/get-request
+ (str "/api/playlists/" (js/encodeURIComponent uri))
+ [::load-paginated-playlist-results] [::bad-response]
+ {:nextPage (js/encodeURIComponent next-page-url)})
+ :db (assoc db :show-pagination-loading true)))))
(rf/reg-event-db
::load-paginated-search-results
@@ -106,26 +142,18 @@
(:next-page (js->clj res :keywordize-keys true)))
(assoc :show-pagination-loading false))))
-(rf/reg-event-db
- ::reset-page-scroll
- (fn [db _]
- (assoc db :page-scroll 0)))
-
-(rf/reg-event-db
- ::page-scroll
- (fn [db _]
- (assoc db :page-scroll (+ (.-scrollY js/window) (.-innerHeight js/window)))))
-
(rf/reg-event-fx
- ::scroll-search-pagination
+ ::search-pagination
(fn [{:keys [db]} [_ query id next-page-url]]
- (assoc
- (api/get-request
- (str "/api/services/" id "/search")
- [::load-paginated-search-results] [::bad-response]
- {:q query
- :nextPage (js/encodeURIComponent next-page-url)})
- :db (assoc db :show-pagination-loading true))))
+ (if (empty? next-page-url)
+ {:db (assoc db :show-pagination-loading false)}
+ (assoc
+ (api/get-request
+ (str "/api/services/" id "/search")
+ [::load-paginated-search-results] [::bad-response]
+ {:q query
+ :nextPage (js/encodeURIComponent next-page-url)})
+ :db (assoc db :show-pagination-loading true)))))
(rf/reg-event-fx
::switch-to-global-player
@@ -144,6 +172,49 @@
(api/get-request "/api/services" [::load-services] [::bad-response])))
(rf/reg-event-db
+ ::load-comments
+ (fn [db [_ res]]
+ (-> db
+ (assoc-in [:stream :comments-page] (js->clj res :keywordize-keys true))
+ (assoc-in [:stream :show-comments-loading] false))))
+
+(rf/reg-event-fx
+ ::get-comments
+ (fn [{:keys [db]} [_ url]]
+ (assoc
+ (api/get-request (str "/api/comments/" (js/encodeURIComponent url))
+ [::load-comments] [::bad-response])
+ :db (-> db
+ (assoc-in [:stream :show-comments-loading] true)
+ (assoc-in [:stream :show-comments] true)))))
+
+(rf/reg-event-db
+ ::toggle-comments
+ (fn [db [_ res]]
+ (assoc-in db [:stream :show-comments] (not (-> db :stream :show-comments)))))
+
+(rf/reg-event-db
+ ::load-paginated-comments
+ (fn [db [_ res]]
+ (-> db
+ (update-in [:stream :comments-page :comments] #(apply conj %1 %2)
+ (:comments (js->clj res :keywordize-keys true)))
+ (assoc-in [:stream :comments-page :next-page]
+ (:next-page (js->clj res :keywordize-keys true)))
+ (assoc :show-pagination-loading false))))
+
+(rf/reg-event-fx
+ ::comments-pagination
+ (fn [{:keys [db]} [_ url next-page-url]]
+ (if (empty? next-page-url)
+ {:db (assoc db :show-pagination-loading false)}
+ (assoc
+ (api/get-request (str "/api/comments/" (js/encodeURIComponent url))
+ [::load-paginated-comments] [::bad-response]
+ {:nextPage (js/encodeURIComponent next-page-url)})
+ :db (assoc db :show-pagination-loading true)))))
+
+(rf/reg-event-db
::load-kiosks
(fn [db [_ res]]
(assoc db :kiosks (js->clj res :keywordize-keys true))))
@@ -160,14 +231,54 @@
:show-page-loading false)))
(rf/reg-event-fx
- ::get-kiosk
- (fn [{:keys [db]} [_ {:keys [service-id kiosk-id]}]]
+ ::get-default-kiosk
+ (fn [{:keys [db]} [_ service-id]]
(assoc
- (api/get-request (str "/api/services/" service-id "/kiosks/"
- (js/encodeURIComponent kiosk-id))
+ (api/get-request (str "/api/services/" service-id "/default-kiosk")
[::load-kiosk] [::bad-response])
:db (assoc db :show-page-loading true))))
+(rf/reg-event-fx
+ ::get-kiosk
+ (fn [{:keys [db]} [_ service-id kiosk-id]]
+ (if kiosk-id
+ (assoc
+ (api/get-request (str "/api/services/" service-id "/kiosks/"
+ (js/encodeURIComponent kiosk-id))
+ [::load-kiosk] [::bad-response])
+ :db (assoc db :show-page-loading true))
+ {:fx [[:dispatch [::get-default-kiosk service-id]]]})))
+
+(rf/reg-event-fx
+ ::change-service
+ (fn [{:keys [db]} [_ service-id]]
+ {:fx [[:dispatch
+ [::navigate {:name :tau.routes/kiosk
+ :params {}
+ :query {:serviceId service-id}}]]]}))
+
+(rf/reg-event-db
+ ::load-paginated-kiosk-results
+ (fn [db [_ res]]
+ (-> db
+ (update-in [:kiosk :related-streams] #(apply conj %1 %2)
+ (:related-streams (js->clj res :keywordize-keys true)))
+ (assoc-in [:kiosk :next-page]
+ (:next-page (js->clj res :keywordize-keys true)))
+ (assoc :show-pagination-loading false))))
+
+(rf/reg-event-fx
+ ::kiosk-pagination
+ (fn [{:keys [db]} [_ service-id kiosk-id next-page-url]]
+ (if (empty? next-page-url)
+ {:db (assoc db :show-pagination-loading false)}
+ (assoc
+ (api/get-request
+ (str "/api/services/" service-id "/kiosks/" (js/encodeURIComponent kiosk-id))
+ [::load-paginated-kiosk-results] [::bad-response]
+ {:nextPage (js/encodeURIComponent next-page-url)})
+ :db (assoc db :show-pagination-loading true)))))
+
(rf/reg-event-db
::load-stream
(fn [db [_ res]]
@@ -215,11 +326,12 @@
::load-search-results
(fn [db [_ res]]
(assoc db :search-results (js->clj res :keywordize-keys true)
- :show-page-loading false)))
+ :show-page-loading false
+ :global-search "")))
(rf/reg-event-fx
::get-search-results
- (fn [{:keys [db]} [_ {:keys [service-id query]}]]
+ (fn [{:keys [db]} [_ service-id query]]
(assoc
(api/get-request (str "/api/services/" service-id "/search")
[::load-search-results] [::bad-response]