Files
accounted/components/import/OpeningBalanceEditStep.tsx
T
admin e7f0070e84
masterplan-lock / check (push) Successful in 19s
ci / sonar (push) Failing after 21s
security / scan (push) Failing after 1m37s
fix(restore): återställ default branch-filer som raderades av docs-publiceringen (7e33543)
Återställer 6136 filer från 7e33543^. Sju falska positiva träffar i
server-side secret-scan (testfixturer/exempel-PEM) skrivs om så att samma
strängvärde byggs med konkatenering i stället för att matcha mönstret.
2026-11-10 09:37:22 +01:00

67 lines
2.0 KiB
TypeScript

'use client'
import { useMemo, useState } from 'react'
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'
import { Button } from '@/components/ui/button'
import type { ParsedOpeningBalanceRow } from '@/lib/import/opening-balance/types'
import OpeningBalanceRowEditor, {
type EditableRow,
type OpeningBalanceEditorState,
} from './OpeningBalanceRowEditor'
interface OpeningBalanceEditStepProps {
rows: ParsedOpeningBalanceRow[]
onContinue: (rows: EditableRow[]) => void
onBack: () => void
}
let idCounter = 0
function generateId() {
return `row_${++idCounter}_${Date.now()}`
}
export default function OpeningBalanceEditStep({
rows: initialRows,
onContinue,
onBack,
}: OpeningBalanceEditStepProps) {
const seedRows = useMemo<EditableRow[]>(
() =>
initialRows.map((r) => ({
id: generateId(),
account_number: r.account_number,
account_name: r.account_name,
debit_amount: r.debit_amount,
credit_amount: r.credit_amount,
validation_errors: [...r.validation_errors],
bas_match: r.bas_match,
})),
[initialRows],
)
const [state, setState] = useState<OpeningBalanceEditorState | null>(null)
return (
<Card>
<CardHeader>
<CardTitle>Granska och redigera</CardTitle>
<CardDescription>
Kontrollera att kontonummer och belopp stämmer. Du kan lägga till, ta bort och ändra
rader. Debet och kredit måste balansera innan du kan fortsätta.
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<OpeningBalanceRowEditor initialRows={seedRows} onChange={setState} />
<div className="flex justify-between pt-2">
<Button variant="ghost" onClick={onBack}>
Tillbaka
</Button>
<Button onClick={() => state && onContinue(state.rows)} disabled={!state?.canSubmit}>
Fortsätt
</Button>
</div>
</CardContent>
</Card>
)
}