11import React , { useState , useEffect , useCallback } from 'react' ;
2- import { createFileRoute } from '@tanstack/react-router' ;
2+ import { createFileRoute , useParams , Navigate } from '@tanstack/react-router' ;
33import axios from 'axios' ;
44import {
55 Trash2 , Pencil , Users , UserPlus , Trophy , Mail , CheckCircle , History , RefreshCw
66} from 'lucide-react' ;
7- import { useParams } from '@tanstack/react-router'
87
9- const emailRegex = / ^ f \d { 8 } @ h y d e r a b a d \. b i t s - p i l a n i \. a c \. i n $ / ;
8+ import { useAuth } from "../../../context/AuthContext.tsx" ;
9+
1010interface GroupMember {
1111 email : string ;
1212 participantId : number ;
@@ -25,13 +25,29 @@ interface PastContest {
2525 duration : string ;
2626}
2727
28+ const emailRegex = / ^ f \d { 8 } @ h y d e r a b a d \. b i t s - p i l a n i \. a c \. i n $ / ;
2829const scrollbar = "[&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:bg-slate-700 [&::-webkit-scrollbar-thumb]:rounded-full" ;
2930
3031export const Route = createFileRoute ( '/events/$slug/admin' ) ( {
3132 component : AdminEventsComponent ,
3233} ) ;
3334
3435function AdminEventsComponent ( ) {
36+ const { user, loading } = useAuth ( ) ;
37+
38+ if ( loading ) {
39+ return (
40+ < div className = "min-h-screen flex items-center justify-center bg-slate-900 text-slate-300" >
41+ Loading admin dashboard...
42+ </ div >
43+ ) ;
44+ }
45+
46+ // Kick out non crux guys
47+ if ( ! user || ! user . isCruxMember ) {
48+ return < Navigate to = "/events" replace /> ;
49+ }
50+
3551 const [ contestId , setContestId ] = useState ( '' ) ;
3652 const [ isContestSaved , setIsContestSaved ] = useState ( false ) ;
3753
0 commit comments