import React, { useState } from 'react'; import { Table, Button, Group, Text, ActionIcon, Box, LoadingOverlay, Alert, } from '@mantine/core'; import { IconTrash, IconEdit, IconPlus, IconAlertCircle, } from '@tabler/icons-react'; import { notifications } from '@mantine/notifications'; import { useUserAdmin } from '../../../hooks/useUserAdmin'; import CreateUserModal from '../../modals/user/CreateUserModal'; import EditUserModal from '../../modals/user/EditUserModal'; import DeleteUserModal from '../../modals/user/DeleteUserModal'; import type { User } from '@/types/models'; import type { CreateUserRequest, UpdateUserRequest } from '@/types/api'; interface AdminUsersTabProps { currentUser: User; } const AdminUsersTab: React.FC = ({ currentUser }) => { const { users, loading, error, create, update, delete: deleteUser, } = useUserAdmin(); const [createModalOpened, setCreateModalOpened] = useState(false); const [editModalData, setEditModalData] = useState(null); const [deleteModalData, setDeleteModalData] = useState(null); const handleCreateUser = async ( userData: CreateUserRequest ): Promise => { return await create(userData); }; const handleEditUser = async ( id: number, userData: UpdateUserRequest ): Promise => { return await update(id, userData); }; const handleDeleteClick = (user: User): void => { if (user.id === currentUser.id) { notifications.show({ title: 'Error', message: 'You cannot delete your own account', color: 'red', }); return; } setDeleteModalData(user); }; const handleDeleteConfirm = async (): Promise => { if (!deleteModalData) return; const success = await deleteUser(deleteModalData.id); if (success) { setDeleteModalData(null); } }; const renderUserRow = (user: User) => ( {user.email} {user.displayName} {user.role} {new Date(user.createdAt).toLocaleDateString()} setEditModalData(user)} > handleDeleteClick(user)} disabled={user.id === currentUser.id} > ); return ( {error && ( } title="Error" color="red" mb="md" > {error} )} User Management Email Display Name Role Created At Actions {users.map(renderUserRow)}
setCreateModalOpened(false)} onCreateUser={handleCreateUser} loading={loading} /> setEditModalData(null)} onEditUser={handleEditUser} user={editModalData} loading={loading} /> setDeleteModalData(null)} onConfirm={handleDeleteConfirm} user={deleteModalData} loading={loading} />
); }; export default AdminUsersTab;