fix(ui): сохранять ошибку загрузки истории IPsec

This commit is contained in:
Denozordec committed 2026-09-29 18:55:46 +07:00
1 parent 3dd4ad34ee
commit 46d62c98b8
5 files changed
+75 -9

No files matched your search

+15 -5
View File
@@ -1,6 +1,6 @@
"use client"
import { useCallback, useEffect, useMemo, useState } from "react"
import { useCallback, useEffect, useMemo, useRef, useState } from "react"
import { PageHeader } from "@/components/page-header"
import { servers as mockServers } from "@/lib/data"
import type { Server } from "@/lib/data"
@@ -190,6 +190,8 @@ export default function IpsecPage() {
const [historyOpen, setHistoryOpen] = useState(false)
const [revisions, setRevisions] = useState<ConfigRevisionDto[]>([])
const [historyLoading, setHistoryLoading] = useState(false)
const [historyError, setHistoryError] = useState<string | null>(null)
const historyEpoch = useRef(0)
const [historyRestoring, setHistoryRestoring] = useState(false)
const loadLive = useCallback(async () => {
@@ -245,20 +247,26 @@ export default function IpsecPage() {
const historyServerId = effectiveServerId === ALL_SERVERS_ID ? null : effectiveServerId
useEffect(() => () => { historyEpoch.current += 1 }, [historyServerId, backendUrl, isLive])
const loadRevisions = useCallback(async () => {
if (!isLive || !historyServerId) return
const epoch = ++historyEpoch.current
setHistoryLoading(true)
setHistoryError(null)
try {
const res = await requestJson<{ revisions: ConfigRevisionDto[] }>(
backendUrl,
`/api/ipsec/revisions?serverId=${encodeURIComponent(historyServerId)}`,
)
if (epoch !== historyEpoch.current) return
if (!Array.isArray(res?.revisions)) throw new Error("Некорректный ответ истории IPsec")
setRevisions(res.revisions)
} catch (err) {
toast.error("Не удалось загрузить историю", { description: String(err) })
setRevisions([])
if (epoch !== historyEpoch.current) return
setHistoryError(err instanceof Error ? err.message : "Не удалось загрузить историю")
} finally {
setHistoryLoading(false)
if (epoch === historyEpoch.current) setHistoryLoading(false)
}
}, [isLive, historyServerId, backendUrl])
@@ -884,7 +892,9 @@ export default function IpsecPage() {
<ConfigHistorySheet
open={historyOpen}
onOpenChange={setHistoryOpen}
onOpenChange={v => { if (!v) historyEpoch.current += 1; setHistoryOpen(v) }}
loadError={historyError}
onRetry={() => void loadRevisions()}
revisions={revisions}
loading={historyLoading}
restoring={historyRestoring}