1
+ import React , { useState , useEffect } from "react" ;
2
+ import Nav from "@/components/nav" ;
3
+ import { getPubInfo } from "@/utils/login" ;
4
+ import {
5
+ Avatar ,
6
+ AvatarFallback ,
7
+ AvatarImage ,
8
+ } from "@/components/ui/avatar" ;
9
+ import {
10
+ Card ,
11
+ CardContent ,
12
+ CardDescription ,
13
+ CardFooter ,
14
+ CardHeader ,
15
+ CardTitle ,
16
+ } from "@/components/ui/card" ;
17
+
18
+ import { dateParse } from "@/utils/jsutils" ;
19
+
20
+ export default function Profile ( ) {
21
+ const urlData = new URL ( "https://" + window . location . hash . replace ( "#" , "q/s" ) )
22
+ console . log ( urlData )
23
+ if ( ! urlData . searchParams . get ( "user" ) ) {
24
+ return (
25
+ < main >
26
+ < nav />
27
+ < div className = "flex flex-col items-center" >
28
+ < div className = "felx flex-row items-center justify-center" >
29
+ < h1 > Username required</ h1 >
30
+ </ div >
31
+ </ div >
32
+ </ main >
33
+ ) ;
34
+ }
35
+
36
+ const [ user , setUser ] = useState ( false ) ;
37
+
38
+ useEffect ( ( ) => {
39
+ const fetchUser = async ( ) => {
40
+ const data = await getPubInfo ( urlData . searchParams . get ( "user" ) ) ;
41
+ setUser ( data ) ;
42
+ } ;
43
+ fetchUser ( ) ;
44
+ } , [ ] ) ;
45
+
46
+
47
+ if ( user && ! user . error ) {
48
+ return (
49
+ < main >
50
+ < Nav />
51
+ < div className = "flex flex-col items-center" >
52
+ < div className = "felx flex-row items-center justify-center p-5" >
53
+ < h1 className = "text-3xl font-bold text-center" > Profile</ h1 >
54
+ < Card >
55
+ < CardHeader >
56
+ < CardTitle > { user . account . username } </ CardTitle >
57
+ </ CardHeader >
58
+ < CardContent >
59
+ < div className = "flex items-center space-x-4" >
60
+ < Avatar >
61
+ < AvatarImage src = { user . image } />
62
+ < AvatarFallback > VC</ AvatarFallback >
63
+ </ Avatar >
64
+ < div className = "space-y-2" >
65
+ < p > Joined: { dateParse ( user . account . created_at ) } </ p >
66
+ < p > XP: { user . account . xp } </ p >
67
+ </ div >
68
+ </ div >
69
+ < p > Level: { user . account . level } </ p >
70
+ </ CardContent >
71
+ < CardFooter >
72
+ < p > More stats coming soon</ p >
73
+ </ CardFooter >
74
+ </ Card >
75
+
76
+ </ div >
77
+ </ div >
78
+ </ main >
79
+ ) ;
80
+ } else if ( user . error ) {
81
+ return (
82
+ < p > not found</ p >
83
+ )
84
+ } else {
85
+ return (
86
+ < main >
87
+ < h1 className = "m-5 text-3xl font-bold text-center" > Loading...</ h1 >
88
+ < p className = "font-symbol text-center text-6xl animate-spin" > </ p >
89
+ </ main >
90
+ ) ;
91
+ }
92
+ }
0 commit comments