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 }}
>
- Обновление ПО
+ Экспорт медиа
Выбрано устройств для обновления:{" "}