import { useMemo } from "react"; import { AlertCircle, CheckCircle2, FolderOpen, Loader2, Save, XCircle, } from "lucide-react"; import { Button } from "@/components/ui/button"; import { useTranslation } from "react-i18next"; import type { ImportStatus } from "@/hooks/useImportExport"; interface ImportExportSectionProps { status: ImportStatus; selectedFile: string; errorMessage: string | null; backupId: string | null; isImporting: boolean; onSelectFile: () => Promise; onImport: () => Promise; onExport: () => Promise; onClear: () => void; } export function ImportExportSection({ status, selectedFile, errorMessage, backupId, isImporting, onSelectFile, onImport, onExport, onClear, }: ImportExportSectionProps) { const { t } = useTranslation(); const selectedFileName = useMemo(() => { if (!selectedFile) return ""; const segments = selectedFile.split(/[\\/]/); return segments[segments.length - 1] || selectedFile; }, [selectedFile]); return (

{t("settings.importExport")}

{t("settings.importExportHint")}

{/* Import and Export Buttons Side by Side */}
{/* Import Button */}
{selectedFile && ( )}
{/* Export Button */}
); } interface ImportStatusMessageProps { status: ImportStatus; errorMessage: string | null; backupId: string | null; } function ImportStatusMessage({ status, errorMessage, backupId, }: ImportStatusMessageProps) { const { t } = useTranslation(); if (status === "idle") { return null; } const baseClass = "flex items-start gap-3 rounded-xl border p-4 text-sm leading-relaxed backdrop-blur-sm"; if (status === "importing") { return (

{t("settings.importing")}

{t("common.loading")}

); } if (status === "success") { return (

{t("settings.importSuccess")}

{backupId ? (

{t("settings.backupId")}: {backupId}

) : null}

{t("settings.autoReload")}

); } if (status === "partial-success") { return (

{t("settings.importPartialSuccess")}

{t("settings.importPartialHint")}

); } const message = errorMessage || t("settings.importFailed"); return (

{t("settings.importFailed")}

{message}

); }