fix(ui): изолировать операции GRE и готовность устройств

This commit is contained in:
Denozordec committed 2026-09-30 15:56:51 +07:00
1 parent fb009344e1
commit ceb2113209
8 files changed
+244 -38

No files matched your search

@@ -105,6 +105,7 @@ interface GreTunnelsDataGridProps {
onToggle?: (tunnel: GreTunnel) => void
onDelete?: (tunnel: GreTunnel) => void
mutationsLocked?: boolean
canManage?: (serverId: string) => boolean
unknownServerIds?: Set<string>
emptyTitle?: string
emptyDescription?: string
@@ -119,7 +120,7 @@ function GreTunnelsDataGrid({
onToggle,
onDelete,
mutationsLocked = false,
unknownServerIds, emptyTitle, emptyDescription,
unknownServerIds, emptyTitle, emptyDescription, canManage,
}: GreTunnelsDataGridProps) {
const serverMap = useMemo(() => new Map(servers.map((s) => [s.id, s])), [servers])
const poolMap = useMemo(() => new Map(pools.map((p) => [p.id, p])), [pools])
@@ -316,18 +317,18 @@ function GreTunnelsDataGrid({
<DropdownMenuItem onClick={() => onCodePreview(t)}>
<CodeXmlIcon className="size-4" /> Просмотр кода
</DropdownMenuItem>
<DropdownMenuItem disabled={mutationsLocked || !onEdit} onClick={() => onEdit?.(t)}>
<DropdownMenuItem disabled={mutationsLocked || (canManage && !canManage(t.serverId)) || !onEdit} onClick={() => onEdit?.(t)}>
<PencilIcon className="size-4" /> Редактировать
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem disabled={mutationsLocked || !onToggle} onClick={() => onToggle?.(t)}>
<DropdownMenuItem disabled={mutationsLocked || (canManage && !canManage(t.serverId)) || !onToggle} onClick={() => onToggle?.(t)}>
<PowerIcon className="size-4" />
{t.enabled ? "Выключить" : "Включить"}
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem
variant="destructive"
disabled={mutationsLocked || !onDelete}
disabled={mutationsLocked || (canManage && !canManage(t.serverId)) || !onDelete}
onClick={() => onDelete?.(t)}
>
<Trash2Icon className="size-4" /> Удалить туннель
@@ -341,7 +342,7 @@ function GreTunnelsDataGrid({
meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST },
},
],
[onCodePreview, onEdit, onToggle, onDelete, mutationsLocked, unknownServerIds, poolMap, serverMap],
[onCodePreview, onEdit, onToggle, onDelete, mutationsLocked, canManage, unknownServerIds, poolMap, serverMap],
)
const table = useTable({