import { useState, useCallback } from "react"; import { useTranslation } from "react-i18next"; import { useImportWizard } from "../hooks/useImportWizard"; import ImportFolderConfig from "../components/import/ImportFolderConfig"; import SourceList from "../components/import/SourceList"; import SourceConfigPanel from "../components/import/SourceConfigPanel"; import DuplicateCheckPanel from "../components/import/DuplicateCheckPanel"; import ImportConfirmation from "../components/import/ImportConfirmation"; import ImportProgress from "../components/import/ImportProgress"; import ImportReportPanel from "../components/import/ImportReportPanel"; import WizardNavigation from "../components/import/WizardNavigation"; import ImportHistoryPanel from "../components/import/ImportHistoryPanel"; import FilePreviewModal from "../components/import/FilePreviewModal"; import { AlertCircle, Eye, X, ChevronLeft } from "lucide-react"; import { PageHelp } from "../components/shared/PageHelp"; export default function ImportPage() { const { t } = useTranslation(); const { state, browseFolder, refreshFolder, selectSource, updateConfig, toggleFile, selectAllFiles, parsePreview, parseAndCheckDuplicates, executeImport, goToStep, reset, autoDetectConfig, saveConfigAsTemplate, applyConfigTemplate, updateConfigTemplate, deleteConfigTemplate, toggleDuplicateRow, setSkipAllDuplicates, } = useImportWizard(); const [showPreviewModal, setShowPreviewModal] = useState(false); const handlePreview = useCallback(async () => { await parsePreview(); setShowPreviewModal(true); }, [parsePreview]); const nextDisabled = state.selectedFiles.length === 0 || !state.sourceConfig.name; return (

{t("import.title")}

{/* Error banner */} {state.error && (

{state.error}

)} {/* Folder config - always visible */} {/* Wizard steps */} {state.step === "source-list" && ( <> )} {state.step === "source-config" && state.selectedSource && (
)} {state.step === "duplicate-check" && state.duplicateResult && (
setSkipAllDuplicates(true)} onIncludeAll={() => setSkipAllDuplicates(false)} /> goToStep("source-config")} onNext={() => goToStep("confirm")} onCancel={reset} nextLabel={t("import.wizard.confirm")} />
)} {state.step === "confirm" && state.duplicateResult && (
goToStep("duplicate-check")} onNext={executeImport} onCancel={reset} nextLabel={t("import.wizard.import")} showCancel={false} />
)} {state.step === "importing" && ( )} {state.step === "report" && state.importReport && ( )} {/* Preview modal */} {showPreviewModal && state.parsedPreview.length > 0 && ( setShowPreviewModal(false)} /> )}
); }