Skip to content

Commit 3a0d997

Browse files
admin amber
1 parent 14e2945 commit 3a0d997

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

backend/controllers/admin.users.controller.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,16 @@ export const listUsers = async (req, res) => {
5454
query.isBlacklisted = true;
5555
} else if (filter === "active") {
5656
query.isBlacklisted = { $ne: true };
57+
} else if (filter === "admin") {
58+
query.isAdmin = true;
5759
}
5860

5961
const [users, total] = await Promise.all([
6062
withQueryTimeout(
6163
User.find(query)
62-
.select("name email phone profilePicture isBlacklisted createdAt")
64+
.select(
65+
"name email phone profilePicture isBlacklisted isAdmin createdAt",
66+
)
6367
.sort(sort)
6468
.skip(skip)
6569
.limit(limit)

frontend/src/pages/AdminUserManagement.jsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function AdminUserManagement() {
3535
const [users, setUsers] = useState([]);
3636
const [searchInput, setSearchInput] = useState('');
3737
const [search, setSearch] = useState('');
38-
const [filter, setFilter] = useState(''); // '' | 'active' | 'blacklisted'
38+
const [filter, setFilter] = useState(''); // '' | 'active' | 'blacklisted' | 'admin'
3939
const [sortBy, setSortBy] = useState('newest'); // 'newest' | 'oldest' | 'name_asc' | 'name_desc'
4040
const [page, setPage] = useState(1);
4141
const [meta, setMeta] = useState({ total: 0, totalPages: 1, hasNext: false, hasPrev: false });
@@ -209,6 +209,7 @@ function AdminUserManagement() {
209209
{ label: 'All', value: '' },
210210
{ label: 'Active', value: 'active' },
211211
{ label: 'Blacklisted', value: 'blacklisted' },
212+
{ label: 'Admins', value: 'admin' },
212213
].map(opt => (
213214
<button
214215
key={opt.value}
@@ -219,6 +220,8 @@ function AdminUserManagement() {
219220
? 'bg-red-600 text-white'
220221
: opt.value === 'active'
221222
? 'bg-green-600 text-white'
223+
: opt.value === 'admin'
224+
? 'bg-amber-500 text-white'
222225
: 'bg-gray-900 text-white'
223226
: 'bg-gray-100 text-gray-600 hover:bg-gray-200'
224227
}`}
@@ -255,9 +258,11 @@ function AdminUserManagement() {
255258
)}
256259
{filter && (
257260
<span className={`inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded-full ${
258-
filter === 'blacklisted' ? 'bg-red-100 text-red-700' : 'bg-green-100 text-green-700'
261+
filter === 'blacklisted' ? 'bg-red-100 text-red-700'
262+
: filter === 'admin' ? 'bg-amber-100 text-amber-700'
263+
: 'bg-green-100 text-green-700'
259264
}`}>
260-
{filter === 'blacklisted' ? 'Blacklisted only' : 'Active only'}
265+
{filter === 'blacklisted' ? 'Blacklisted only' : filter === 'admin' ? 'Admins only' : 'Active only'}
261266
<button onClick={() => { setFilter(''); setPage(1); }} className="ml-1 hover:opacity-70"></button>
262267
</span>
263268
)}
@@ -296,7 +301,11 @@ function AdminUserManagement() {
296301
<div
297302
key={user._id}
298303
className={`border rounded-lg p-4 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 transition-shadow hover:shadow-sm ${
299-
user.isBlacklisted ? 'border-red-200 bg-red-50' : 'border-gray-200'
304+
user.isBlacklisted
305+
? 'border-red-200 bg-red-50'
306+
: user.isAdmin
307+
? 'border-amber-300 bg-amber-50'
308+
: 'border-gray-200 bg-white'
300309
}`}
301310
>
302311
{/* User Info */}
@@ -316,6 +325,11 @@ function AdminUserManagement() {
316325
<div>
317326
<div className="flex items-center gap-2 flex-wrap">
318327
<span className="font-semibold text-gray-900">{user.name}</span>
328+
{user.isAdmin && (
329+
<span className="px-2 py-0.5 bg-amber-100 text-amber-700 text-xs font-semibold rounded-full flex items-center gap-1">
330+
<Shield size={11} /> Admin
331+
</span>
332+
)}
319333
{user.isBlacklisted && (
320334
<span className="px-2 py-0.5 bg-red-100 text-red-700 text-xs font-semibold rounded-full flex items-center gap-1">
321335
<Ban size={11} /> Blacklisted

frontend/tailwind.config.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/** @type {import('tailwindcss').Config} */
22
export default {
33
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
4-
darkMode: false,
54
theme: {
65
extend: {},
76
},

0 commit comments

Comments
 (0)