Просмотр исходного кода

[ide-react] Avoid showing disconnected message if leaving page (#16263)

GitOrigin-RevId: bda7ed207a66b0f051d284cd9b31a20b2c93edca
Alf Eaton 2 лет назад
Родитель
Сommit
56d70a18ae

+ 6 - 0
services/web/frontend/js/features/ide-react/connection/connection-manager.ts

@@ -41,6 +41,7 @@ export class ConnectionManager extends Emitter<Events> {
   private readonly idleDisconnectInterval: number
   private readonly idleDisconnectInterval: number
   private reconnectCountdownInterval = 0
   private reconnectCountdownInterval = 0
   readonly socket: Socket
   readonly socket: Socket
+  private userIsLeavingPage = false
 
 
   constructor() {
   constructor() {
     super()
     super()
@@ -51,6 +52,9 @@ export class ConnectionManager extends Emitter<Events> {
     }, ONE_HOUR_IN_MS)
     }, ONE_HOUR_IN_MS)
 
 
     window.addEventListener('online', () => this.onOnline())
     window.addEventListener('online', () => this.onOnline())
+    window.addEventListener('beforeunload', () => {
+      this.userIsLeavingPage = true
+    })
 
 
     const socket = SocketIoShim.connect('', {
     const socket = SocketIoShim.connect('', {
       'auto connect': false,
       'auto connect': false,
@@ -85,6 +89,7 @@ export class ConnectionManager extends Emitter<Events> {
   // Called when document is clicked or the editor cursor changes
   // Called when document is clicked or the editor cursor changes
   registerUserActivity() {
   registerUserActivity() {
     this.lastUserActivity = performance.now()
     this.lastUserActivity = performance.now()
+    this.userIsLeavingPage = false
     this.ensureIsConnected()
     this.ensureIsConnected()
   }
   }
 
 
@@ -273,6 +278,7 @@ export class ConnectionManager extends Emitter<Events> {
   }
   }
 
 
   private startAutoReconnectCountdown(backoff: number) {
   private startAutoReconnectCountdown(backoff: number) {
+    if (this.userIsLeavingPage) return
     if (!this.canReconnect()) return
     if (!this.canReconnect()) return
     let countdown
     let countdown
     if (this.isUserInactiveSince(TWO_MINUTES_IN_MS)) {
     if (this.isUserInactiveSince(TWO_MINUTES_IN_MS)) {