/** * InviteDialog — input player name, copy invite link */ import { Component, createSignal } from "solid-js"; import { useJournalStream } from "../stores/journalStream"; interface InviteDialogProps { onClose: () => void; } export const InviteDialog: Component = (props) => { const stream = useJournalStream(); const [playerName, setPlayerName] = createSignal(""); const [copied, setCopied] = createSignal(false); const inviteLink = () => { const url = new URL(window.location.href); url.searchParams.set("session", stream.sessionId || "default"); if (playerName().trim()) { url.searchParams.set("player", playerName().trim()); } url.searchParams.set("autojoin", "1"); return url.toString(); }; const handleCopy = async () => { try { await navigator.clipboard.writeText(inviteLink()); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch { const input = document.getElementById( "invite-link-input", ) as HTMLInputElement; if (input) input.select(); } }; return (
e.stopPropagation()} >

邀请玩家

输入玩家名字并分享链接,对方将以玩家身份加入。

setPlayerName(e.currentTarget.value)} placeholder="玩家名字" class="w-full border border-gray-300 rounded px-2 py-1 text-xs" autofocus />
); };