// 백업 기록: list the automatic/manual backups, restore one (undoable) or download it. import React, { useEffect, useState } from 'react'; import { X } from 'lucide-react'; import { deleteBackup, listBackups, MAX_BACKUPS, type BackupRecord } from './backupStore'; interface Props { onRestore: (rec: BackupRecord) => void; onBackupNow: () => Promise; onClose: () => void; } export const BackupModal: React.FC = ({ onRestore, onBackupNow, onClose }) => { const [items, setItems] = useState(null); const [error, setError] = useState(null); const reload = () => listBackups().then(setItems).catch((e) => setError(e instanceof Error ? e.message : String(e))); useEffect(() => { void reload(); }, []); const download = (b: BackupRecord) => { const a = document.createElement('a'); a.href = URL.createObjectURL(new Blob([b.inp], { type: 'text/plain;charset=utf-8' })); a.download = `${b.fileName.replace(/\.[^.]+$/, '')}_백업_${b.savedAt.slice(0, 16).replace(/[-:T]/g, '')}.inp`; a.click(); URL.revokeObjectURL(a.href); }; return (
e.stopPropagation()} style={{ width: 'min(640px, 96vw)', maxHeight: '86vh', background: 'var(--bg-panel)', borderRadius: 8, boxShadow: '0 12px 40px rgba(0,0,0,.25)', display: 'flex', flexDirection: 'column' }}>
백업 기록
모델이 수정된 상태면 10분마다 이 브라우저에 자동으로 백업합니다 (최근 {MAX_BACKUPS}개). 복원은 실행 취소(Ctrl+Z)로 되돌릴 수 있습니다.
{error &&
{error}
} {items && !items.length &&
백업이 아직 없습니다.
} {items && items.length > 0 && ( {['시각', '파일', '규모', '', ''].map((h, i) => )} {items.map((b) => ( ))}
{h}
{new Date(b.savedAt).toLocaleString('ko-KR')}{b.reason === 'manual' ? ' (수동)' : ''} {b.fileName} 절점 {b.nodes} · 링크 {b.links} {' '}
)}
); };