diff --git a/apps/web/src/pages/home-page.tsx b/apps/web/src/pages/home-page.tsx
index a29b96b..bc7730b 100644
--- a/apps/web/src/pages/home-page.tsx
+++ b/apps/web/src/pages/home-page.tsx
@@ -1,5 +1,6 @@
import { useQuery } from '@tanstack/react-query'
import { ChevronLeft, ChevronRight } from 'lucide-react'
+import { ErrorPanel, LoadingPanel } from '@/components/query-state'
import { type Track, coverArtUrl, fetchHome, fetchRecentlyPlayed, fetchTracks } from '@/lib/api'
import { Link } from 'react-router-dom'
import { usePlayerStore } from '@/stores/player-store'
@@ -24,6 +25,23 @@ export function HomePage() {
const recentTracks = recentTracksQuery.data?.items ?? homeQuery.data?.recentTracks ?? []
const popularAlbums = [...recentAlbums].reverse()
+ if (homeQuery.isLoading || tracksQuery.isLoading) {
+ return
+ }
+
+ if (homeQuery.isError || tracksQuery.isError) {
+ return (
+
{
+ void homeQuery.refetch()
+ void tracksQuery.refetch()
+ void recentTracksQuery.refetch()
+ }}
+ title="Не получилось собрать главную"
+ />
+ )
+ }
+
return (
diff --git a/apps/web/src/pages/tracks-page.tsx b/apps/web/src/pages/tracks-page.tsx
index 65b45cc..0d8ebde 100644
--- a/apps/web/src/pages/tracks-page.tsx
+++ b/apps/web/src/pages/tracks-page.tsx
@@ -1,4 +1,5 @@
import { useQuery } from '@tanstack/react-query'
+import { ErrorPanel, LoadingPanel } from '@/components/query-state'
import { Search } from 'lucide-react'
import { FavoriteToggle } from '@/components/favorite-toggle'
import { coverArtUrl, fetchFavorites, fetchTracks } from '@/lib/api'
@@ -21,6 +22,14 @@ export function TracksPage() {
const tracks = tracksQuery.data?.items ?? []
const favoriteTrackIds = new Set((favoritesQuery.data?.tracks ?? []).map((track) => track.id))
+ if (tracksQuery.isLoading) {
+ return
+ }
+
+ if (tracksQuery.isError) {
+ return void tracksQuery.refetch()} title="Не получилось загрузить треки" />
+ }
+
return (
navigate('/search')} />