Die Money-Komponente gab den Betrag immer durch Math.abs() aus; das Vorzeichen kam nur über das optionale sign-Prop. Kontostände (Konten-Seite und Dashboard- Karte) übergeben keines – ein überzogenes Konto oder eine Kreditkartenschuld sah dadurch positiv aus, während die Gesamtsumme korrekt negativ rechnete. Genau dieser Widerspruch: alle Konten scheinbar im Plus, Gesamt im Minus. Ohne sign steht der Wert für sich selbst und wird jetzt mit echtem Vorzeichen (und rot) ausgegeben; mit sign bleibt es wie bisher, weil dort die Richtung aus der Buchungsart kommt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.4 KiB
React
39 lines
1.4 KiB
React
import { formatMoney } from "../format";
|
||
|
||
// Zeigt einen Betrag in Kontowährung und – falls abweichend – zusätzlich den in
|
||
// die Hauptwährung umgerechneten Wert.
|
||
//
|
||
// `sign` ist für Listen gedacht, in denen die Richtung aus der Buchungsart kommt
|
||
// (Ausgabe/Einnahme): dort wird der Betrag ohne Vorzeichen geführt und hier mit
|
||
// +/− und Farbe versehen. OHNE `sign` steht der Wert für sich selbst – etwa ein
|
||
// Kontostand – und wird mit seinem echten Vorzeichen ausgegeben. Früher lief er
|
||
// auch dann durch Math.abs(), wodurch ein überzogenes Konto oder eine
|
||
// Kreditkartenschuld fälschlich positiv aussah.
|
||
export default function Money({
|
||
cents,
|
||
currency = "EUR",
|
||
baseCents = null,
|
||
baseCurrency = "EUR",
|
||
sign = null, // "pos" | "neg" | null
|
||
showConverted = true,
|
||
}) {
|
||
const negativ = !sign && Number(cents) < 0;
|
||
const cls = sign ? `amount ${sign}` : negativ ? "amount neg" : "amount";
|
||
const prefix = sign === "pos" ? "+" : sign === "neg" ? "−" : "";
|
||
const showBase =
|
||
showConverted && baseCents != null && currency !== baseCurrency;
|
||
return (
|
||
<span className="money">
|
||
<span className={cls}>
|
||
{prefix}
|
||
{formatMoney(sign ? Math.abs(cents) : cents, currency)}
|
||
</span>
|
||
{showBase && (
|
||
<span className="amount-converted">
|
||
≈ {formatMoney(sign ? Math.abs(baseCents) : baseCents, baseCurrency)}
|
||
</span>
|
||
)}
|
||
</span>
|
||
);
|
||
}
|