1- "use client" ;
1+ "use client" ;
22
33import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
44import { createClient } from "../lib/supabase/client" ;
55import Link from "next/link" ;
66import { useState } from "react" ;
7- import { faKey , faRefresh , faTrash } from "@fortawesome/free-solid-svg-icons" ;
7+ import { faKey , faRotateRight , faTrashAlt , faChevronRight , faServer } from "@fortawesome/free-solid-svg-icons" ;
88import { toast } from "react-toastify" ;
99import { Leaderboard } from "./dashboard/LeaderbordList" ;
1010import { User } from "@supabase/supabase-js" ;
@@ -18,7 +18,7 @@ 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 ) ;
2222 const [ showDeleteModal , setShowDeleteModal ] = useState ( false ) ;
2323
2424 const handleDelete = async ( ) => {
@@ -88,7 +88,7 @@ export default function BoardList({
8888 error : {
8989 render ( { data } ) {
9090 const err = data as Error ;
91- return err ?. message || "Failed to get join code. Please try again." ;
91+ return err ?. message || "Failed to get join code. Please try again." ;
9292 } ,
9393 } ,
9494 } ) ;
@@ -101,91 +101,106 @@ export default function BoardList({
101101
102102 return (
103103 < >
104- < div
105- key = { board . id }
106- className = "stat-card flex justify-between items-center group"
107- >
108- < Link href = { `/leaderboard/${ board . slug } ` } className = "flex-1" >
109- < p className = "font-medium text-gray-300 group-hover:text-indigo-400 transition" >
110- { board . name }
111- </ p >
104+ < div className = "flex justify-between items-center group/card p-4 sm:p-5" >
105+ < Link href = { `/leaderboard/${ board . slug } ` } className = "flex-1 flex items-center min-w-0 pr-4" >
106+ < div className = "w-10 h-10 rounded-lg bg-gradient-to-br from-white/5 to-white/10 border border-white/10 flex items-center justify-center shrink-0 mr-4 shadow-sm group-hover/card:border-indigo-500/30 transition-colors" >
107+ < FontAwesomeIcon icon = { faServer } className = "text-gray-400 group-hover/card:text-indigo-400 transition-colors w-4 h-4" />
108+ </ div >
109+ < div className = "flex flex-col flex-1 min-w-0" >
110+ < div className = "flex items-center gap-2" >
111+ < p className = "font-bold text-gray-200 group-hover/card:text-white transition-colors tracking-tight truncate text-[15px]" >
112+ { board . name }
113+ </ p >
114+ </ div >
115+ < p className = "text-[11px] text-gray-500 font-mono tracking-wider truncate mt-0.5 group-hover/card:text-indigo-300/70 transition-colors" >
116+ /{ board . slug }
117+ </ p >
118+ </ div >
119+
120+ < div className = "hidden sm:flex w-8 h-8 rounded-full border border-white/5 bg-white/5 items-center justify-center opacity-0 -translate-x-4 group-hover/card:opacity-100 group-hover/card:translate-x-0 transition-all duration-300 ml-4" >
121+ < FontAwesomeIcon icon = { faChevronRight } className = "text-indigo-400 w-3 h-3" />
122+ </ div >
112123 </ Link >
113124
114125 { user . id === board . owner_id && (
115- < div className = "flex items-center gap-2 " >
126+ < div className = "flex items-center gap-1 sm:gap-2 ml-2 pl-4 border-l border-white/10 shrink-0 " >
116127 < button
117- onClick = { ( ) => setShowDeleteModal ( true ) }
118- className = "p-2 rounded-lg text-gray-600 hover:text-red -400 hover:bg-red -500/10 transition"
119- title = "Delete Leaderboard "
128+ onClick = { ( ) => getJoinCode ( board . id ) }
129+ className = "w-8 h-8 flex items-center justify-center rounded-md text-gray-500 hover:text-indigo -400 hover:bg-indigo -500/10 transition-colors "
130+ title = "View Join Code "
120131 >
121- < FontAwesomeIcon icon = { faTrash } className = "text-xs " />
132+ < FontAwesomeIcon icon = { faKey } className = "w-3.5 h-3.5 " />
122133 </ button >
123134 < button
124135 onClick = { ( ) => regenerateJoinCode ( board . id ) }
125- className = "p-2 rounded-lg text-gray-600 hover:text-indigo -400 hover:bg-indigo -500/10 transition"
136+ className = "w-8 h-8 flex items-center justify-center rounded-md text-gray-500 hover:text-blue -400 hover:bg-blue -500/10 transition-colors "
126137 title = "Regenerate Join Code"
127138 >
128- < FontAwesomeIcon icon = { faRefresh } className = "text-xs " />
139+ < FontAwesomeIcon icon = { faRotateRight } className = "w-3.5 h-3.5 " />
129140 </ button >
130141 < button
131- onClick = { ( ) => getJoinCode ( board . id ) }
132- className = "p-2 rounded-lg text-gray-600 hover:text-indigo -400 hover:bg-indigo -500/10 transition"
133- title = "View Join Code "
142+ onClick = { ( ) => setShowDeleteModal ( true ) }
143+ className = "w-8 h-8 flex items-center justify-center rounded-md text-gray-500 hover:text-red -400 hover:bg-red -500/10 transition-colors "
144+ title = "Delete Leaderboard "
134145 >
135- < FontAwesomeIcon icon = { faKey } className = "text-xs " />
146+ < FontAwesomeIcon icon = { faTrashAlt } className = "w-3.5 h-3.5 " />
136147 </ button >
137148 </ div >
138149 ) }
139150 </ div >
140151
141152 { showCodeModal && (
142- < div className = "fixed inset-0 z-50 flex items-center justify-center backdrop-blur-sm" >
143- < div className = "glass-card p-8 w-[90%] max-w-md" >
144- < h3 className = "text-lg font-semibold mb-4 text-gray-200" >
145- Join Code
153+ < div className = "fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-md p-4" >
154+ < div className = "glass-card p-8 w-full max-w-sm relative shadow-2xl border-indigo-500/20" >
155+ < div className = "absolute -top-10 -right-10 w-32 h-32 bg-indigo-500/20 rounded-full blur-3xl" />
156+
157+ < 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
146159 </ h3 >
147-
148- < div className = "text-center text-3xl font-bold tracking-widest text-indigo-400 mb-6 py-4 stat-card" >
149- { selectedCode }
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" >
169+ < button
170+ onClick = { ( ) => setShowCodeModal ( false ) }
171+ 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"
172+ >
173+ Close Window
174+ </ button >
150175 </ div >
151-
152- < button
153- onClick = { ( ) => setShowCodeModal ( false ) }
154- className = "btn-secondary w-full py-2.5"
155- >
156- Close
157- </ button >
158176 </ div >
159177 </ div >
160178 ) }
161179
162180 { showDeleteModal && (
163- < div className = "fixed inset-0 z-50 flex items-center justify-center backdrop-blur-sm" >
164- < div className = "glass-card p-8 w-[90%] max-w-md" >
165- < h3 className = "text-lg font-semibold mb-4 text-gray-200" >
166- Delete Leaderboard?
181+ < div className = "fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-md p-4" >
182+ < div className = "glass-card p-8 w-full max-w-sm relative shadow-2xl border-red-500/20" >
183+ < div className = "absolute -top-10 -right-10 w-32 h-32 bg-red-500/20 rounded-full blur-3xl" />
184+
185+ < h3 className = "text-lg font-bold text-gray-200 mb-2" >
186+ Delete Network
167187 </ h3 >
168-
169- < div className = "text-center text-xl font-bold text-indigo-400 mb-4 py-3 stat-card" >
170- { board . name }
171- </ div >
172-
173- < p className = "text-red-400/80 text-sm italic mb-6 text-center" >
174- This action is irreversible.
188+ < p className = "text-sm text-gray-400 mb-6 leading-relaxed" >
189+ Are you sure you want to delete < span className = "font-mono text-gray-300 bg-white/5 px-1 rounded" > { board . name } </ span > ? This action cannot be undone.
175190 </ p >
176-
191+
177192 < div className = "flex gap-3" >
178193 < button
179194 onClick = { ( ) => setShowDeleteModal ( false ) }
180- className = "btn-secondary w-full py-2.5"
195+ className = "flex-1 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 "
181196 >
182197 Cancel
183198 </ button >
184199 < button
185- onClick = { ( ) => handleDelete ( ) }
186- className = "w-full py-2.5 rounded-xl font-semibold bg-red-500/20 border border-red-500/30 text-red-400 hover:bg-red-500/30 transition"
200+ onClick = { handleDelete }
201+ className = "flex-1 py-2.5 px-4 bg-red-500/10 hover: bg-red-500/20 border border-red-500/30 text-red-500 rounded-lg text-sm font-bold transition-colors "
187202 >
188- Delete
203+ Confirm Delete
189204 </ button >
190205 </ div >
191206 </ div >
0 commit comments