import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { User } from '@/types'; import { useUserData } from '@/hooks/useUserData'; import { useAuth } from '@/contexts/AuthContext'; import AddUserForm from '@/components/AddUserForm'; import EditUserForm from '@/components/EditUserForm'; import { Edit, Trash, User as UserIcon } from 'lucide-react'; import DeleteDialog from '@/components/ui/DeleteDialog'; const UsersPage: React.FC = () => { const { t } = useTranslation(); const { auth } = useAuth(); const currentUser = auth.user; const { users, loading: usersLoading, error: userError, setError: setUserError, deleteUser, triggerRefresh } = useUserData(); const [editingUser, setEditingUser] = useState(null); const [showAddForm, setShowAddForm] = useState(false); const [userToDelete, setUserToDelete] = useState(null); // Check if current user is admin if (!currentUser?.isAdmin) { return (

{t('users.adminRequired')}

); } const handleEditClick = (user: User) => { setEditingUser(user); }; const handleEditComplete = () => { setEditingUser(null); triggerRefresh(); // Refresh the users list after editing }; const handleDeleteClick = (username: string) => { setUserToDelete(username); }; const handleConfirmDelete = async () => { if (userToDelete) { const result = await deleteUser(userToDelete); if (!result?.success) { setUserError(result?.message || t('users.deleteError')); } setUserToDelete(null); } }; const handleAddUser = () => { setShowAddForm(true); }; const handleAddComplete = () => { setShowAddForm(false); triggerRefresh(); // Refresh the users list after adding }; return (

{t('pages.users.title')}

{userError && (

{userError}

)} {usersLoading ? (

{t('app.loading')}

) : users.length === 0 ? (

{t('users.noUsers')}

) : (
{users.map((user) => { const isCurrentUser = currentUser?.username === user.username; return ( ); })}
{t('users.username')} {t('users.role')} {t('users.actions')}
{user.username.charAt(0).toUpperCase()}
{user.username} {isCurrentUser && ( {t('users.currentUser')} )}
{user.isAdmin ? t('users.admin') : t('users.user')}
{!isCurrentUser && ( )}
)} {showAddForm && ( )} {editingUser && ( setEditingUser(null)} /> )} setUserToDelete(null)} onConfirm={handleConfirmDelete} serverName={userToDelete || ''} isGroup={false} isUser={true} />
); }; export default UsersPage;