Skip to content

Commit 86c9086

Browse files
Some isues in the login is fixed, add superadmin access, admin dashboard issues fixed
1 parent bf991e6 commit 86c9086

9 files changed

Lines changed: 845 additions & 13 deletions

File tree

app/admin/layout.tsx

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
'use client';
2+
3+
import React, { ReactNode, useEffect, useState } from 'react';
4+
import { useRouter } from 'next/navigation';
5+
import { onAuthStateChanged } from '@/lib/firebase/auth';
6+
import { doc, getDoc } from 'firebase/firestore';
7+
import { firestore } from '@/lib/firebase/config';
8+
9+
interface AdminLayoutProps {
10+
children: ReactNode;
11+
}
12+
13+
const AdminLayout: React.FC<AdminLayoutProps> = ({ children }) => {
14+
const [loading, setLoading] = useState(true);
15+
const [isAuthenticated, setIsAuthenticated] = useState(false);
16+
const [userRole, setUserRole] = useState<string | null>(null);
17+
const router = useRouter();
18+
19+
useEffect(() => {
20+
const checkAuth = async () => {
21+
const unsubscribe = onAuthStateChanged(async (authUser) => {
22+
if (authUser) {
23+
const userDocRef = doc(firestore, 'adminemail', authUser.email as string);
24+
const userDoc = await getDoc(userDocRef);
25+
26+
if (userDoc.exists()) {
27+
const role = userDoc.data()?.role;
28+
if (role === 'admin' || role === 'superadmin') {
29+
setIsAuthenticated(true);
30+
setUserRole(role);
31+
} else {
32+
setIsAuthenticated(false);
33+
router.push('/auth/Login');
34+
}
35+
} else {
36+
setIsAuthenticated(false);
37+
router.push('/auth/Login');
38+
}
39+
} else {
40+
setIsAuthenticated(false);
41+
router.push('/auth/Login');
42+
}
43+
setLoading(false);
44+
});
45+
46+
return () => unsubscribe();
47+
};
48+
49+
checkAuth();
50+
}, [router]);
51+
52+
if (loading) {
53+
return <div>Loading...</div>;
54+
}
55+
56+
if (!isAuthenticated) {
57+
return null;
58+
}
59+
60+
return (
61+
<div className="flex flex-col h-screen">
62+
<div className="flex flex-1">
63+
<main className="flex-1 overflow-auto">
64+
<div className="flex-1 p-4 overflow-auto">
65+
{children}
66+
</div>
67+
</main>
68+
</div>
69+
</div>
70+
);
71+
};
72+
73+
export default AdminLayout;

app/admin/super-admin/page.tsx

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
"use client";
2+
3+
import React, { useEffect, useState } from "react";
4+
import { firestore, auth } from "@/lib/firebase/config";
5+
import {
6+
collection,
7+
doc,
8+
getDoc,
9+
setDoc,
10+
deleteDoc,
11+
getDocs,
12+
Timestamp,
13+
} from "firebase/firestore";
14+
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
15+
import { AddAdmin, AdminList, RemoveAdmin, RemovedAdminsList } from "@/components/admin-components";
16+
17+
export default function AdminPanel() {
18+
const [userRole, setUserRole] = useState<string | null>(null);
19+
const [loading, setLoading] = useState(true);
20+
21+
useEffect(() => {
22+
const fetchRole = async () => {
23+
const user = auth.currentUser;
24+
if (!user?.email) {
25+
setUserRole(null);
26+
setLoading(false);
27+
return;
28+
}
29+
30+
const docRef = doc(firestore, "adminemail", user.email);
31+
const docSnap = await getDoc(docRef);
32+
33+
if (docSnap.exists()) {
34+
setUserRole(docSnap.data().role);
35+
} else {
36+
setUserRole(null);
37+
}
38+
setLoading(false);
39+
};
40+
41+
fetchRole();
42+
}, []);
43+
44+
if (loading) return <div className="p-6">Loading...</div>;
45+
46+
if (userRole !== "superadmin") {
47+
return (
48+
<div className="p-6 text-red-600 font-semibold">
49+
You are not authorized to access this page.
50+
</div>
51+
);
52+
}
53+
54+
return (
55+
<div className="p-6">
56+
<h1 className="text-2xl font-bold mb-6">Admin Panel</h1>
57+
<Tabs defaultValue="add">
58+
<TabsList className="mb-4">
59+
<TabsTrigger value="add">Add Admin</TabsTrigger>
60+
<TabsTrigger value="list">List Admins</TabsTrigger>
61+
<TabsTrigger value="remove">Remove Admin</TabsTrigger>
62+
</TabsList>
63+
<TabsContent value="add">
64+
<AddAdmin />
65+
</TabsContent>
66+
<TabsContent value="list">
67+
<AdminList />
68+
</TabsContent>
69+
<TabsContent value="remove">
70+
<RemoveAdmin />
71+
</TabsContent>
72+
</Tabs>
73+
</div>
74+
);
75+
}

0 commit comments

Comments
 (0)