import { Pencil, Play, Square, Trash2 } from "lucide-react"; import { useMemo, useState } from "react"; import { OnOff } from "~/client/components/onoff"; import { Button } from "~/client/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "~/client/components/ui/card"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogHeader, AlertDialogTitle, } from "~/client/components/ui/alert-dialog"; import type { BackupSchedule } from "~/client/lib/types"; import { BackupProgressCard } from "./backup-progress-card"; type Props = { schedule: BackupSchedule; handleToggleEnabled: (enabled: boolean) => void; handleRunBackupNow: () => void; handleStopBackup: () => void; handleDeleteSchedule: () => void; setIsEditMode: (isEdit: boolean) => void; }; export const ScheduleSummary = (props: Props) => { const { schedule, handleToggleEnabled, handleRunBackupNow, handleStopBackup, handleDeleteSchedule, setIsEditMode } = props; const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); const summary = useMemo(() => { const scheduleLabel = schedule ? schedule.cronExpression : "-"; const retentionParts: string[] = []; if (schedule?.retentionPolicy) { const rp = schedule.retentionPolicy; if (rp.keepLast) retentionParts.push(`${rp.keepLast} last`); if (rp.keepHourly) retentionParts.push(`${rp.keepHourly} hourly`); if (rp.keepDaily) retentionParts.push(`${rp.keepDaily} daily`); if (rp.keepWeekly) retentionParts.push(`${rp.keepWeekly} weekly`); if (rp.keepMonthly) retentionParts.push(`${rp.keepMonthly} monthly`); if (rp.keepYearly) retentionParts.push(`${rp.keepYearly} yearly`); } return { vol: schedule.volume.name, scheduleLabel, repositoryLabel: schedule.repositoryId || "No repository selected", retentionLabel: retentionParts.length > 0 ? retentionParts.join(" • ") : "No retention policy", }; }, [schedule, schedule.volume.name]); const handleConfirmDelete = () => { setShowDeleteConfirm(false); handleDeleteSchedule(); }; return (
Backup schedule Automated backup configuration for volume  {schedule.volume.name}
{schedule.lastBackupStatus === "in_progress" ? ( ) : ( )}

Schedule

{summary.scheduleLabel}

Repository

{schedule.repository.name}

Last backup

{schedule.lastBackupAt ? new Date(schedule.lastBackupAt).toLocaleString() : "Never"}

Next backup

{schedule.nextBackupAt ? new Date(schedule.nextBackupAt).toLocaleString() : "Never"}

Status

{schedule.lastBackupStatus === "success" && "✓ Success"} {schedule.lastBackupStatus === "error" && "✗ Error"} {schedule.lastBackupStatus === "in_progress" && "⟳ in progress..."} {!schedule.lastBackupStatus && "—"}

{schedule.lastBackupError && (

Error Details

{schedule.lastBackupError}

)}
{schedule.lastBackupStatus === "in_progress" && } Delete backup schedule? Are you sure you want to delete this backup schedule for {schedule.volume.name}? This action cannot be undone. Existing snapshots will not be deleted.
Cancel Delete schedule
); };