import { useMemo, useState } from 'react' import { Badge, Button, Card, EmptyState } from '../ui' import Pager from './Pager' import { pageOf } from '../../lib/financeFormat' import { isNegText, noticeProps } from '../../lib/financeUi' import { transactionRows } from '../../lib/financeView' const PAGE_SIZE = 50 export const TRANSACTIONS_ANCHOR = 'finanzen-buchungen' /** * Block 7: Buchungen. Alle gespeicherten Buchungen, neueste zuerst, 50 je Seite: Datum, Gegenpartei mit * Verwendungszweck (zweizeilig), Betrag mit Vorzeichen, Zuordnung (bei offenen Buchungen der stärkste Vorschlag als * Text) und der Knopf „Zuordnen“ bzw. „Ändern“. Vorgemerkte Buchungen (PDNG) tragen „vorgemerkt“. Die Daten kommen * vom Aufrufer (useFinanceTransactions), damit Seite und Zuordnen-Dialog dieselbe Liste benutzen. * onAssign(buchung) öffnet den Dialog. Schmal (Wrapper .fin-body bis 640 px) wird jede Zeile ein Raster: Datum und * Betrag / Gegenpartei und Verwendungszweck / Zuordnung und Knopf. Beträge mit „−“ stehen in Rot (fin-neg). */ export default function TransactionTable({ transactions, stripeFehler = '', loaded = false, loading = false, error = '', onReload, onAssign }) { const [page, setPage] = useState(1) const rows = useMemo(() => transactionRows(transactions), [transactions]) const paged = pageOf(rows, page, PAGE_SIZE) let body if (!loaded && loading) { body = (
{error || 'Die Buchungen konnten nicht geladen werden.'}
| Datum | Gegenpartei und Verwendungszweck | Betrag | Zuordnung | Aktion |
|---|---|---|---|---|
| {row.dateText} |
{row.counterparty}
{row.remittance && (
{row.remittance}
)}
|
{row.amountText} |
{row.suggestionText} }
{row.note && Notiz: {row.note} }
|
{row.action && ( )} |
Die Buchungen konnten nicht neu geladen werden: {error}{' '}
)} {stripeFehler && ({stripeFehler}
)} {body}