@@ -6,7 +6,8 @@ import { Navbar } from "@/app/_components/navbar"
66import { orpc } from "@/utils/orpc"
77import { useQuery } from "@tanstack/react-query"
88import { cn } from "@workspace/ui/lib/utils"
9- import { useState } from "react"
9+ import { useRouter } from "next/navigation"
10+ import { useState , useEffect } from "react"
1011
1112const BACKGROUND_CLASS =
1213 "bg-[url(/static/background-image/my-team/xs.webp)] md:bg-[url(/static/background-image/my-team/md.webp)] lg:bg-[url(/static/background-image/my-team/lg.webp)] 2xl:bg-[url(/static/background-image/my-team/2xl.webp)] bg-cover bg-center bg-no-repeat bg-scroll bg-black"
@@ -15,9 +16,69 @@ type MemberType = "adviser" | "member1" | "member2" | "member3"
1516
1617function CertPage ( ) {
1718 const [ selectedMember , setSelectedMember ] = useState < MemberType | null > ( null )
19+ const router = useRouter ( )
1820 const query = useQuery ( orpc . register . all . get . queryOptions ( ) )
21+ const statusQuery = useQuery ( orpc . register . status . get . queryOptions ( ) )
1922
20- if ( query . isPending ) {
23+ useEffect ( ( ) => {
24+ if ( query . data && statusQuery . data ) {
25+ if ( ! query . data . team ) {
26+ router . push ( "/teams" )
27+ return
28+ }
29+
30+ if ( ! statusQuery . data . registerStatus ?. submitRegister ) {
31+ router . push ( "/teams" )
32+ return
33+ }
34+
35+ if ( query . data . team . award === "NONE" ) {
36+ router . push ( "/teams" )
37+ return
38+ }
39+ }
40+ } , [ query . data , statusQuery . data , router ] )
41+
42+ if ( query . data && statusQuery . data ) {
43+ if (
44+ ! query . data . team ||
45+ ! statusQuery . data . registerStatus ?. submitRegister ||
46+ query . data . team . award === "NONE"
47+ ) {
48+ return (
49+ < div
50+ className = { cn ( "flex min-h-screen w-full flex-col items-center justify-center" , BACKGROUND_CLASS ) } >
51+ < div className = "flex flex-col items-center gap-3" >
52+ < div className = "size-8 animate-spin rounded-full border-4 border-white/30 border-t-white" />
53+ < p className = "text-[1rem] text-white opacity-70" > กำลังเปลี่ยนหน้า...</ p >
54+ </ div >
55+ </ div >
56+ )
57+ }
58+ }
59+
60+ if ( query . isError || statusQuery . isError ) {
61+ return (
62+ < div className = { cn ( "flex min-h-screen w-full flex-col items-center" , BACKGROUND_CLASS ) } >
63+ < Navbar links = { TeamNavMobileLinks } CTAId = { "regis" } sections = { [ ] } />
64+ < div className = "flex w-full flex-1 items-center justify-center" >
65+ < div className = "flex flex-col items-center gap-3" >
66+ < p className = "text-[1rem] text-red-400" > เกิดข้อผิดพลาดในการโหลดข้อมูล</ p >
67+ < button
68+ onClick = { ( ) => {
69+ query . refetch ( )
70+ statusQuery . refetch ( )
71+ } }
72+ className = "mt-4 rounded-lg bg-white/20 px-6 py-2 text-white hover:bg-white/30" >
73+ ลองใหม่อีกครั้ง
74+ </ button >
75+ </ div >
76+ </ div >
77+ </ div >
78+ )
79+ }
80+
81+ if ( query . isPending || statusQuery . isPending ) {
2182 return (
2283 < div className = { cn ( "flex min-h-screen w-full flex-col items-center" , BACKGROUND_CLASS ) } >
2384 < Navbar links = { TeamNavMobileLinks } CTAId = { "regis" } sections = { [ ] } />
0 commit comments