fix(backups): показать отсутствие файлов и защитить удаление записей

This commit is contained in:
Denozordec committed 2026-10-14 14:30:33 +07:00
1 parent e452e528e1
commit 6617b776bb
26 files changed
+420 -36

No files matched your search

+9 -3
View File
@@ -44,6 +44,7 @@ import { useBackupJob } from "@/lib/use-backup-job"
import { backupJobOutcome, backupJobResultError } from "@/lib/backup-job-poll"
import { backupSchedulePayload, backupStoragePayload } from "@/lib/backup-settings"
import { BackupsHistory } from "@/components/backups/backups-history"
import { backupFileMissing } from "@/lib/backup-file-state"
import {
BackupsSettings,
WEEK_DAYS,
@@ -148,6 +149,7 @@ function BackupsContent() {
notes: b.notes ?? "",
storage: b.storage,
uploadError: b.uploadError ?? undefined,
localFileStatus: b.localFileStatus,
}
}, [])
@@ -304,7 +306,7 @@ function BackupsContent() {
if (!deleteTarget) return
const target = deleteTarget, abort = startOperation(); if (!abort) return
try {
await deleteBackup(backendUrl, target.id, { signal: abort.signal })
await deleteBackup(backendUrl, target.id, { signal: abort.signal }, backupFileMissing(target))
if (!alive.current || abort.signal.aborted) return
setBackupList(previous => previous.filter(backup => backup.id !== target.id)); setDeleteTarget(null)
toast.success("API подтвердил удаление резервной копии")
@@ -314,6 +316,10 @@ function BackupsContent() {
}
async function handleRestore() {
if (!restoreTarget || !restoreTarget.serverId || !restoreGuard.canStart) return
if (backupFileMissing(backupList.find(backup => backup.id === restoreTarget.id) ?? restoreTarget)) {
setOpError("Локальный файл отсутствует. Создайте новую резервную копию.")
return
}
const target = restoreTarget, abort = startOperation(); if (!abort) return
let sent = false
try {
@@ -607,8 +613,8 @@ function BackupsContent() {
returnFocus={returnDialogFocus}
backup={restoreTarget}
busy={opBusy}
blocked={!restoreGuard.canStart}
error={opError}
blocked={!restoreGuard.canStart || Boolean(restoreTarget && backupFileMissing(backupList.find(backup => backup.id === restoreTarget.id) ?? restoreTarget))}
error={restoreTarget && backupFileMissing(backupList.find(backup => backup.id === restoreTarget.id) ?? restoreTarget) ? "Локальный файл отсутствует. Создайте новую резервную копию." : opError}
onConfirm={() => void handleRestore()}
onCancel={() => setRestoreTarget(null)}
/>