@@ -31,7 +31,6 @@ import { GUPSHUP_CALLBACK_URL } from 'config';
3131import { ChatMessageType } from 'containers/Chat/ChatMessages/ChatMessage/ChatMessageType/ChatMessageType' ;
3232import { TemplateButtons } from 'containers/Chat/ChatMessages/TemplateButtons/TemplateButtons' ;
3333import { GET_SIMULATOR , RELEASE_SIMULATOR , SIMULATOR_SEARCH_QUERY } from 'graphql/queries/Simulator' ;
34- // import { SIMULATOR_RELEASE_SUBSCRIPTION } from 'graphql/subscriptions/PeriodicInfo';
3534import { getUserSession } from 'services/AuthService' ;
3635import { setNotification } from 'common/notification' ;
3736import setLogs from 'config/logs' ;
@@ -132,6 +131,7 @@ const Simulator = ({
132131 const [ simulatedMessages , setSimulatedMessage ] = useState < any > ( ) ;
133132 const [ isOpen , setIsOpen ] = useState ( false ) ;
134133 const nodeRef = useRef < HTMLDivElement > ( null ! ) ;
134+ const [ isDisconnected , setIsDisconnected ] = useState ( false ) ;
135135
136136 const client = useApolloClient ( ) ;
137137 // Template listing
@@ -150,6 +150,33 @@ const Simulator = ({
150150 } ;
151151 // chat messages will be shown on simulator
152152 const isSimulatedMessage = true ;
153+
154+ useEffect ( ( ) => {
155+ if ( isPreviewMessage ) return ;
156+
157+ const handleOnline = ( ) => {
158+ setIsDisconnected ( false ) ;
159+ } ;
160+
161+ const handleOffline = ( ) => {
162+ setIsDisconnected ( true ) ;
163+ } ;
164+
165+ if ( ! navigator . onLine ) {
166+ setIsDisconnected ( true ) ;
167+ }
168+
169+ window . addEventListener ( 'online' , handleOnline ) ;
170+ window . addEventListener ( 'offline' , handleOffline ) ;
171+
172+ return ( ) => {
173+ if ( ! isPreviewMessage ) {
174+ window . removeEventListener ( 'online' , handleOnline ) ;
175+ window . removeEventListener ( 'offline' , handleOffline ) ;
176+ }
177+ } ;
178+ } , [ isPreviewMessage ] ) ;
179+
153180 const sendMessage = ( senderDetails : Sender , interactivePayload ?: any , templateValue ?: any , messageUuid ?: any ) => {
154181 const sendMessageText = inputMessage === '' && message ? message : inputMessage ;
155182
@@ -189,6 +216,7 @@ const Simulator = ({
189216 // add log's
190217 setLogs ( `sendMessageText:${ sendMessageText } GUPSHUP_CALLBACK_URL:${ GUPSHUP_CALLBACK_URL } ` , 'info' ) ;
191218 setLogs ( error , 'error' , true ) ;
219+ setIsDisconnected ( true ) ;
192220 } ) ;
193221 setInputMessage ( '' ) ;
194222 } ;
@@ -210,13 +238,26 @@ const Simulator = ({
210238 }
211239 }
212240 } ,
241+ onError : ( error ) => {
242+ setLogs ( 'SIMULATOR_RELEASE_SUBSCRIPTION error' , 'error' , true ) ;
243+ setLogs ( error , 'error' , true ) ;
244+ setIsDisconnected ( true ) ;
245+ } ,
213246 } ) ;
214247
215248 useSubscription ( SIMULATOR_MESSAGE_SENT_SUBSCRIPTION , {
216249 variables,
217250 skip : isPreviewMessage ,
218251 onData : ( { data : sentData } ) => {
219252 setAllConversations ( updateSimulatorConversations ( allConversations , sentData , 'SENT' ) ) ;
253+ if ( isDisconnected ) {
254+ setIsDisconnected ( false ) ;
255+ }
256+ } ,
257+ onError : ( error ) => {
258+ setLogs ( 'SIMULATOR_MESSAGE_SENT_SUBSCRIPTION error' , 'error' , true ) ;
259+ setLogs ( error , 'error' , true ) ;
260+ setIsDisconnected ( true ) ;
220261 } ,
221262 } ) ;
222263
@@ -225,6 +266,15 @@ const Simulator = ({
225266 skip : isPreviewMessage ,
226267 onData : ( { data : receivedData } ) => {
227268 setAllConversations ( updateSimulatorConversations ( allConversations , receivedData , 'RECEIVED' ) ) ;
269+ // Reset disconnected state on successful data
270+ if ( isDisconnected ) {
271+ setIsDisconnected ( false ) ;
272+ }
273+ } ,
274+ onError : ( error ) => {
275+ setLogs ( 'SIMULATOR_MESSAGE_RECEIVED_SUBSCRIPTION error' , 'error' , true ) ;
276+ setLogs ( error , 'error' , true ) ;
277+ setIsDisconnected ( true ) ;
228278 } ,
229279 } ) ;
230280
@@ -271,6 +321,7 @@ const Simulator = ({
271321 // add log's
272322 setLogs ( `sendMediaMessage:${ type } GUPSHUP_CALLBACK_URL:${ GUPSHUP_CALLBACK_URL } ` , 'info' ) ;
273323 setLogs ( error , 'error' , true ) ;
324+ setIsDisconnected ( true ) ;
274325 } ) ;
275326 } ;
276327
@@ -494,6 +545,10 @@ const Simulator = ({
494545 </ ClickAwayListener >
495546 ) ;
496547
548+ const disconnectionBanner = isDisconnected && ! isPreviewMessage && (
549+ < div className = { styles . DisconnectedBanner } > Simulator connection lost. Try to reload.</ div >
550+ ) ;
551+
497552 const simulator = (
498553 < Draggable nodeRef = { nodeRef } >
499554 < div ref = { nodeRef } data-testid = "simulator-container" className = { styles . SimContainer } >
@@ -532,6 +587,8 @@ const Simulator = ({
532587 < MoreVertIcon />
533588 </ div >
534589 </ div >
590+ { disconnectionBanner }
591+
535592 < div className = { styles . Messages } ref = { messageRef } data-testid = "simulatedMessages" >
536593 { simulatedMessages }
537594 </ div >
@@ -549,7 +606,7 @@ const Simulator = ({
549606 } }
550607 value = { inputMessage }
551608 placeholder = "Type a message"
552- disabled = { isPreviewMessage }
609+ disabled = { isPreviewMessage || isDisconnected }
553610 onChange = { ( event ) => setInputMessage ( event . target . value ) }
554611 />
555612 < AttachFileIcon
@@ -564,7 +621,7 @@ const Simulator = ({
564621 < Button
565622 variant = "contained"
566623 className = { styles . SendButton }
567- disabled = { isPreviewMessage }
624+ disabled = { isPreviewMessage || isDisconnected }
568625 onClick = { ( ) => sendMessage ( sender ) }
569626 >
570627 < MicIcon />
@@ -607,6 +664,11 @@ const Simulator = ({
607664 id : searchData . search [ 0 ] . contact . id ,
608665 } ) ;
609666 }
667+ } )
668+ . catch ( ( error ) => {
669+ setLogs ( 'SIMULATOR_SEARCH_QUERY error' , 'error' , true ) ;
670+ setLogs ( error , 'error' , true ) ;
671+ setIsDisconnected ( true ) ;
610672 } ) ;
611673 } else {
612674 setNotification (
@@ -615,10 +677,14 @@ const Simulator = ({
615677 ) ;
616678 }
617679 } )
618- . catch ( ( ) => {
680+ . catch ( ( error ) => {
619681 setNotification ( 'Sorry! Failed to get simulator' , 'warning' ) ;
682+ setLogs ( 'GET_SIMULATOR error' , 'error' , true ) ;
683+ setLogs ( error , 'error' , true ) ;
684+ setIsDisconnected ( true ) ;
620685 } ) ;
621686 } ;
687+
622688 return isPreviewMessage ? (
623689 simulator
624690 ) : simulatorId ? (
0 commit comments