From b495066b18f4a7a3ca60ec09525c7fe67aa06c4e Mon Sep 17 00:00:00 2001
From: Ahmad Farhat <ahmad.af.farhat@gmail.com>
Date: Wed, 11 Oct 2023 16:07:30 -0400
Subject: [PATCH] Add additional fail safe for action cable (#5453)

---
 app/javascript/components/rooms/room/join/JoinCard.jsx | 5 ++++-
 app/javascript/hooks/mutations/rooms/useRoomStatus.jsx | 4 +++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/app/javascript/components/rooms/room/join/JoinCard.jsx b/app/javascript/components/rooms/room/join/JoinCard.jsx
index 8862a1b2..2dedcef1 100644
--- a/app/javascript/components/rooms/room/join/JoinCard.jsx
+++ b/app/javascript/components/rooms/room/join/JoinCard.jsx
@@ -48,9 +48,10 @@ export default function JoinCard() {
   const currentUser = useAuth();
   const { friendlyId } = useParams();
   const [hasStarted, setHasStarted] = useState(false);
+  const [joinInterval, setJoinInterval] = useState();
 
   const publicRoom = usePublicRoom(friendlyId);
-  const roomStatusAPI = useRoomStatus(friendlyId);
+  const roomStatusAPI = useRoomStatus(friendlyId, joinInterval);
 
   const { data: env } = useEnv();
 
@@ -76,6 +77,8 @@ export default function JoinCard() {
     }
 
     roomStatusAPI.mutate(data);
+    const interval = setInterval(() => roomStatusAPI.mutate(data), 5000);
+    setJoinInterval(interval);
   };
   const reset = () => { setHasStarted(false); };// Reset pipeline;
 
diff --git a/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx b/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx
index 832a0655..4b97b903 100644
--- a/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx
+++ b/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx
@@ -19,7 +19,7 @@ import { useMutation } from 'react-query';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
-export default function useRoomStatus(friendlyId) {
+export default function useRoomStatus(friendlyId, joinInterval) {
   const { t } = useTranslation();
 
   return useMutation(
@@ -27,11 +27,13 @@ export default function useRoomStatus(friendlyId) {
     {
       onSuccess: ({ joinUrl }) => {
         if (joinUrl) {
+          clearInterval(joinInterval);
           toast.loading(t('toast.success.room.joining_meeting'));
           window.location.replace(joinUrl);
         }
       },
       onError: () => {
+        clearInterval(joinInterval);
         toast.error(t('toast.error.problem_completing_action'));
       },
     },
-- 
GitLab