From ce92828290a2b5ec39df2a34dac8ccab6d612779 Mon Sep 17 00:00:00 2001 From: BoulderBadgeDad Date: Sat, 13 Jun 2026 11:03:40 -0700 Subject: [PATCH] #867 UX: open Tidal discovery modal in 'discovering' phase so the empty/loading modal isn't interactable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the modal opens instantly (before data loads), it was rendered in the 'fresh' phase — showing clickable Start Discovery / Wing It buttons over an empty table, even though discovery is already auto-starting. Open it in 'discovering' instead: the footer becomes the non-interactive 'Discovering matches…' info line and the progress text reads 'Starting discovery…' instead of 'Click Start Discovery to begin…'. Only Close stays clickable while the table loads. --- webui/static/sync-services.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/webui/static/sync-services.js b/webui/static/sync-services.js index f8445edd..c2eb1399 100644 --- a/webui/static/sync-services.js +++ b/webui/static/sync-services.js @@ -547,6 +547,12 @@ async function openTidalDiscoveryModal(playlistId, playlistData) { // ~10s. Now the modal shows immediately with a loading note and tracks // stream in once discovery starts. We return early so the shared open at // the bottom isn't reached for this path. (#867 UX) + // + // Open in the 'discovering' phase (not 'fresh') because discovery is + // auto-starting: that renders the non-interactive "Discovering matches…" + // footer instead of clickable Start Discovery / Wing It buttons, which + // must NOT be clickable while the table is still empty/loading. (#867 UX) + youtubePlaylistStates[fakeUrlHash].phase = 'discovering'; openYouTubeDiscoveryModal(fakeUrlHash); const _descEl = document.querySelector(`#youtube-discovery-modal-${fakeUrlHash} .modal-description`); if (_descEl) _descEl.textContent = 'Loading playlist from Tidal…';