// Welche Währungen die Oberfläche kennt – und wie sie geschrieben werden. // // Muss zur Erlaubnisliste des Servers passen (backend/app/waehrungen.py): // genau die Währungen, für die es einen EZB-Referenzkurs gibt. Ohne Kurs // liesse sich ein Betrag nie umrechnen – er stünde in keiner Summe. // // Reihenfolge: das Naheliegende zuerst, der Rest alphabetisch. Wer CHF sucht, // soll nicht an zwanzig Währungen vorbeiscrollen, die er nie braucht. const VORNE = ["EUR", "CHF", "USD", "GBP"]; const REST = [ "AUD", "BGN", "BRL", "CAD", "CNY", "CZK", "DKK", "HKD", "HUF", "IDR", "ILS", "INR", "ISK", "JPY", "KRW", "MXN", "MYR", "NOK", "NZD", "PHP", "PLN", "RON", "SEK", "SGD", "THB", "TRY", "ZAR", ]; export const WAEHRUNGEN = [...VORNE, ...REST]; // Zeichen, wo es eines gibt, das kürzer und eindeutiger ist als das Kürzel. // CHF steht bewusst NICHT drin: "Fr." ist weniger geläufig als CHF selbst, // und ein Zeichen, das niemand liest, hilft niemandem. Mehrfach belegte // Zeichen ($, kr) bleiben ebenfalls draussen – dort ist das Kürzel die // klarere Angabe, und "US$" neben "CA$" zu unterscheiden ist Rätselraten. const ZEICHEN = { EUR: "€", USD: "$", GBP: "£", JPY: "¥", CNY: "¥", ILS: "₪", INR: "₹", KRW: "₩", PHP: "₱", THB: "฿", TRY: "₺", PLN: "zł", BRL: "R$", }; /** Wie eine Währung in Listen und Auswahlfeldern steht. */ export function waehrungLabel(code) { const zeichen = ZEICHEN[code]; return zeichen ? `${zeichen} ${code}` : code; } /** Nur das Zeichen, wo es eines gibt – sonst das Kürzel. */ export function waehrungZeichen(code) { return ZEICHEN[code] || code; } // Was ohne eigene Einstellung angeboten wird. Der Rest bleibt erreichbar, // muss aber erst eingeschaltet werden: Dreissig Zeilen in einem Auswahlfeld // sind kein Gewinn, wenn man drei davon braucht. export const STANDARD_AKTIV = ["EUR", "CHF", "USD"]; /** * Die Währungen, die ein Auswahlfeld zeigen soll. * * ``aktiv`` ist die Einstellung des Nutzers. ``dazu`` sind Werte, die trotzdem * dabei sein müssen – allen voran der gerade gesetzte: Sonst stünde ein Konto * in USD vor einem Feld ohne USD und wechselte beim nächsten Speichern * stillschweigend die Währung. */ export function angeboteneWaehrungen(aktiv, ...dazu) { const erlaubt = new Set(WAEHRUNGEN); const gewaehlt = (aktiv && aktiv.length ? aktiv : STANDARD_AKTIV).filter((w) => erlaubt.has(w), ); const menge = new Set(gewaehlt); for (const w of dazu) if (w && erlaubt.has(w)) menge.add(w); return WAEHRUNGEN.filter((w) => menge.has(w)); } /** Die Einstellung als Liste – gespeichert wird sie als "EUR,CHF,USD". */ export function ausEinstellung(wert) { if (!wert) return [...STANDARD_AKTIV]; const liste = wert .split(",") .map((s) => s.trim().toUpperCase()) .filter((s) => WAEHRUNGEN.includes(s)); return liste.length ? liste : [...STANDARD_AKTIV]; }