diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 7f36ea0..a3104b9 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -154,12 +154,12 @@ export default function RekordboxReader() { } }, [currentPlaylist, playlists, navigate, xmlLoading]); - // Reset switching state when songs are loaded + // Reset switching state when loading starts (immediate transition) useEffect(() => { - if (songs.length > 0 && isSwitchingPlaylist) { + if (songsLoading && isSwitchingPlaylist) { setIsSwitchingPlaylist(false); } - }, [songs.length, isSwitchingPlaylist]); + }, [songsLoading, isSwitchingPlaylist]); const handlePlaylistSelect = (name: string) => { // Set switching state immediately for visual feedback diff --git a/packages/frontend/src/components/PaginatedSongList.tsx b/packages/frontend/src/components/PaginatedSongList.tsx index 29c610c..70eccd6 100644 --- a/packages/frontend/src/components/PaginatedSongList.tsx +++ b/packages/frontend/src/components/PaginatedSongList.tsx @@ -409,12 +409,12 @@ export const PaginatedSongList: React.FC = memo(({ {songItems} - {/* Loading indicator for infinite scroll */} - {loading && ( + {/* Loading indicator for infinite scroll or playlist switching */} + {(loading || isSwitchingPlaylist) && ( - Loading more songs... + {isSwitchingPlaylist ? 'Switching playlist...' : 'Loading more songs...'} )} @@ -440,21 +440,12 @@ export const PaginatedSongList: React.FC = memo(({ )} - {/* No results message or playlist switching indicator */} - {!loading && songs.length === 0 && ( + {/* No results message */} + {!loading && !isSwitchingPlaylist && songs.length === 0 && ( - {isSwitchingPlaylist ? ( - <> - - - Switching playlist... - - - ) : ( - - {searchQuery ? 'No songs found matching your search' : 'No songs available'} - - )} + + {searchQuery ? 'No songs found matching your search' : 'No songs available'} + )} diff --git a/packages/frontend/src/hooks/usePaginatedSongs.ts b/packages/frontend/src/hooks/usePaginatedSongs.ts index e0bc952..249548a 100644 --- a/packages/frontend/src/hooks/usePaginatedSongs.ts +++ b/packages/frontend/src/hooks/usePaginatedSongs.ts @@ -138,7 +138,7 @@ export const usePaginatedSongs = (options: UsePaginatedSongsOptions = {}) => { }; }, []); - // Handle playlist changes - optimized for immediate response + // Handle playlist changes - streamlined for immediate response useEffect(() => { if (previousPlaylistRef.current !== playlistName) { // Update refs immediately @@ -146,16 +146,14 @@ export const usePaginatedSongs = (options: UsePaginatedSongsOptions = {}) => { currentSearchQueryRef.current = searchQuery; previousPlaylistRef.current = playlistName; - // Clear songs IMMEDIATELY for instant visual feedback + // Clear all state immediately for instant visual feedback setSongs([]); - - // Batch remaining state updates together to reduce re-renders - React.startTransition(() => { - setHasMore(true); - setCurrentPage(1); - setSearchQuery(initialSearch); - setError(null); - }); + setTotalSongs(0); + setTotalDuration(undefined); + setHasMore(true); + setCurrentPage(1); + setSearchQuery(initialSearch); + setError(null); // Load immediately loadPage(1, initialSearch, playlistName);