'use client' import { useCallback, useState } from 'react' import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Upload, FileSpreadsheet, AlertCircle, Loader2 } from 'lucide-react' import { cn } from '@/lib/utils' interface OpeningBalanceUploadStepProps { onFileSelect: (file: File) => void isLoading: boolean error: string | null /** Optional action rendered under the error text (e.g. route to the bank importer) */ errorAction?: { label: string; onClick: () => void } } export default function OpeningBalanceUploadStep({ onFileSelect, isLoading, error, errorAction, }: OpeningBalanceUploadStepProps) { const [isDragging, setIsDragging] = useState(false) const ACCEPTED_TYPES = '.xlsx,.xls,.csv,.ods' const handleFile = useCallback((file: File) => { const ext = file.name.split('.').pop()?.toLowerCase() if (!ext || !['xlsx', 'xls', 'csv', 'ods'].includes(ext)) { return } onFileSelect(file) }, [onFileSelect]) const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault() setIsDragging(false) const file = e.dataTransfer.files[0] if (file) handleFile(file) }, [handleFile]) const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault() setIsDragging(true) }, []) const handleDragLeave = useCallback(() => { setIsDragging(false) }, []) return ( Ladda upp fil med ingående balanser Ladda upp en Excel- eller CSV-fil med ditt företags ingående balanser. Filen bör innehålla kontonummer och belopp (debet/kredit eller saldo). {/* Drop zone */}
{isLoading ? (

Läser fil och identifierar kolumner...

) : ( <>

Dra och släpp din fil här

eller

XLSX, XLS, CSV, ODS: max 10 MB

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

{error}

{errorAction && ( )}
)} {/* Info */}

Filformat

Filen bör ha en rubrikrad med kolumner för kontonummer och belopp. Vanliga format stöds automatiskt: t.ex. kolumner som heter "Konto", "Debet", "Kredit" eller "Saldo".

) }