From 267e2ce41161b71232b729d2601bcd885ee4ae85 Mon Sep 17 00:00:00 2001 From: Richard R Date: Sat, 30 May 2026 10:05:24 -0600 Subject: [PATCH] fix admin features tab reset/flash on tab switches --- src/components/admin/AdminFeaturesPanel.tsx | 39 +++++++++++---------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/components/admin/AdminFeaturesPanel.tsx b/src/components/admin/AdminFeaturesPanel.tsx index 3c3c6da..96fc72c 100644 --- a/src/components/admin/AdminFeaturesPanel.tsx +++ b/src/components/admin/AdminFeaturesPanel.tsx @@ -64,7 +64,6 @@ export function AdminFeaturesPanel() { if (!data) return; setDraft({ ...data.values }); setDirty(new Set()); - setEditingChangelogUrl(false); }, [data]); useEffect(() => { @@ -145,10 +144,14 @@ export function AdminFeaturesPanel() { providerType: entry.providerType, })); }, [sharedProviders]); + const valueFor = (key: string) => + Object.prototype.hasOwnProperty.call(draft, key) + ? draft[key] + : data?.values?.[key]; const currentProviderId = - typeof draft.defaultTtsProvider === 'string' - ? draft.defaultTtsProvider + typeof valueFor('defaultTtsProvider') === 'string' + ? (valueFor('defaultTtsProvider') as string) : ''; const currentSharedEntry: SharedProviderEntry | undefined = sharedProviders.find( (p) => p.slug === currentProviderId, @@ -162,7 +165,7 @@ export function AdminFeaturesPanel() { } as ProviderOption : fallbackShared; const selectedProviderOption = effectiveSelectedProvider; - const showTtsDailyLimitInputs = !Boolean(draft.disableTtsRateLimit); + const showTtsDailyLimitInputs = !Boolean(valueFor('disableTtsRateLimit')); const handleProviderChange = (opt: ProviderOption) => { updateDraft('defaultTtsProvider', opt.id); @@ -253,7 +256,7 @@ export function AdminFeaturesPanel() { { if (!checked) { const ok = confirm( @@ -269,7 +272,7 @@ export function AdminFeaturesPanel() { updateDraft('enableTtsProvidersTab', checked)} right={renderSource('enableTtsProvidersTab')} variant="flat" @@ -277,7 +280,7 @@ export function AdminFeaturesPanel() { updateDraft('showAllProviderModels', checked)} right={renderSource('showAllProviderModels')} variant="flat" @@ -285,7 +288,7 @@ export function AdminFeaturesPanel() { updateDraft('disableTtsRateLimit', checked)} right={renderSource('disableTtsRateLimit')} variant="flat" @@ -312,7 +315,7 @@ export function AdminFeaturesPanel() { min={1} step={1} className={inputClass} - value={String(draft.ttsDailyLimitAnonymous ?? '')} + value={String(valueFor('ttsDailyLimitAnonymous') ?? '')} onChange={(event) => updatePositiveIntDraft('ttsDailyLimitAnonymous', event.target.value)} /> @@ -326,7 +329,7 @@ export function AdminFeaturesPanel() { min={1} step={1} className={inputClass} - value={String(draft.ttsDailyLimitAuthenticated ?? '')} + value={String(valueFor('ttsDailyLimitAuthenticated') ?? '')} onChange={(event) => updatePositiveIntDraft('ttsDailyLimitAuthenticated', event.target.value)} /> @@ -340,7 +343,7 @@ export function AdminFeaturesPanel() { min={1} step={1} className={inputClass} - value={String(draft.ttsIpDailyLimitAnonymous ?? '')} + value={String(valueFor('ttsIpDailyLimitAnonymous') ?? '')} onChange={(event) => updatePositiveIntDraft('ttsIpDailyLimitAnonymous', event.target.value)} /> @@ -354,7 +357,7 @@ export function AdminFeaturesPanel() { min={1} step={1} className={inputClass} - value={String(draft.ttsIpDailyLimitAuthenticated ?? '')} + value={String(valueFor('ttsIpDailyLimitAuthenticated') ?? '')} onChange={(event) => updatePositiveIntDraft('ttsIpDailyLimitAuthenticated', event.target.value)} /> @@ -371,7 +374,7 @@ export function AdminFeaturesPanel() { updateDraft('changelogFeedUrl', event.target.value)} placeholder="https://docs.openreader.richardr.dev/changelog/manifest.json" /> @@ -388,7 +391,7 @@ export function AdminFeaturesPanel() { updateDraft('enableUserSignups', checked)} right={renderSource('enableUserSignups')} variant="flat" @@ -396,7 +399,7 @@ export function AdminFeaturesPanel() { updateDraft('enableAudiobookExport', checked)} right={renderSource('enableAudiobookExport')} variant="flat" @@ -404,7 +407,7 @@ export function AdminFeaturesPanel() { updateDraft('enableDocxConversion', checked)} right={renderSource('enableDocxConversion')} variant="flat" @@ -412,7 +415,7 @@ export function AdminFeaturesPanel() { updateDraft('enableDestructiveDeleteActions', checked)} right={renderSource('enableDestructiveDeleteActions')} variant="flat"