'use client';
import { useState, useEffect } from 'react';
import { useParams, useRouter } from 'next/navigation';
import NexusAuthApi from '@lib/Nexus_Auth_API';
import { useToast } from '@lib/ToastContext';
export default function SuperUser() {
const router = useRouter();
const { access_level } = useParams();
const toast = useToast();
const [userDetails, setUserDetails] = useState({
username: null,
userID: null,
token: null,
accessLevel: null,
});
const [users, setUsers] = useState([]);
// Fetch user details from local storage on mount
useEffect(() => {
setUserDetails({
username: localStorage.getItem('me'),
userID: localStorage.getItem('u_id'),
token: localStorage.getItem('s_tkn'),
accessLevel: localStorage.getItem('a_l'),
});
}, []);
const clearLocalStorage = () => {
localStorage.removeItem('me');
localStorage.removeItem('s_tkn');
localStorage.removeItem('u_id');
localStorage.removeItem('a_l');
setUserDetails({
username: null,
userID: null,
token: null,
accessLevel: null,
});
};
const handleLogout = () => {
const { userID, token } = userDetails;
NexusAuthApi.logout(userID, token)
.then(() => {
clearLocalStorage();
window.location.reload();
})
.catch((error) => {
toast.error('Logout failed');
console.error('Logout failed', error);
});
};
const getAllUsers = () => {
const { userID, token } = userDetails;
NexusAuthApi.getAllUsers(userID, token)
.then((response) => {
if (response.status === 200) {
setUsers(response.data);
}
else if (response.status === 401) {
console.info('Insuffient permissions to get all users');
toast.error('Insuffient permissions to get all users');
}
})
.catch((error) => {
console.error('Get all users failed', error);
toast.error('Get all users failed');
});
};
// Redirect if the access level doesn't match
useEffect(() => {
if (access_level && userDetails.accessLevel) {
if (access_level !== userDetails.accessLevel) {
router.push(`/su/${userDetails.accessLevel}`);
}
}
}, [access_level, userDetails.accessLevel]);
const { username, userID, accessLevel } = userDetails;
return (
{username ? (
<>
| Username: |
{username} |
| User ID: |
{userID} |
| Access Level: |
{accessLevel} |
|
|
{(accessLevel === 'admin' || accessLevel === 'hush') && (
{users.length > 0 && (
|
Username
|
Email
|
Access Level
|
Date Joined
|
{users.map((user, index) => (
| {user.username} |
{user.email || 'N/A'} |
{user.access_level} |
{new Date(user.date_joined).toLocaleDateString()} |
))}
)}
)}
>
) : (
No user details available. Please log in.
)}
);
}