fix: Fix Map page
				
					
				
			This commit is contained in:
		| @@ -2,7 +2,7 @@ import { DataGrid, GridColDef, GridRenderCellParams } from "@mui/x-data-grid"; | ||||
| import { languageStore, stationsStore } from "@shared"; | ||||
| import { useEffect, useState } from "react"; | ||||
| import { observer } from "mobx-react-lite"; | ||||
| import { Eye, Pencil, Trash2 } from "lucide-react"; | ||||
| import { Eye, Pencil, Trash2, Minus } from "lucide-react"; | ||||
| import { useNavigate } from "react-router-dom"; | ||||
| import { CreateButton, DeleteModal, LanguageSwitcher } from "@widgets"; | ||||
|  | ||||
| @@ -10,7 +10,9 @@ export const StationListPage = observer(() => { | ||||
|   const { stationLists, getStationList, deleteStation } = stationsStore; | ||||
|   const navigate = useNavigate(); | ||||
|   const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); | ||||
|   const [rowId, setRowId] = useState<number | null>(null); // Lifted state | ||||
|   const [isBulkDeleteModalOpen, setIsBulkDeleteModalOpen] = useState(false); | ||||
|   const [rowId, setRowId] = useState<number | null>(null); | ||||
|   const [ids, setIds] = useState<number[]>([]); | ||||
|   const { language } = languageStore; | ||||
|  | ||||
|   useEffect(() => { | ||||
| @@ -22,11 +24,33 @@ export const StationListPage = observer(() => { | ||||
|       field: "name", | ||||
|       headerName: "Название", | ||||
|       flex: 1, | ||||
|       renderCell: (params: GridRenderCellParams) => { | ||||
|         return ( | ||||
|           <div className="w-full h-full flex items-center"> | ||||
|             {params.value ? ( | ||||
|               params.value | ||||
|             ) : ( | ||||
|               <Minus size={20} className="text-red-500" /> | ||||
|             )} | ||||
|           </div> | ||||
|         ); | ||||
|       }, | ||||
|     }, | ||||
|     { | ||||
|       field: "system_name", | ||||
|       headerName: "Системное название", | ||||
|       flex: 1, | ||||
|       renderCell: (params: GridRenderCellParams) => { | ||||
|         return ( | ||||
|           <div className="w-full h-full flex items-center"> | ||||
|             {params.value ? ( | ||||
|               params.value | ||||
|             ) : ( | ||||
|               <Minus size={20} className="text-red-500" /> | ||||
|             )} | ||||
|           </div> | ||||
|         ); | ||||
|       }, | ||||
|     }, | ||||
|     { | ||||
|       field: "direction", | ||||
| @@ -88,15 +112,33 @@ export const StationListPage = observer(() => { | ||||
|     <> | ||||
|       <LanguageSwitcher /> | ||||
|  | ||||
|       <div style={{ width: "100%" }}> | ||||
|       <div className="w-full"> | ||||
|         <div className="flex justify-between items-center mb-10"> | ||||
|           <h1 className="text-2xl">Станции</h1> | ||||
|           <CreateButton label="Создать станцию" path="/station/create" /> | ||||
|         </div> | ||||
|  | ||||
|         <div | ||||
|           className="flex justify-end mb-5 duration-300" | ||||
|           style={{ opacity: ids.length > 0 ? 1 : 0 }} | ||||
|         > | ||||
|           <button | ||||
|             className="px-4 py-2 bg-red-500 text-white rounded flex gap-2 items-center" | ||||
|             onClick={() => setIsBulkDeleteModalOpen(true)} | ||||
|           > | ||||
|             <Trash2 size={20} className="text-white" /> Удалить выбранные ( | ||||
|             {ids.length}) | ||||
|           </button> | ||||
|         </div> | ||||
|  | ||||
|         <DataGrid | ||||
|           rows={rows} | ||||
|           columns={columns} | ||||
|           hideFooterPagination | ||||
|           checkboxSelection | ||||
|           onRowSelectionModelChange={(newSelection) => { | ||||
|             setIds(Array.from(newSelection.ids) as number[]); | ||||
|           }} | ||||
|           hideFooter | ||||
|         /> | ||||
|       </div> | ||||
| @@ -115,6 +157,19 @@ export const StationListPage = observer(() => { | ||||
|           setRowId(null); | ||||
|         }} | ||||
|       /> | ||||
|  | ||||
|       <DeleteModal | ||||
|         open={isBulkDeleteModalOpen} | ||||
|         onDelete={async () => { | ||||
|           await Promise.all(ids.map((id) => deleteStation(id))); | ||||
|           getStationList(); | ||||
|           setIsBulkDeleteModalOpen(false); | ||||
|           setIds([]); | ||||
|         }} | ||||
|         onCancel={() => { | ||||
|           setIsBulkDeleteModalOpen(false); | ||||
|         }} | ||||
|       /> | ||||
|     </> | ||||
|   ); | ||||
| }); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user