From 00e24fd772686ed790b13b54e7a2a899ca614115 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sat, 17 Jul 2021 11:19:16 -0400 Subject: [PATCH] Adding websocket error and reconnect toasts. Fixes #129 --- src/shared/components/navbar.tsx | 15 +++++++++++++-- src/shared/services/WebSocketService.ts | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/shared/components/navbar.tsx b/src/shared/components/navbar.tsx index 6870c172..0af55ddc 100644 --- a/src/shared/components/navbar.tsx +++ b/src/shared/components/navbar.tsx @@ -81,6 +81,8 @@ export class Navbar extends Component { componentDidMount() { // Subscribe to jwt changes if (isBrowser()) { + this.websocketEvents(); + this.searchTextField = createRef(); console.log(`isLoggedIn = ${this.state.isLoggedIn}`); @@ -393,6 +395,7 @@ export class Navbar extends Component { } return; } else if (msg.reconnect) { + toast(i18n.t("websocket_reconnected"), "success"); WebSocketService.Instance.send( wsClient.userJoin({ auth: authField(), @@ -530,11 +533,19 @@ export class Navbar extends Component { } get canCreateCommunity(): boolean { - let adminOnly = this.props.site_res.site_view?.site - .community_creation_admin_only; + let adminOnly = + this.props.site_res.site_view?.site.community_creation_admin_only; return !adminOnly || this.canAdmin; } + /// Listens for some websocket errors + websocketEvents() { + let msg = i18n.t("websocket_disconnected"); + WebSocketService.Instance.closeEventListener(() => { + toast(msg, "danger"); + }); + } + requestNotificationPermission() { if (UserService.Instance.localUserView) { document.addEventListener("DOMContentLoaded", function () { diff --git a/src/shared/services/WebSocketService.ts b/src/shared/services/WebSocketService.ts index 4c91d405..3cb37486 100644 --- a/src/shared/services/WebSocketService.ts +++ b/src/shared/services/WebSocketService.ts @@ -56,6 +56,10 @@ export class WebSocketService { this.ws.send(data); } + public closeEventListener(listener: (event: CloseEvent) => void) { + this.ws.addEventListener("close", listener); + } + public static get Instance() { return this._instance || (this._instance = new this()); }