diff --git a/src/widgets/DevicesTable/index.tsx b/src/widgets/DevicesTable/index.tsx index 7dc3d71..b59b1d3 100644 --- a/src/widgets/DevicesTable/index.tsx +++ b/src/widgets/DevicesTable/index.tsx @@ -11,6 +11,7 @@ import { Vehicle, carrierStore, selectedCityStore, + menuStore, VEHICLE_TYPES, } from "@shared"; import { useEffect, useMemo, useState } from "react"; @@ -33,6 +34,7 @@ import { CircularProgress, Typography, Checkbox, + Tooltip, } from "@mui/material"; import { toast } from "react-toastify"; import { useNavigate } from "react-router-dom"; @@ -370,17 +372,20 @@ export const DevicesTable = observer(() => { filterable: true, }, { - field: "can_send_update", - headerName: "Обновление", + field: "snapshot_update_blocked", + headerName: "Запрет", width: 90, align: "center", headerAlign: "center", sortable: false, disableColumnMenu: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), renderCell: (params: GridRenderCellParams) => { const rowData = params.row as RowData; - const canSend = - !rowData.snapshot_update_blocked && rowData.device_uuid !== null; return ( { height: "100%", pointerEvents: "none", }} - title={ - canSend ? "Можно отправить запрос" : "Блокировка обновления" - } > { { field: "online", headerName: "Онлайн", - width: 90, + width: menuStore.isOpen ? 90 : undefined, + flex: menuStore.isOpen ? undefined : 1, align: "center", headerAlign: "center", type: "boolean", filterable: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), renderCell: (params: GridRenderCellParams) => ( { headerAlign: "center", type: "boolean", filterable: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), renderCell: (params: GridRenderCellParams) => { const rowData = params.row as RowData; const isMaintenanceLoading = @@ -467,6 +480,11 @@ export const DevicesTable = observer(() => { headerAlign: "center", type: "boolean", filterable: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), renderCell: (params: GridRenderCellParams) => { const rowData = params.row as RowData; const isDemoLoading = @@ -492,19 +510,29 @@ export const DevicesTable = observer(() => { }, { field: "lastUpdate", - headerName: "Обновлено", + headerName: "Дата последнего статуса", flex: 1, - minWidth: 140, + minWidth: 200, filterable: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), renderCell: (params: GridRenderCellParams) => formatDate(params.value as string | null), }, { field: "snapshot_name", headerName: "Экспорт на устройстве", - flex: 1, + flex: menuStore.isOpen ? 1 : 2, minWidth: 140, filterable: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), valueGetter: (_value, row, _apiRef) => { const rowData = row as RowData; const uuid = rowData.current_snapshot_uuid; @@ -519,22 +547,33 @@ export const DevicesTable = observer(() => { flex: 1, minWidth: 140, filterable: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), valueGetter: (_value, row) => { const rowData = row as RowData; const routeId = rowData.current_route_id; if (!routeId) return "—"; const route = routes.data.find((r) => r.id === routeId); - return route?.route_number || "—"; + return route?.route_sys_number || "—"; }, }, { field: "gps", headerName: "GPS", - width: 70, + width: menuStore.isOpen ? 70 : undefined, + flex: menuStore.isOpen ? undefined : 1, align: "center", headerAlign: "center", type: "boolean", filterable: true, + renderHeader: (params) => ( + + {params.colDef.headerName} + + ), renderCell: (params: GridRenderCellParams) => ( { selectedDeviceUuids.length - selectedDeviceUuidsAllowed.length; if (blockedCount > 0) { toast.info( - `Обновление ПО не отправлено на ${blockedCount} устройств (блокировка)`, + `Экспорт медиа не отправлен на ${blockedCount} устройств (блокировка)`, ); } @@ -715,10 +754,10 @@ export const DevicesTable = observer(() => { `/devices/${deviceUuid}/force-snapshot-update`, { snapshot_id: snapshotId }, ); - toast.success("Обновление ПО отправлено на устройство"); + toast.success("Экспорт медиа отправлен на устройство"); } catch (error) { console.error(`Error sending snapshot to device ${deviceUuid}:`, error); - toast.error("Не удалось отправить обновление ПО на устройство"); + toast.error("Не удалось отправить экспорт медиа на устройство"); } }; @@ -800,7 +839,7 @@ export const DevicesTable = observer(() => { onClick={handleOpenSendSnapshotModal} size="small" > - Обновление ПО ({selectedDeviceUuidsAllowed.length} + Экспорт медиа ({selectedDeviceUuidsAllowed.length} {selectedDeviceUuids.length !== selectedDeviceUuidsAllowed.length && `/${selectedDeviceUuids.length}`} @@ -914,7 +953,7 @@ export const DevicesTable = observer(() => { sx={{ width: "min(760px, 94vw)", p: 3 }} > - Обновление ПО + Экспорт медиа Выбрано устройств для обновления:{" "}