"use client"; import type { Dispatch, SetStateAction } from "react"; import { Badge, Button } from "@/shared/components"; export type BackupCleanupOptions = { keepLatest: number; retentionDays: number; }; export type BackupRetentionStatus = { type: string; message: string; }; export type StorageBackupHealth = { backupCount?: number; backupRetention: { maxFiles: number; days: number; }; }; type DatabaseBackupRetentionCardProps = { title: string; className?: string; storageHealth: StorageBackupHealth; backupCleanupOptions: BackupCleanupOptions; setBackupCleanupOptions: Dispatch>; saveBackupRetentionLoading: boolean; backupRetentionStatus: BackupRetentionStatus; setBackupRetentionStatus: Dispatch>; cleanupBackupsLoading: boolean; cleanupBackupsStatus: BackupRetentionStatus; onSaveRetention: () => void; onCleanupBackups: () => void; }; function StatusAlert({ status }: { status: BackupRetentionStatus }) { if (!status.message) return null; const isSuccess = status.type === "success"; return (
{status.message}
); } export default function DatabaseBackupRetentionCard({ title, className = "mb-4", storageHealth, backupCleanupOptions, setBackupCleanupOptions, saveBackupRetentionLoading, backupRetentionStatus, setBackupRetentionStatus, cleanupBackupsLoading, cleanupBackupsStatus, onSaveRetention, onCleanupBackups, }: DatabaseBackupRetentionCardProps) { return (

{title}

Automatic SQLite backups are stored in db_backups. Configure how many snapshots to keep and optionally delete backups older than N days.

{storageHealth.backupCount || 0} backups Max {storageHealth.backupRetention.maxFiles} {storageHealth.backupRetention.days > 0 ? `${storageHealth.backupRetention.days}d retention` : "Age retention off"}
); }