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")}

{selectedFile ? ( ) : null}
{selectedFile ? (

{selectedFileName}

) : (

{t("settings.noFileSelected")}

)}
); } 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-2 rounded-md border px-3 py-2 text-xs leading-relaxed"; 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}

); }