import { DataGrid, GridColDef, GridRenderCellParams } from "@mui/x-data-grid"; import { ruRU } from "@mui/x-data-grid/locales"; import { carrierStore, cityStore, languageStore } 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 { Box, CircularProgress } from "@mui/material"; export const CarrierListPage = observer(() => { const { carriers, getCarriers, deleteCarrier } = carrierStore; const { getCities, cities } = cityStore; 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); const [paginationModel, setPaginationModel] = useState({ page: 0, pageSize: 50, }); const { language } = languageStore; useEffect(() => { const fetchData = async () => { setIsLoading(true); await getCities("ru"); await getCities("en"); await getCities("zh"); await getCarriers(language); setIsLoading(false); }; fetchData(); }, [language]); const columns: GridColDef[] = [ { field: "full_name", headerName: "Полное имя", width: 300, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( params.value ) : ( )}
); }, }, { field: "short_name", headerName: "Короткое имя", width: 200, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( params.value ) : ( )}
); }, }, { field: "city_id", headerName: "Город", flex: 1, renderCell: (params: GridRenderCellParams) => { const city = cities[language]?.data.find( (city) => city.id == params.value ); return (
{city && city.name ? ( city.name ) : ( )}
); }, }, { field: "actions", headerName: "Действия", headerAlign: "center", width: 200, sortable: false, renderCell: (params: GridRenderCellParams) => { return (
{/* */}
); }, }, ]; const rows = carriers[language].data?.map((carrier) => ({ id: carrier.id, full_name: carrier.full_name, short_name: carrier.short_name, city_id: carrier.city_id, })); return ( <>

Перевозчики

{ids.length > 0 && (
)} { if (Array.isArray(newSelection)) { const selectedIds = newSelection.map((id: string | number) => Number(id)); setIds(selectedIds); } else if (newSelection && typeof newSelection === 'object' && 'ids' in newSelection) { const idsSet = newSelection.ids as Set; const selectedIds = Array.from(idsSet).map((id: string | number) => Number(id)); setIds(selectedIds); } else { setIds([]); } }} slots={{ noRowsOverlay: () => ( {isLoading ? ( ) : ( "Нет перевозчиков" )} ), }} />
{ if (rowId) { await deleteCarrier(rowId); } setIsDeleteModalOpen(false); setRowId(null); }} onCancel={() => { setIsDeleteModalOpen(false); setRowId(null); }} /> { await Promise.all(ids.map((id) => deleteCarrier(id))); await getCarriers(language); setIsBulkDeleteModalOpen(false); setIds([]); }} onCancel={() => { setIsBulkDeleteModalOpen(false); }} /> ); });