From 743ed6a54edf8e79ac8cfd21260616b120afb25d Mon Sep 17 00:00:00 2001 From: Geert Rademakes Date: Wed, 6 Aug 2025 10:33:16 +0200 Subject: [PATCH] fix: Prevent welcome modal from showing during playlist switches - Add isDatabaseInitialized state to track actual database status - Check for songs and playlists to determine if database is initialized - Only show welcome modal when database is truly empty - Fixes issue where modal appeared when switching playlists --- packages/frontend/src/App.tsx | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 0fa2c63..4e93726 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -70,6 +70,7 @@ const findPlaylistByName = (playlists: PlaylistNode[], name: string): PlaylistNo export default function RekordboxReader() { const { playlists, setPlaylists, loading: xmlLoading } = useXmlParser(); const [selectedSong, setSelectedSong] = useState(null); + const [isDatabaseInitialized, setIsDatabaseInitialized] = useState(false); // Memoized song selection handler to prevent unnecessary re-renders const handleSongSelect = useCallback((song: Song) => { @@ -81,6 +82,25 @@ export default function RekordboxReader() { if (!durationSeconds) return ""; return formatTotalDuration(durationSeconds); }, []); + + // Check if database is initialized (has songs or playlists) + useEffect(() => { + const checkDatabaseInitialized = async () => { + try { + // Check if there are any songs in the database + const songCount = await api.getSongCount(); + const hasPlaylists = playlists.length > 0; + setIsDatabaseInitialized(songCount > 0 || hasPlaylists); + } catch (error) { + // If we can't get the song count, assume database is not initialized + setIsDatabaseInitialized(false); + } + }; + + if (!xmlLoading) { + checkDatabaseInitialized(); + } + }, [xmlLoading, playlists.length]); const navigate = useNavigate(); const location = useLocation(); @@ -359,7 +379,7 @@ export default function RekordboxReader() { userSelect={isResizing ? 'none' : 'auto'} > {/* Welcome Modal */} - {!xmlLoading && songs.length === 0 && ( + {!xmlLoading && !isDatabaseInitialized && (