From 6cd7d5ffbf77fc9d17ec8b3aded703503ed14b85 Mon Sep 17 00:00:00 2001 From: Aleksi Lassila Date: Fri, 14 Jun 2024 00:14:46 +0300 Subject: [PATCH] fix: Fix UI state issues with integration settings --- .../Integrations/JellyfinIntegration.svelte | 43 +++++++++++-------- .../Integrations/RadarrIntegration.svelte | 31 +++++++------ .../Integrations/SonarrIntegration.svelte | 33 +++++++------- src/lib/pages/ManagePage.svelte | 3 ++ 4 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src/lib/components/Integrations/JellyfinIntegration.svelte b/src/lib/components/Integrations/JellyfinIntegration.svelte index ac717e1..b7d9f35 100644 --- a/src/lib/components/Integrations/JellyfinIntegration.svelte +++ b/src/lib/components/Integrations/JellyfinIntegration.svelte @@ -4,31 +4,26 @@ import { createEventDispatcher } from 'svelte'; import SelectField from '../SelectField.svelte'; import { jellyfinApi, type JellyfinUser } from '../../apis/jellyfin/jellyfin-api'; - import { get } from 'svelte/store'; + import { derived, get } from 'svelte/store'; const dispatch = createEventDispatcher<{ change: { baseUrl: string; apiKey: string; stale: boolean }; 'click-user': { user: JellyfinUser | undefined; users: JellyfinUser[] }; }>(); - export let baseUrl = ''; - export let apiKey = ''; - let originalBaseUrl: string | undefined; - let originalApiKey: string | undefined; + export let baseUrl = get(user)?.settings.jellyfin.baseUrl || ''; + export let apiKey = get(user)?.settings.jellyfin.apiKey || ''; + let originalBaseUrl = derived(user, (user) => user?.settings.jellyfin.baseUrl || ''); + let originalApiKey = derived(user, (user) => user?.settings.jellyfin.apiKey || ''); let timeout: ReturnType; let error = ''; let jellyfinUsers: Promise | undefined = undefined; export let jellyfinUser: JellyfinUser | undefined; - user.subscribe((user) => { - baseUrl = baseUrl || user?.settings.jellyfin.baseUrl || ''; - apiKey = apiKey || user?.settings.jellyfin.apiKey || ''; - - originalBaseUrl = baseUrl; - originalApiKey = apiKey; - - handleChange(); - }); + $: { + if ($originalBaseUrl !== baseUrl && $originalApiKey !== apiKey) handleChange(); + else dispatch('change', { baseUrl, apiKey, stale: false }); + } $: if (jellyfinUser) dispatch('change', { @@ -38,6 +33,8 @@ baseUrl && apiKey ? jellyfinUser?.Id !== get(user)?.settings.jellyfin.userId : !jellyfinUser }); + handleChange(); + function handleChange() { clearTimeout(timeout); error = ''; @@ -50,7 +47,11 @@ dispatch('change', { baseUrl: '', apiKey: '', - stale: baseUrl === '' && apiKey === '' && jellyfinUser === undefined + stale: + baseUrl === '' && + apiKey === '' && + jellyfinUser === undefined && + (baseUrl !== $originalBaseUrl || apiKey !== $originalApiKey) }); if (baseUrlCopy === '' || apiKeyCopy === '') return; @@ -62,9 +63,9 @@ if (baseUrlCopy !== baseUrl || apiKeyCopy !== apiKey) return; if (users.length) { - jellyfinUser = users.find((u) => u.Id === get(appState).user?.settings.jellyfin.userId); + jellyfinUser = users.find((u) => u.Id === get(user)?.settings.jellyfin.userId); const stale = - (baseUrlCopy !== originalBaseUrl || apiKeyCopy !== originalApiKey) && + (baseUrlCopy !== $originalBaseUrl || apiKeyCopy !== $originalApiKey) && jellyfinUser !== undefined; dispatch('change', { baseUrl: baseUrlCopy, apiKey: apiKeyCopy, stale }); } else { @@ -91,13 +92,17 @@ !!u?.length)} - on:change={handleChange}>Base Url + Base Url + !!u?.length)} - on:change={handleChange}>API Key + API Key + {#await jellyfinUsers then users} diff --git a/src/lib/components/Integrations/RadarrIntegration.svelte b/src/lib/components/Integrations/RadarrIntegration.svelte index 6577ce4..ddaaf34 100644 --- a/src/lib/components/Integrations/RadarrIntegration.svelte +++ b/src/lib/components/Integrations/RadarrIntegration.svelte @@ -3,28 +3,26 @@ import { createEventDispatcher } from 'svelte'; import { radarrApi } from '../../apis/radarr/radarr-api'; import { user } from '../../stores/user.store'; + import { derived, get } from 'svelte/store'; const dispatch = createEventDispatcher<{ change: { baseUrl: string; apiKey: string; stale: boolean }; }>(); - export let baseUrl = ''; - export let apiKey = ''; - let originalBaseUrl: string | undefined; - let originalApiKey: string | undefined; + export let baseUrl = get(user)?.settings.radarr.baseUrl || ''; + export let apiKey = get(user)?.settings.radarr.apiKey || ''; + const originalBaseUrl = derived(user, (user) => user?.settings.radarr.baseUrl || ''); + const originalApiKey = derived(user, (user) => user?.settings.radarr.apiKey || ''); let timeout: ReturnType; let error = ''; let healthCheck: Promise | undefined; - user.subscribe((user) => { - baseUrl = baseUrl || user?.settings.radarr.baseUrl || ''; - apiKey = apiKey || user?.settings.radarr.apiKey || ''; + $: { + if ($originalBaseUrl !== baseUrl && $originalApiKey !== apiKey) handleChange(); + else dispatch('change', { baseUrl, apiKey, stale: false }); + } - originalBaseUrl = baseUrl; - originalApiKey = apiKey; - - handleChange(); - }); + handleChange(); function handleChange() { clearTimeout(timeout); @@ -33,12 +31,12 @@ const baseUrlCopy = baseUrl; const apiKeyCopy = apiKey; - const stale = baseUrlCopy !== originalBaseUrl || apiKeyCopy !== originalApiKey; + const stale = baseUrlCopy !== $originalBaseUrl || apiKeyCopy !== $originalApiKey; dispatch('change', { baseUrl: '', apiKey: '', - stale: baseUrl === '' && apiKey === '' + stale: baseUrl === '' && apiKey === '' && stale }); if (baseUrlCopy === '' || apiKeyCopy === '') return; @@ -66,8 +64,9 @@
- Base Url + + Base Url + API Key
diff --git a/src/lib/components/Integrations/SonarrIntegration.svelte b/src/lib/components/Integrations/SonarrIntegration.svelte index fa5f292..0509ff8 100644 --- a/src/lib/components/Integrations/SonarrIntegration.svelte +++ b/src/lib/components/Integrations/SonarrIntegration.svelte @@ -3,42 +3,42 @@ import { sonarrApi } from '../../apis/sonarr/sonarr-api'; import { createEventDispatcher } from 'svelte'; import { user } from '../../stores/user.store'; + import { derived, get } from 'svelte/store'; const dispatch = createEventDispatcher<{ change: { baseUrl: string; apiKey: string; stale: boolean }; }>(); - export let baseUrl = ''; - export let apiKey = ''; - let originalBaseUrl: string | undefined; - let originalApiKey: string | undefined; + export let baseUrl = get(user)?.settings.sonarr.baseUrl || ''; + export let apiKey = get(user)?.settings.sonarr.apiKey || ''; + const originalBaseUrl = derived(user, (u) => u?.settings.sonarr.baseUrl || ''); + const originalApiKey = derived(user, (u) => u?.settings.sonarr.apiKey || ''); let timeout: ReturnType; let error = ''; let healthCheck: Promise | undefined; - user.subscribe((user) => { - baseUrl = baseUrl || user?.settings.sonarr.baseUrl || ''; - apiKey = apiKey || user?.settings.sonarr.apiKey || ''; + $: { + if ($originalBaseUrl !== baseUrl && $originalApiKey !== apiKey) handleChange(); + else dispatch('change', { baseUrl, apiKey, stale: false }); + } - originalBaseUrl = baseUrl; - originalApiKey = apiKey; - - handleChange(); - }); + handleChange(); function handleChange() { + console.log('handleChange', $originalBaseUrl, baseUrl, $originalApiKey, apiKey); + clearTimeout(timeout); error = ''; healthCheck = undefined; const baseUrlCopy = baseUrl; const apiKeyCopy = apiKey; - const stale = baseUrlCopy !== originalBaseUrl || apiKeyCopy !== originalApiKey; + const stale = baseUrlCopy !== $originalBaseUrl || apiKeyCopy !== $originalApiKey; dispatch('change', { baseUrl: '', apiKey: '', - stale: baseUrl === '' && apiKey === '' + stale: baseUrl === '' && apiKey === '' && stale }); if (baseUrlCopy === '' || apiKeyCopy === '') return; @@ -66,8 +66,9 @@
- Base Url + + Base Url + API Key
diff --git a/src/lib/pages/ManagePage.svelte b/src/lib/pages/ManagePage.svelte index 43dadb8..f7501da 100644 --- a/src/lib/pages/ManagePage.svelte +++ b/src/lib/pages/ManagePage.svelte @@ -310,6 +310,9 @@ +
+ Version: {REIVERR_VERSION} +
User agent: {window?.navigator?.userAgent}
Last key code: {lastKeyCode}
Last key: {lastKey}