'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' export type RegisterEntity = 'customers' | 'suppliers' interface RegisterUploadStepProps { entity: RegisterEntity onFileSelect: (file: File) => void isLoading: boolean error: string | null } const COPY: Record = { customers: { title: 'Ladda upp fil med kunder', description: 'Ladda upp en Excel- eller CSV-fil med ditt kundregister. Filen bör innehålla minst en kolumn med kundnamn.', hint: 'Vanliga kolumner identifieras automatiskt — t.ex. "Namn", "Orgnr", "E-post", "Telefon", "Adress", "Postort".', }, suppliers: { title: 'Ladda upp fil med leverantörer', description: 'Ladda upp en Excel- eller CSV-fil med ditt leverantörsregister. Filen bör innehålla minst en kolumn med leverantörsnamn.', hint: 'Vanliga kolumner identifieras automatiskt — t.ex. "Namn", "Orgnr", "Bankgiro", "Plusgiro", "IBAN", "E-post".', }, } export default function RegisterUploadStep({ entity, onFileSelect, isLoading, error, }: RegisterUploadStepProps) { const [isDragging, setIsDragging] = useState(false) const copy = COPY[entity] 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]) return ( {copy.title} {copy.description}
{ e.preventDefault(); setIsDragging(true) }} onDragLeave={() => setIsDragging(false)} > {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}

)}

Filformat

{copy.hint}

) }