'use client' import { useState, useCallback } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Progress } from '@/components/ui/progress' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Upload, FileText, AlertCircle, CheckCircle, Building2, HelpCircle, } from 'lucide-react' import type { BankFileFormatId } from '@/lib/import/bank-file/types' const FORMAT_NAMES: Record = { nordea: 'Nordea', seb: 'SEB', swedbank: 'Swedbank', handelsbanken: 'Handelsbanken', lansforsakringar: 'Länsförsäkringar', ica_banken: 'ICA Banken', skandia: 'Skandia', lunar: 'Lunar', generic_csv: 'CSV (manuell mappning)', camt053: 'ISO 20022 camt.053', } interface BankFileUploadStepProps { onFileSelect: (file: File, formatOverride?: BankFileFormatId) => void isLoading: boolean error: string | null detectedFormat?: string | null detectedFormatName?: string | null } export default function BankFileUploadStep({ onFileSelect, isLoading, error, detectedFormat, detectedFormatName, }: BankFileUploadStepProps) { const [isDragging, setIsDragging] = useState(false) const [selectedFile, setSelectedFile] = useState(null) const [formatOverride, setFormatOverride] = useState(undefined) const acceptedExtensions = '.csv,.txt,.xml' const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault() setIsDragging(true) }, []) const handleDragLeave = useCallback((e: React.DragEvent) => { e.preventDefault() setIsDragging(false) }, []) const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault() setIsDragging(false) const files = e.dataTransfer.files if (files.length > 0) { const file = files[0] const ext = file.name.toLowerCase() if (ext.endsWith('.csv') || ext.endsWith('.txt') || ext.endsWith('.xml')) { setSelectedFile(file) onFileSelect(file, formatOverride) } } }, [onFileSelect, formatOverride]) const handleFileInput = useCallback((e: React.ChangeEvent) => { const files = e.target.files if (files && files.length > 0) { setSelectedFile(files[0]) onFileSelect(files[0], formatOverride) } }, [onFileSelect, formatOverride]) const handleFormatChange = (value: string) => { const format = value === 'auto' ? undefined : value as BankFileFormatId setFormatOverride(format) if (selectedFile) { onFileSelect(selectedFile, format) } } return (
Ladda upp kontoutdrag Exportera transaktioner som CSV eller XML från din internetbank och ladda upp filen. {/* Format override */}
{/* Drop zone */}
document.getElementById('bank-file-input')?.click()} > {isLoading ? (

Analyserar fil...

) : selectedFile && detectedFormat ? (

{selectedFile.name}

{(selectedFile.size / 1024).toFixed(1)} KB

{detectedFormatName || FORMAT_NAMES[detectedFormat] || detectedFormat}
) : (

Dra och släpp bankfil här

CSV, TXT eller XML (max 10 MB)

)}
{/* Error display */} {error && (

Kunde inte läsa filen

{error}

)}
{/* Bank export instructions */} Så exporterar du från din bank

Nordea

Logga in → Konton → Välj konto → Transaktioner → Exportera (CSV)

SEB

Logga in → Konton → Kontoutdrag → Hämta som fil (CSV)

Swedbank

Logga in → Konton → Transaktioner → Exportera kontoutdrag (CSV)

Handelsbanken

Logga in → Konton → Transaktioner → Ladda ner (CSV)

Länsförsäkringar

Logga in → Konton → Kontoutdrag → Exportera (CSV)

ICA Banken

Logga in → Konton → Transaktioner → Exportera till fil (CSV)

Skandia

Logga in → Konton → Transaktioner → Exportera (CSV)

Lunar

Logga in → Konto → Transaktioner → Exportera (CSV)

) }