From e16062569d34755b1bae77aed75d4ef3992b01b9 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Tue, 15 Apr 2025 23:21:34 +0200 Subject: [PATCH 1/4] feat: Add LNBits multi-currency support --- .../settings/DataSourceSettings.svelte | 26 ++++++++++++++ .../settings/ScreenSpecificSettings.svelte | 36 +++++++++++++++++-- src/lib/locales/en.json | 4 ++- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/src/lib/components/settings/DataSourceSettings.svelte b/src/lib/components/settings/DataSourceSettings.svelte index 5891573..1166625 100644 --- a/src/lib/components/settings/DataSourceSettings.svelte +++ b/src/lib/components/settings/DataSourceSettings.svelte @@ -138,5 +138,31 @@ size={$uiSettings.inputSize} /> {/if} + + + + {#if $settings.lnbitsEnabled} + + + + HTTPS + + + {/if} diff --git a/src/lib/components/settings/ScreenSpecificSettings.svelte b/src/lib/components/settings/ScreenSpecificSettings.svelte index bae67df..4aa703b 100644 --- a/src/lib/components/settings/ScreenSpecificSettings.svelte +++ b/src/lib/components/settings/ScreenSpecificSettings.svelte @@ -5,9 +5,39 @@ import ToggleHeader from '../ToggleHeader.svelte'; import { uiSettings } from '$lib/uiSettings'; import { DataSourceType } from '$lib/types/dataSource'; + import { onMount } from 'svelte'; export let settings; export let isOpen = false; + + let availableCurrencies: string[] = []; + let prevLnbitsEnabled: boolean; + + function updateCurrencies(enabled: boolean) { + if (enabled) { + fetch(`https://${$settings.lnbitsInstance}/api/v1/currencies`) + .then((res) => res.json()) + .then((data) => { + availableCurrencies = data; + }); + } else { + // Remove any currencies from actCurrencies that aren't in availableCurrencies + $settings.actCurrencies = $settings.actCurrencies.filter((curr: string) => + $settings.availableCurrencies.includes(curr) + ); + availableCurrencies = $settings.availableCurrencies; + } + } + + onMount(() => { + prevLnbitsEnabled = $settings.lnbitsEnabled; + updateCurrencies($settings.lnbitsEnabled); + }); + + $: if (prevLnbitsEnabled !== $settings.lnbitsEnabled) { + prevLnbitsEnabled = $settings.lnbitsEnabled; + updateCurrencies($settings.lnbitsEnabled); + } @@ -104,9 +134,9 @@
{$_('section.settings.currencies')}
{$_('restartRequired')} - {#if $settings.availableCurrencies} - {#each $settings.availableCurrencies as c} - + {#if availableCurrencies} + {#each availableCurrencies as c} +
Date: Tue, 15 Apr 2025 23:24:29 +0200 Subject: [PATCH 2/4] chore: remove fetchEurPrice as it is not used anymore --- .../settings/ScreenSpecificSettings.svelte | 10 --------- src/routes/Status.svelte | 3 --- static/swagger.json | 4 ---- static/swagger.yml | 3 --- tests/playwright/test.ts | 22 ------------------- tests/shared.ts | 1 - 6 files changed, 43 deletions(-) diff --git a/src/lib/components/settings/ScreenSpecificSettings.svelte b/src/lib/components/settings/ScreenSpecificSettings.svelte index 4aa703b..2def344 100644 --- a/src/lib/components/settings/ScreenSpecificSettings.svelte +++ b/src/lib/components/settings/ScreenSpecificSettings.svelte @@ -105,16 +105,6 @@ size={$uiSettings.inputSize} col={{ md: '6', xl: '12', xxl: '6' }} /> - - {#if !$settings.actCurrencies} - - {/if}
{$_('section.settings.screens')}
diff --git a/src/routes/Status.svelte b/src/routes/Status.svelte index a659af0..4b6e76c 100644 --- a/src/routes/Status.svelte +++ b/src/routes/Status.svelte @@ -306,9 +306,6 @@ {/if} {/if} - {#if $settings.fetchEurPrice} - {$_('section.status.fetchEuroNote')} - {/if}

{/if} diff --git a/static/swagger.json b/static/swagger.json index 04efa57..a1b9ee9 100644 --- a/static/swagger.json +++ b/static/swagger.json @@ -343,10 +343,6 @@ "Settings": { "type": "object", "properties": { - "fetchEurPrice": { - "type": "boolean", - "description": "Fetch EUR price instead of USD" - }, "fgColor": { "type": "string", "default": 16777215, diff --git a/static/swagger.yml b/static/swagger.yml index 15d918c..8db6611 100644 --- a/static/swagger.yml +++ b/static/swagger.yml @@ -232,9 +232,6 @@ components: Settings: type: object properties: - fetchEurPrice: - type: boolean - description: Fetch EUR price instead of USD fgColor: type: string default: 16777215 diff --git a/tests/playwright/test.ts b/tests/playwright/test.ts index 92a600d..3e482bb 100644 --- a/tests/playwright/test.ts +++ b/tests/playwright/test.ts @@ -73,28 +73,6 @@ test('time values can not be zero or negative', async ({ page }) => { } }); -test('info message when fetch eur price is enabled', async ({ page }) => { - delete (settingsJson as { actCurrencies?: string[] }).actCurrencies; - - await page.goto('/'); - await page.getByRole('button', { name: 'Show all' }).click(); - - const inputField = 'input#fetchEurPrice'; - const switchElement = await page.locator(inputField); - - expect(switchElement).toBeTruthy(); - const isSwitchEnabled = await switchElement.isChecked(); - expect(isSwitchEnabled).toBe(false); - - await expect(page.getByText('the WS Price connection will show')).toBeHidden(); - - await switchElement.click(); - const isSwitchNowEnabled = await switchElement.isChecked(); - expect(isSwitchNowEnabled).toBe(true); - - await expect(page.getByText('the WS Price connection will show')).toBeVisible(); -}); - test('npub values will be converted to hex pubkeys', async ({ page }) => { await page.goto('/'); await page.getByRole('button', { name: 'Show all' }).click(); diff --git a/tests/shared.ts b/tests/shared.ts index 9ee570c..4b3de93 100644 --- a/tests/shared.ts +++ b/tests/shared.ts @@ -84,7 +84,6 @@ export const settingsJson = { mcapBigChar: true, mdnsEnabled: true, otaEnabled: true, - fetchEurPrice: false, hostnamePrefix: 'btclock', hostname: 'btclock-d60b14', ip: '192.168.20.231', From 901809a29b72d2229badd5f43586507bc341f834 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Wed, 16 Apr 2025 00:01:05 +0200 Subject: [PATCH 3/4] feat: Add multiselect for currencies --- package.json | 3 +- .../settings/ScreenSpecificSettings.svelte | 41 ++++++++++--------- yarn.lock | 27 ++++++++++++ 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 8596a5c..64441f0 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,8 @@ "nostr-tools": "^2.7.1", "patch-package": "^8.0.0", "svelte-bootstrap-icons": "^3.1.1", - "svelte-i18n": "^4.0.0" + "svelte-i18n": "^4.0.0", + "svelte-multiselect": "^11.0.0-rc.1" }, "resolutions": { "es5-ext": ">=0.10.64", diff --git a/src/lib/components/settings/ScreenSpecificSettings.svelte b/src/lib/components/settings/ScreenSpecificSettings.svelte index 2def344..1933dd7 100644 --- a/src/lib/components/settings/ScreenSpecificSettings.svelte +++ b/src/lib/components/settings/ScreenSpecificSettings.svelte @@ -6,7 +6,7 @@ import { uiSettings } from '$lib/uiSettings'; import { DataSourceType } from '$lib/types/dataSource'; import { onMount } from 'svelte'; - + import MultiSelect from 'svelte-multiselect'; export let settings; export let isOpen = false; @@ -29,14 +29,23 @@ } } + let activeCurrencies: { label: string; value: string }[] = []; + onMount(() => { prevLnbitsEnabled = $settings.lnbitsEnabled; updateCurrencies($settings.lnbitsEnabled); }); - $: if (prevLnbitsEnabled !== $settings.lnbitsEnabled) { - prevLnbitsEnabled = $settings.lnbitsEnabled; - updateCurrencies($settings.lnbitsEnabled); + $: { + if (prevLnbitsEnabled !== $settings.lnbitsEnabled) { + prevLnbitsEnabled = $settings.lnbitsEnabled; + updateCurrencies($settings.lnbitsEnabled); + } + if (!activeCurrencies.length) { + activeCurrencies = $settings.actCurrencies; + } else { + $settings.actCurrencies = activeCurrencies; + } } @@ -124,22 +133,14 @@
{$_('section.settings.currencies')}
{$_('restartRequired')} - {#if availableCurrencies} - {#each availableCurrencies as c} - -
- - -
- - {/each} - {/if} + + +
{/if} diff --git a/yarn.lock b/yarn.lock index d62380b..6509164 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3144,11 +3144,38 @@ svelte-i18n@^4.0.0: sade "^1.8.1" tiny-glob "^0.2.9" +svelte-multiselect@^11.0.0-rc.1: + version "11.0.0-rc.1" + resolved "https://registry.yarnpkg.com/svelte-multiselect/-/svelte-multiselect-11.0.0-rc.1.tgz#1238a6b768902afbdde23165e6dc922555f27342" + integrity sha512-dyUzja9AJfDejfafDj6PKNk3F51HavArevkJxZ0upJKUlPnPx5pDKY24BQYQvUpitTqVtsEoHevKr93WebBtwA== + dependencies: + svelte "4.2.12" + svelte-preprocess@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz#fdc1f9dc41b6f22bf8b1f059e9f21eaaae181eeb" integrity sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA== +svelte@4.2.12: + version "4.2.12" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.12.tgz#13d98d2274d24d3ad216c8fdc801511171c70bb1" + integrity sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug== + dependencies: + "@ampproject/remapping" "^2.2.1" + "@jridgewell/sourcemap-codec" "^1.4.15" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/estree" "^1.0.1" + acorn "^8.9.0" + aria-query "^5.3.0" + axobject-query "^4.0.0" + code-red "^1.0.3" + css-tree "^2.3.1" + estree-walker "^3.0.3" + is-reference "^3.0.1" + locate-character "^3.0.0" + magic-string "^0.30.4" + periscopic "^3.1.0" + svelte@^4.2.19: version "4.2.19" resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.19.tgz#4e6e84a8818e2cd04ae0255fcf395bc211e61d4c" From e18ae066b48134636785c501c561e116e69f2fe7 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Wed, 16 Apr 2025 00:03:18 +0200 Subject: [PATCH 4/4] fix: LNBits Price source switch --- src/lib/components/settings/ScreenSpecificSettings.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/components/settings/ScreenSpecificSettings.svelte b/src/lib/components/settings/ScreenSpecificSettings.svelte index 1933dd7..207f4c4 100644 --- a/src/lib/components/settings/ScreenSpecificSettings.svelte +++ b/src/lib/components/settings/ScreenSpecificSettings.svelte @@ -25,6 +25,7 @@ $settings.actCurrencies = $settings.actCurrencies.filter((curr: string) => $settings.availableCurrencies.includes(curr) ); + activeCurrencies = $settings.actCurrencies; availableCurrencies = $settings.availableCurrencies; } }