1
+ "use client"
2
+
3
+ import { useState , useEffect } from "react"
4
+ import { User , Code } from "lucide-react"
5
+
6
+ export default function LoadingPage ( ) {
7
+ const [ elapsedTime , setElapsedTime ] = useState ( 0 )
8
+ const [ usersWaiting , setUsersWaiting ] = useState ( 4 )
9
+
10
+ useEffect ( ( ) => {
11
+ const timer = setInterval ( ( ) => {
12
+ setElapsedTime ( ( prevTime ) => prevTime + 1 )
13
+ } , 1000 )
14
+
15
+ return ( ) => clearInterval ( timer )
16
+ } , [ ] )
17
+
18
+ return (
19
+ < div className = "min-h-screen bg-[#1a1f2e] text-gray-300 flex flex-col" >
20
+ < header className = "p-4 flex justify-between items-center border-b border-gray-700" >
21
+ < div className = "flex items-center space-x-2" >
22
+ < Code className = "h-6 w-6" />
23
+ < span className = "text-lg font-semibold" > PeerPrep</ span >
24
+ </ div >
25
+ < User className = "h-6 w-6" />
26
+ </ header >
27
+ < main className = "flex-grow flex flex-col items-center justify-center px-4 space-y-6" >
28
+ < div className = "animate-spin rounded-full h-16 w-16 border-t-4 border-b-4 border-purple-500" > </ div >
29
+ < h1 className = "text-2xl font-bold text-white" > Finding a match</ h1 >
30
+ < p className = "text-sm text-center max-w-md" >
31
+ We're pairing you with another coder. This may take a few moments.
32
+ </ p >
33
+ < div className = "w-full max-w-md space-y-2" >
34
+ < div className = "h-1 bg-gray-700 rounded-full overflow-hidden" >
35
+ < div
36
+ className = "h-full bg-purple-500 rounded-full"
37
+ style = { { width : `${ ( elapsedTime % 60 ) / 60 * 100 } %` } }
38
+ > </ div >
39
+ </ div >
40
+ < div className = "text-sm text-center" >
41
+ Time elapsed: { elapsedTime } seconds
42
+ </ div >
43
+ </ div >
44
+ < div className = "flex items-center space-x-2 text-sm" >
45
+ < User className = "h-4 w-4" />
46
+ < span > { usersWaiting } users waiting</ span >
47
+ </ div >
48
+ < button className = "px-4 py-2 bg-purple-600 text-white rounded-md hover:bg-purple-700 transition-colors w-full max-w-md" >
49
+ Cancel Matching
50
+ </ button >
51
+ < p className = "text-sm text-gray-500 mt-4" >
52
+ Tip: While you wait, why not review some coding concepts?
53
+ </ p >
54
+ </ main >
55
+ </ div >
56
+ )
57
+ }
0 commit comments