import { Button } from '@/components/ui/button'; import { Label } from '@/components/ui/label'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { parseAmount, parseDate } from '@/lib/file-parser'; import type { BalanceColumnMapping, ColumnOption, ParsedRow, } from '@/types/balance-import'; import { DateFormat } from '@/types/import'; import { __ } from '@/utils/i18n'; interface ImportBalanceStepMappingProps { columnOptions: ColumnOption[]; columnMapping: BalanceColumnMapping; dateFormat: DateFormat; dateFormatDetected: boolean; parsedData: ParsedRow[]; currencyCode: string; onMappingChange: (field: keyof BalanceColumnMapping, value: string) => void; onDateFormatChange: (format: DateFormat) => void; onNext: () => void; onBack: () => void; } export function ImportBalanceStepMapping({ columnOptions, columnMapping, dateFormat, dateFormatDetected, parsedData, currencyCode, onMappingChange, onDateFormatChange, onNext, onBack, }: ImportBalanceStepMappingProps) { const isValid = columnMapping.balance_date && columnMapping.balance; const previewBalances = parsedData.slice(0, 3).map((row) => { const date = columnMapping.balance_date ? parseDate( row[columnMapping.balance_date] as string | number, dateFormat, ) : null; const balance = columnMapping.balance ? parseAmount(row[columnMapping.balance] as string | number) : null; return { date: date ? date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', }) : 'Invalid date', balance: balance !== null ? new Intl.NumberFormat('en-US', { style: 'currency', currency: currencyCode, }).format(balance) : 'Invalid amount', }; }); return (
{isValid && previewBalances.length > 0 && (
{previewBalances.map((balance, index) => (
{balance.date} {balance.balance}
))}
)} {!dateFormatDetected && (
onDateFormatChange(value as DateFormat) } >
)}
); }