fix: show Ersätt befintlig import button for duplicate-file SIE uploads (#270)

The duplicate (file-hash) error path returned an importId but the UI only
captured it for the duplicate_period branch, so users saw a misleading
"ta bort under Bokföring" message with no way to act on it. The replace
flow (and its BFL 5:5 audit trail) is identical in both cases, so expose
the existing button for both.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-04-18 14:29:36 +02:00
committed by GitHub
co-authored by Claude Opus 4.7
parent 44082ff845
commit d741c46d4e
2 changed files with 11 additions and 14 deletions
+6 -6
View File
@@ -334,7 +334,7 @@ function SIEImportWizard() {
const [errorType, setErrorType] = useState<'duplicate' | 'duplicate_period' | 'validation' | 'parse' | undefined>()
const [validationErrors, setValidationErrors] = useState<string[]>([])
const [validationWarnings, setValidationWarnings] = useState<string[]>([])
const [duplicatePeriodImportId, setDuplicatePeriodImportId] = useState<string | null>(null)
const [duplicateImportId, setDuplicateImportId] = useState<string | null>(null)
const [isReplacing, setIsReplacing] = useState(false)
const [file, setFile] = useState<File | null>(null)
@@ -380,8 +380,8 @@ function SIEImportWizard() {
if (type === 'duplicate' || type === 'duplicate_period') {
setErrorType(type)
setError(data.message)
if (type === 'duplicate_period' && data.importId) {
setDuplicatePeriodImportId(data.importId)
if (data.importId) {
setDuplicateImportId(data.importId)
}
toast({ title: type === 'duplicate' ? 'Filen har redan importerats' : 'Överlappande räkenskapsår', description: data.message, variant: 'destructive' })
} else if (type === 'validation') {
@@ -459,7 +459,7 @@ function SIEImportWizard() {
// Clear error state and re-trigger the file upload
setError(null)
setErrorType(undefined)
setDuplicatePeriodImportId(null)
setDuplicateImportId(null)
// Small delay so the user sees the success toast before re-upload starts
await new Promise(resolve => setTimeout(resolve, 500))
@@ -618,7 +618,7 @@ function SIEImportWizard() {
const handleNewImport = () => {
setStep('upload'); setFile(null); setParsed(null); setMappings([])
setPreview(null); setIssues([]); setImportResult(null); setError(null); setErrorType(undefined)
setValidationErrors([]); setValidationWarnings([]); setDuplicatePeriodImportId(null)
setValidationErrors([]); setValidationWarnings([]); setDuplicateImportId(null)
setSieAccounts([]); setIsCreatingAccounts(false)
}
@@ -645,7 +645,7 @@ function SIEImportWizard() {
</CardContent>
</Card>
{step === 'upload' && <SIEUploadStep onFileSelect={handleFileSelect} isLoading={isLoading} error={error} errorType={errorType} validationErrors={validationErrors} validationWarnings={validationWarnings} duplicatePeriodImportId={duplicatePeriodImportId} onReplace={handleReplace} isReplacing={isReplacing} />}
{step === 'upload' && <SIEUploadStep onFileSelect={handleFileSelect} isLoading={isLoading} error={error} errorType={errorType} validationErrors={validationErrors} validationWarnings={validationWarnings} duplicateImportId={duplicateImportId} onReplace={handleReplace} isReplacing={isReplacing} />}
{step === 'preview' && preview && (
<SIEPreviewStep preview={preview} issues={issues} missingAccounts={missingAccounts}
onCreateAccounts={handleCreateAccounts} isCreatingAccounts={isCreatingAccounts}