diff --git a/modules/fx-rates/assets/fx-rates-currencies.js b/modules/fx-rates/assets/fx-rates-currencies.js index 57a5693..14e3476 100644 --- a/modules/fx-rates/assets/fx-rates-currencies.js +++ b/modules/fx-rates/assets/fx-rates-currencies.js @@ -12,6 +12,7 @@ .filter(Boolean) ); let displayBase = String(page.display_base_currency || '').trim().toUpperCase(); + const savedDisplayBase = String(page.saved_display_base_currency || displayBase || '').trim().toUpperCase(); const nodes = { tokenList: root.querySelector('[data-fx-token-list]'), @@ -152,6 +153,15 @@ nodes.displayBaseSelect?.addEventListener('change', () => { displayBase = String(nodes.displayBaseSelect?.value || '').trim().toUpperCase(); renderHiddenInputs(); + const url = new URL(window.location.href); + if (displayBase) { + url.searchParams.set('base', displayBase); + } else if (savedDisplayBase) { + url.searchParams.set('base', savedDisplayBase); + } else { + url.searchParams.delete('base'); + } + window.location.href = url.toString(); }); renderAll(); diff --git a/modules/fx-rates/pages/currencies.php b/modules/fx-rates/pages/currencies.php index 1c9c62d..ecec922 100644 --- a/modules/fx-rates/pages/currencies.php +++ b/modules/fx-rates/pages/currencies.php @@ -52,7 +52,8 @@ if (strtoupper((string) ($_SERVER['REQUEST_METHOD'] ?? 'GET')) === 'POST') { $catalog = is_array($settings['currency_catalog'] ?? null) ? $settings['currency_catalog'] : []; $preferredCurrencies = is_array($settings['preferred_currencies'] ?? null) ? $settings['preferred_currencies'] : []; -$displayBaseCurrency = strtoupper(trim((string) ($settings['display_base_currency'] ?? $settings['default_base_currency'] ?? 'EUR'))); +$savedDisplayBaseCurrency = strtoupper(trim((string) ($settings['display_base_currency'] ?? $settings['default_base_currency'] ?? 'EUR'))); +$requestedDisplayBaseCurrency = strtoupper(trim((string) ($_GET['base'] ?? ''))); $latest = $service->latestStatus(); $recentFetches = $service->recentFetches(15); @@ -86,10 +87,29 @@ foreach ($currencies as $currency) { } } +$catalogCodes = []; +foreach ($currencies as $currency) { + $catalogCodes[(string) $currency['code']] = true; +} + +$displayBaseCurrency = $requestedDisplayBaseCurrency !== '' ? $requestedDisplayBaseCurrency : $savedDisplayBaseCurrency; +if ($displayBaseCurrency === '' || (!isset($catalogCodes[$displayBaseCurrency]) && $preferredCurrencies !== [])) { + $displayBaseCurrency = $savedDisplayBaseCurrency !== '' ? $savedDisplayBaseCurrency : (string) ($preferredCurrencies[0] ?? 'EUR'); +} + +$tableCurrencies = []; +foreach ([$displayBaseCurrency, ...$preferredCurrencies] as $currency) { + $currency = strtoupper(trim((string) $currency)); + if ($currency !== '' && !in_array($currency, $tableCurrencies, true)) { + $tableCurrencies[] = $currency; + } +} + $currencyPageData = json_encode([ 'currencies' => $currencies, 'preferred_currencies' => array_values(array_unique(array_map(static fn (mixed $code): string => strtoupper(trim((string) $code)), $preferredCurrencies))), 'display_base_currency' => $displayBaseCurrency, + 'saved_display_base_currency' => $savedDisplayBaseCurrency, ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $tabs = [ @@ -177,7 +197,7 @@ $tabs = [ Zeit Stichtag Fetch-Basis - + Provider @@ -185,18 +205,18 @@ $tabs = [ - Noch keine Abrufe vorhanden. + Noch keine Abrufe vorhanden. snapshotByFetchId((int) ($fetch['id'] ?? 0), $displayBaseCurrency, $preferredCurrencies); + $snapshot = $service->snapshotByFetchId((int) ($fetch['id'] ?? 0), $displayBaseCurrency, $tableCurrencies); $rates = is_array($snapshot['rates'] ?? null) ? $snapshot['rates'] : []; ?> - +