1- "use client" ;
1+ "use client" ;
22
33import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
44import { createClient } from "../lib/supabase/client" ;
@@ -18,7 +18,11 @@ export default function BoardList({
1818} ) {
1919 const supabase = createClient ( ) ;
2020 const [ showCodeModal , setShowCodeModal ] = useState ( false ) ;
21- const [ selectedCode , setSelectedCode ] = useState < string | null > ( null ) ;
21+ const [ selectedCode , setSelectedCode ] = useState < string | null > ( null ) ;
22+ const inviteUrl =
23+ typeof window !== "undefined" && selectedCode
24+ ? `${ window . location . origin } /join?id=${ selectedCode } `
25+ : "" ;
2226 const [ showDeleteModal , setShowDeleteModal ] = useState ( false ) ;
2327
2428 const handleDelete = async ( ) => {
@@ -155,22 +159,47 @@ export default function BoardList({
155159 < div className = "absolute -top-10 -right-10 w-32 h-32 bg-indigo-500/20 rounded-full blur-3xl" />
156160
157161 < h3 className = "text-[11px] font-bold tracking-widest uppercase text-indigo-400 mb-6 text-center flex items-center justify-center gap-2" >
158- < FontAwesomeIcon icon = { faKey } /> Server Join Code
162+ < FontAwesomeIcon icon = { faKey } /> Share Server
159163 </ h3 >
160-
161- < div className = "bg-black/50 border border-white/10 rounded-xl p-6 text-center relative overflow-hidden group" >
162- < div className = "absolute inset-0 bg-gradient-to-tr from-indigo-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity" />
163- < p className = "text-3xl font-mono text-white tracking-[0.2em] font-bold relative z-10" >
164- { selectedCode }
165- </ p >
166- </ div >
167-
168- < div className = "mt-8 flex justify-center" >
164+
165+ < div className = "space-y-5" >
166+ < div >
167+ < p className = "text-[11px] uppercase tracking-widest text-gray-400 font-bold mb-2" >
168+ Join Code
169+ </ p >
170+ < div className = "bg-black/50 border border-white/10 rounded-xl p-4 text-center relative overflow-hidden group" >
171+ < div className = "absolute inset-0 bg-gradient-to-tr from-indigo-500/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity" />
172+ < p className = "text-2xl font-mono text-white tracking-[0.2em] font-bold relative z-10" >
173+ { selectedCode }
174+ </ p >
175+ </ div >
176+ </ div >
177+
178+ < div >
179+ < p className = "text-[11px] uppercase tracking-widest text-gray-400 font-bold mb-2" >
180+ Invite URL
181+ </ p >
182+ < div className = "bg-black/50 border border-white/10 rounded-xl px-3 py-2 text-xs text-gray-300 flex items-center gap-2" >
183+ < span className = "flex-1 truncate" > { inviteUrl } </ span >
184+ < button
185+ type = "button"
186+ onClick = { ( ) => {
187+ if ( ! inviteUrl ) return ;
188+ navigator . clipboard . writeText ( inviteUrl ) ;
189+ toast . success ( "Invite link copied" ) ;
190+ } }
191+ className = "px-3 py-1 rounded-lg text-[11px] font-semibold bg-white/5 hover:bg-white/10 border border-white/10 text-gray-200 transition-colors"
192+ >
193+ Copy
194+ </ button >
195+ </ div >
196+ </ div >
197+
169198 < button
170199 onClick = { ( ) => setShowCodeModal ( false ) }
171200 className = "w-full py-2.5 px-4 bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg text-sm font-medium text-gray-300 transition-colors"
172201 >
173- Close Window
202+ Close
174203 </ button >
175204 </ div >
176205 </ div >
0 commit comments