import { DataGrid, GridColDef, GridRenderCellParams } from "@mui/x-data-grid"; import { ruRU } from "@mui/x-data-grid/locales"; import { cityStore, languageStore, sightsStore, selectedCityStore, } from "@shared"; import { useEffect, useState, useMemo } 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 SightListPage = observer(() => { const { sights, getSights, deleteListSight } = sightsStore; const { cities, getCities } = 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 { language } = languageStore; useEffect(() => { const fetchSights = async () => { setIsLoading(true); await getCities(language); await getSights(); setIsLoading(false); }; fetchSights(); }, [language]); const columns: GridColDef[] = [ { field: "name", headerName: "Имя", flex: 1, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( params.value ) : ( )}
); }, }, { field: "city_id", headerName: "Город", flex: 1, renderCell: (params: GridRenderCellParams) => { return (
{params.value ? ( cities[language].data.find((el) => el.id == params.value)?.name ) : ( )}
); }, }, { field: "actions", headerName: "Действия", align: "center", headerAlign: "center", sortable: false, renderCell: (params: GridRenderCellParams) => { return (
{/* */}
); }, }, ]; // Фильтрация достопримечательностей по выбранному городу const filteredSights = useMemo(() => { const { selectedCityId } = selectedCityStore; if (!selectedCityId) { return sights; } return sights.filter((sight: any) => sight.city_id === selectedCityId); }, [sights, selectedCityStore.selectedCityId]); const rows = filteredSights.map((sight) => ({ id: sight.id, name: sight.name, city_id: sight.city_id, })); return ( <>

Достопримечательности

0 ? 1 : 0 }} >
{ setIds(Array.from(newSelection.ids as unknown as number[])); }} slots={{ noRowsOverlay: () => ( {isLoading ? ( ) : ( "Нет достопримечательностей" )} ), }} />
{ if (rowId) { await deleteListSight(Number(rowId)); } setIsDeleteModalOpen(false); setRowId(null); }} onCancel={() => { setIsDeleteModalOpen(false); setRowId(null); }} /> { await Promise.all(ids.map((id) => deleteListSight(id))); getSights(); setIsBulkDeleteModalOpen(false); setIds([]); }} onCancel={() => { setIsBulkDeleteModalOpen(false); }} /> ); });