From c78c5b0651ab14c922d43b1dec3d89e4f5e18d99 Mon Sep 17 00:00:00 2001
From: Thomas Heller
Date: Mon, 27 Apr 2020 21:24:08 +0200
Subject: [PATCH] [UI] add warning box when ws is disconnected
---
src/main/shadow/cljs/ui/main.cljs | 8 ++++++--
src/main/shadow/cljs/ui/worker/api_ws.cljs | 20 ++++++++++++++++++++
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/main/shadow/cljs/ui/main.cljs b/src/main/shadow/cljs/ui/main.cljs
index a664f1f3..fb8def62 100644
--- a/src/main/shadow/cljs/ui/main.cljs
+++ b/src/main/shadow/cljs/ui/main.cljs
@@ -14,11 +14,12 @@
))
(defc ui-root* []
- [{::m/keys [current-page]}
+ [{::m/keys [current-page api-ws-connected] :as data}
(sg/query-root
[::m/current-page
;; load marker for suspense, ensures that all basic data is loaded
- ::m/init-complete?])
+ ::m/init-complete?
+ ::m/api-ws-connected])
nav-items
[{:pages #{:dashboard} :label "Dashboard" :path "/dashboard"}
@@ -32,6 +33,9 @@
"inline-block px-4 py-2"]
(<< [:div.flex.flex-col.h-full.bg-gray-100
+ (when-not api-ws-connected
+ (<< [:div.p-4.bg-red-700.text-white.text-lg.font-bold "UI WebSocket not connected! Reload page to reconnect."]))
+
[:div.bg-white.shadow-md.z-10
#_[:div.py-2.px-4 [:span.font-bold "shadow-cljs"]]
[:div
diff --git a/src/main/shadow/cljs/ui/worker/api_ws.cljs b/src/main/shadow/cljs/ui/worker/api_ws.cljs
index 5fac0bc6..081e461e 100644
--- a/src/main/shadow/cljs/ui/worker/api_ws.cljs
+++ b/src/main/shadow/cljs/ui/worker/api_ws.cljs
@@ -41,6 +41,23 @@
;; (js/console.log ::api-ws op msg)
(handle-ws env msg)))
+(sw/reg-event-fx env/app-ref ::m/api-ws-connect
+ []
+ (fn [{:keys [db] :as env} _]
+ {:db (assoc db ::m/api-ws-connected true)}))
+
+(sw/reg-event-fx env/app-ref ::m/api-ws-close
+ []
+ (fn [{:keys [db] :as env} _]
+ {:db (assoc db ::m/api-ws-connected false)}
+ ))
+
+(sw/reg-event-fx env/app-ref ::m/api-ws-error
+ []
+ (fn [{:keys [db] :as env} _]
+ {:db (assoc db ::m/api-ws-connected false)}))
+
+
(defn fx-to-ws
[env build-id]
{:api-ws
@@ -83,6 +100,7 @@
(.addEventListener socket "open"
(fn [e]
;; (js/console.log "api-open" e socket)
+ (sw/tx* @env/app-ref [::m/api-ws-connect])
(go (loop []
(when-some [msg (