diff --git a/src/client/JoinPrivateLobbyModal.ts b/src/client/JoinPrivateLobbyModal.ts index 1b631be87..1c875a7e7 100644 --- a/src/client/JoinPrivateLobbyModal.ts +++ b/src/client/JoinPrivateLobbyModal.ts @@ -135,14 +135,25 @@ export class JoinPrivateLobbyModal extends LitElement { ); } - private setLobbyId(id: string) { - if (id.startsWith("http")) { - this.lobbyIdInput.value = id.split("join/")[1]; + private extractLobbyIdFromUrl(input: string): string { + if (input.startsWith("http")) { + if (input.includes("#join=")) { + const params = new URLSearchParams(input.split("#")[1]); + return params.get("join") ?? input; + } else if (input.includes("join/")) { + return input.split("join/")[1]; + } else { + return input; + } } else { - this.lobbyIdInput.value = id; + return input; } } + private setLobbyId(id: string) { + this.lobbyIdInput.value = this.extractLobbyIdFromUrl(id); + } + private handleChange(e: Event) { const value = (e.target as HTMLInputElement).value.trim(); this.setLobbyId(value); @@ -151,15 +162,7 @@ export class JoinPrivateLobbyModal extends LitElement { private async pasteFromClipboard() { try { const clipText = await navigator.clipboard.readText(); - - let lobbyId: string; - if (clipText.startsWith("http")) { - lobbyId = clipText.split("join/")[1]; - } else { - lobbyId = clipText; - } - - this.lobbyIdInput.value = lobbyId; + this.setLobbyId(clipText); } catch (err) { console.error("Failed to read clipboard contents: ", err); }