import { DataGrid, GridColDef, GridRenderCellParams } from "@mui/x-data-grid"; import { languageStore, cityStore } 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, LanguageSwitcher } from "@widgets"; import { toast } from "react-toastify"; export const CityListPage = observer(() => { const { cities, getCities, deleteCity } = cityStore; const navigate = useNavigate(); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [isBulkDeleteModalOpen, setIsBulkDeleteModalOpen] = useState(false); const [rowId, setRowId] = useState(null); const [ids, setIds] = useState([]); const { language } = languageStore; useEffect(() => { getCities(language); }, [language]); const columns: GridColDef[] = [ { field: "country", headerName: "Страна", width: 150, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( params.value ) : ( )}
); }, }, { field: "name", headerName: "Название", flex: 1, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( params.value ) : ( )}
); }, }, { field: "actions", headerName: "Действия", align: "center", headerAlign: "center", width: 200, renderCell: (params: GridRenderCellParams) => { return (
{/* */}
); }, }, ]; const rows = cities[language]?.data?.map((city) => ({ id: city.id, name: city.name, country: city.country, })); return ( <>

Города

0 ? 1 : 0 }} >
{ setIds(Array.from(newSelection.ids as unknown as number[])); }} />
{ if (rowId) { await deleteCity(rowId.toString()); toast.success("Город успешно удален"); } setIsDeleteModalOpen(false); setRowId(null); }} onCancel={() => { setIsDeleteModalOpen(false); setRowId(null); }} /> { await Promise.all(ids.map((id) => deleteCity(id.toString()))); toast.success("Города успешно удалены"); getCities(language); setIsBulkDeleteModalOpen(false); setIds([]); }} onCancel={() => { setIsBulkDeleteModalOpen(false); }} /> ); });