Fix disconnexion => remove challenges in main Hall
[vchess.git] / client / src / views / Hall.vue
index fd4bd2d..ee8d53e 100644 (file)
@@ -186,13 +186,13 @@ main
         GameList(
           v-show="gdisplay=='live'"
           :games="filterGames('live')"
-          :showBoth="true"
+          :show-both="true"
           @show-game="showGame"
         )
         div(v-show="gdisplay=='corr'")
           GameList(
             :games="filterGames('corr')"
-            :showBoth="true"
+            :show-both="true"
             @show-game="showGame"
           )
           button#loadMoreBtn(
@@ -681,12 +681,19 @@ export default {
             this.$delete(this.people, data.from[0]);
           else this.$forceUpdate(); //TODO: shouldn't be required
           if (data.code == "disconnect") {
-            // Remove the live challenges sent by this player:
-            ArrayFun.remove(
-              this.challenges,
-              c => c.type == "live" && c.from.sid == data.from[0],
-              "all"
-            );
+            // Remove the live challenges sent by this player, if
+            // he isn't connected on another tab:
+            if (
+              !this.people[data.from[0]] ||
+              Object.values(this.people[data.from[0]].tmpIds)
+                .every(v => v.page != "/")
+            ) {
+              ArrayFun.remove(
+                this.challenges,
+                c => c.type == "live" && c.from.sid == data.from[0],
+                "all"
+              );
+            }
           } else {
             // Remove the matching live game if now unreachable
             const gid = data.page.match(/[a-zA-Z0-9]+$/)[0];
@@ -1182,10 +1189,13 @@ export default {
     // NOTE: when launching game, the challenge is already being deleted
     launchGame: function(c) {
       // White player index 0, black player index 1:
-      const players =
+      let players =
         !!c.mycolor
           ? (c.mycolor == "w" ? [c.seat, c.from] : [c.from, c.seat])
           : shuffle([c.from, c.seat]);
+      players.forEach(p => {
+        if (!!p["tmpIds"]) delete p["tmpIds"];
+      });
       // These game informations will be shared
       let gameInfo = {
         id: getRandString(),