mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-06 01:15:29 +08:00
88 lines
3.7 KiB
JavaScript
88 lines
3.7 KiB
JavaScript
import { Download, Upload } from 'lucide-react'
|
|
|
|
export default function BackupSection({
|
|
t,
|
|
importMode,
|
|
setImportMode,
|
|
importing,
|
|
onLoadExportData,
|
|
onDownloadExportFile,
|
|
onImport,
|
|
onImportFileChange,
|
|
importText,
|
|
setImportText,
|
|
exportData,
|
|
}) {
|
|
return (
|
|
<div className="bg-card border border-border rounded-xl p-5 space-y-4">
|
|
<h3 className="font-semibold">{t('settings.backupTitle')}</h3>
|
|
<div className="flex flex-wrap items-center gap-3">
|
|
<button
|
|
type="button"
|
|
onClick={onLoadExportData}
|
|
className="px-3 py-2 rounded-lg bg-secondary border border-border hover:bg-secondary/80 text-sm flex items-center gap-2"
|
|
>
|
|
<Download className="w-4 h-4" />
|
|
{t('settings.loadExport')}
|
|
</button>
|
|
<button
|
|
type="button"
|
|
onClick={onDownloadExportFile}
|
|
className="px-3 py-2 rounded-lg bg-secondary border border-border hover:bg-secondary/80 text-sm flex items-center gap-2"
|
|
>
|
|
<Download className="w-4 h-4" />
|
|
{t('settings.downloadExport')}
|
|
</button>
|
|
<label className="px-3 py-2 rounded-lg bg-secondary border border-border hover:bg-secondary/80 text-sm flex items-center gap-2 cursor-pointer">
|
|
<Upload className="w-4 h-4" />
|
|
{t('settings.chooseImportFile')}
|
|
<input
|
|
type="file"
|
|
accept=".json,application/json"
|
|
className="hidden"
|
|
onChange={(e) => {
|
|
onImportFileChange(e.target.files?.[0] || null)
|
|
e.target.value = ''
|
|
}}
|
|
/>
|
|
</label>
|
|
<select
|
|
value={importMode}
|
|
onChange={(e) => setImportMode(e.target.value)}
|
|
className="bg-background border border-border rounded-lg px-3 py-2 text-sm"
|
|
>
|
|
<option value="merge">{t('settings.importModeMerge')}</option>
|
|
<option value="replace">{t('settings.importModeReplace')}</option>
|
|
</select>
|
|
<button
|
|
type="button"
|
|
onClick={onImport}
|
|
disabled={importing}
|
|
className="px-3 py-2 rounded-lg bg-secondary border border-border hover:bg-secondary/80 text-sm flex items-center gap-2"
|
|
>
|
|
<Upload className="w-4 h-4" />
|
|
{importing ? t('settings.importing') : t('settings.importNow')}
|
|
</button>
|
|
</div>
|
|
<textarea
|
|
value={importText}
|
|
onChange={(e) => setImportText(e.target.value)}
|
|
rows={8}
|
|
className="w-full bg-background border border-border rounded-lg px-3 py-2 font-mono text-xs"
|
|
placeholder={t('settings.importPlaceholder')}
|
|
/>
|
|
{exportData && (
|
|
<div className="space-y-2">
|
|
<label className="text-sm text-muted-foreground">{t('settings.exportJson')}</label>
|
|
<textarea
|
|
value={exportData.json || ''}
|
|
readOnly
|
|
rows={6}
|
|
className="w-full bg-background border border-border rounded-lg px-3 py-2 font-mono text-xs"
|
|
/>
|
|
</div>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|