import { DataGrid, GridColDef, GridRenderCellParams } from "@mui/x-data-grid"; import { ruRU } from "@mui/x-data-grid/locales"; import { userStore } from "@shared"; import { useEffect, useState } from "react"; import { observer } from "mobx-react-lite"; import { Pencil, Trash2, Minus } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { CreateButton, DeleteModal } from "@widgets"; import { Box, CircularProgress } from "@mui/material"; export const UserListPage = observer(() => { const { users, getUsers, deleteUser } = userStore; const navigate = useNavigate(); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [isBulkDeleteModalOpen, setIsBulkDeleteModalOpen] = useState(false); const [rowId, setRowId] = useState(null); const [ids, setIds] = useState([]); const [isLoading, setIsLoading] = useState(false); useEffect(() => { const fetchUsers = async () => { setIsLoading(true); await getUsers(); setIsLoading(false); }; fetchUsers(); }, []); const columns: GridColDef[] = [ { field: "name", headerName: "Имя", width: 400, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( params.value ) : ( )}
); }, }, { field: "email", headerName: "Email", width: 400, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( params.value ) : ( )}
); }, }, { field: "is_admin", headerName: "Роль", flex: 1, renderCell: (params: GridRenderCellParams) => { return (

{params.row.is_admin ? "Администратор" : "Пользователь"}

); }, }, { field: "actions", headerName: "Действия", flex: 1, align: "center", headerAlign: "center", sortable: false, renderCell: (params: GridRenderCellParams) => { return (
); }, }, ]; const rows = users.data?.map((user) => ({ id: user.id, email: user.email, is_admin: user.is_admin, name: user.name, })); return ( <>

Пользователи

0 ? 1 : 0 }} >
{ setIds(Array.from(newSelection.ids) as number[]); }} hideFooter localeText={ruRU.components.MuiDataGrid.defaultProps.localeText} slots={{ noRowsOverlay: () => ( {isLoading ? ( ) : ( "Нет пользователей" )} ), }} />
{ if (rowId) { await deleteUser(rowId); } setIsDeleteModalOpen(false); setRowId(null); }} onCancel={() => { setIsDeleteModalOpen(false); setRowId(null); }} /> { await Promise.all(ids.map((id) => deleteUser(id))); getUsers(); setIsBulkDeleteModalOpen(false); setIds([]); }} onCancel={() => { setIsBulkDeleteModalOpen(false); }} /> ); });