'use client' import { useState } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Label } from '@/components/ui/label' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' import { ArrowLeft, ArrowRight, Columns3 } from 'lucide-react' import { formatCurrency } from '@/lib/utils' import type { GenericCSVColumnMapping } from '@/lib/import/bank-file/types' interface BankFileColumnMappingStepProps { headers: string[] previewRows: string[][] onConfirm: (mapping: GenericCSVColumnMapping) => void onBack: () => void } export default function BankFileColumnMappingStep({ headers, previewRows, onConfirm, onBack, }: BankFileColumnMappingStepProps) { const [dateCol, setDateCol] = useState(-1) const [descCol, setDescCol] = useState(-1) const [amountCol, setAmountCol] = useState(-1) const [referenceCol, setReferenceCol] = useState(-1) const [counterpartyCol, setCounterpartyCol] = useState(-1) const [balanceCol, setBalanceCol] = useState(-1) const [delimiter, setDelimiter] = useState(',') const [decimalSep, setDecimalSep] = useState<',' | '.'>(',') const isValid = dateCol >= 0 && descCol >= 0 && amountCol >= 0 const handleConfirm = () => { const mapping: GenericCSVColumnMapping = { date: dateCol, description: descCol, amount: amountCol, ...(referenceCol >= 0 && { reference: referenceCol }), ...(counterpartyCol >= 0 && { counterparty: counterpartyCol }), ...(balanceCol >= 0 && { balance: balanceCol }), delimiter, decimal_separator: decimalSep, skip_rows: 1, // Skip header date_format: 'YYYY-MM-DD', } onConfirm(mapping) } const columnOptions = headers.map((h, i) => ({ label: `${i + 1}: ${h}`, value: i })) return (
Kolumnmappning Vi kunde inte identifiera bankformatet automatiskt. Mappa kolumnerna manuellt. {/* Delimiter and decimal settings */}
{/* Required column mappings */}

Obligatoriska kolumner

{/* Optional column mappings */}

Valfria kolumner

{/* Live preview */} {isValid && previewRows.length > 1 && ( Förhandsgranskning Så tolkas dina data med den valda mappningen
Datum Beskrivning Belopp {previewRows.slice(1, 6).map((row, i) => { const amountStr = row[amountCol] || '0' const amount = decimalSep === ',' ? parseFloat(amountStr.replace(/\s/g, '').replace(',', '.')) : parseFloat(amountStr.replace(/\s/g, '')) return ( {row[dateCol] || '–'} {row[descCol] || '–'} = 0 ? 'text-green-600' : 'text-red-600' }`} > {!isNaN(amount) ? formatCurrency(amount) : amountStr} ) })}
)} {/* Navigation */}
) }