From 3e7088cb2a2b52a78b5e1e316746edf949cc67d9 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 17 Mar 2026 19:20:13 -0700 Subject: [PATCH] Close join error (#3454) ## Description: When joining a game after it fills up, the server rejects the player join and the player leaves the lobby, but the join modal stays up. ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: evan --- src/client/ClientGameRunner.ts | 2 +- src/client/Main.ts | 17 ++++++++++++++++- src/client/components/BaseModal.ts | 4 ++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index 0e2eb960c..5ff162c5f 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -166,7 +166,7 @@ export function joinLobby( if (message.error === "full-lobby") { document.dispatchEvent( new CustomEvent("leave-lobby", { - detail: { lobby: lobbyConfig.gameID }, + detail: { lobby: lobbyConfig.gameID, cause: "full-lobby" }, bubbles: true, composed: true, }), diff --git a/src/client/Main.ts b/src/client/Main.ts index 1241fe060..837887c7a 100644 --- a/src/client/Main.ts +++ b/src/client/Main.ts @@ -866,7 +866,7 @@ class Client { } } - private async handleLeaveLobby(/* event: CustomEvent */) { + private async handleLeaveLobby(event?: CustomEvent) { if (this.lobbyHandle === null) { return; } @@ -883,6 +883,21 @@ class Client { document.body.classList.remove("in-game"); + if (this.joinModal.isOpen()) { + this.joinModal.close(); + if (event?.detail.cause === "full-lobby") { + window.dispatchEvent( + new CustomEvent("show-message", { + detail: { + message: translateText("public_lobby.join_timeout"), + color: "red", + duration: 3500, + }, + }), + ); + } + } + crazyGamesSDK.gameplayStop(); } diff --git a/src/client/components/BaseModal.ts b/src/client/components/BaseModal.ts index b73eb9470..c8eff0230 100644 --- a/src/client/components/BaseModal.ts +++ b/src/client/components/BaseModal.ts @@ -35,6 +35,10 @@ export abstract class BaseModal extends LitElement { return this; } + public isOpen(): boolean { + return this.isModalOpen; + } + protected firstUpdated(): void { if (this.modalEl) { this.modalEl.onClose = () => {