diff --git a/client/src/components/hls-preview-thumbnail.tsx b/client/src/components/hls-preview-thumbnail.tsx index 9d946e7..f3df706 100644 --- a/client/src/components/hls-preview-thumbnail.tsx +++ b/client/src/components/hls-preview-thumbnail.tsx @@ -266,10 +266,10 @@ export default function HLSPreviewThumbnail({ video, onClick, className = "" }: {/* Loading state */} {!isVideoLoaded && ( -
-
-
-
+
+
+
+
)}
diff --git a/client/src/components/loading-spinner.tsx b/client/src/components/loading-spinner.tsx new file mode 100644 index 0000000..b41497d --- /dev/null +++ b/client/src/components/loading-spinner.tsx @@ -0,0 +1,28 @@ +interface LoadingSpinnerProps { + size?: 'sm' | 'md' | 'lg'; + text?: string; + className?: string; +} + +export default function LoadingSpinner({ size = 'md', text = 'Loading...', className = '' }: LoadingSpinnerProps) { + const sizeClasses = { + sm: 'w-6 h-6', + md: 'w-10 h-10', + lg: 'w-16 h-16' + }; + + const textSizeClasses = { + sm: 'text-sm', + md: 'text-base', + lg: 'text-lg' + }; + + return ( +
+
+
+
+
{text}
+
+ ); +} \ No newline at end of file diff --git a/client/src/components/netflix-grid.tsx b/client/src/components/netflix-grid.tsx index 9ef7df6..b0cff60 100644 --- a/client/src/components/netflix-grid.tsx +++ b/client/src/components/netflix-grid.tsx @@ -113,23 +113,14 @@ export default function NetflixGrid({ videos, isLoading }: NetflixGridProps) { if (isLoading && videos.length === 0) { return ( -
- {Array.from({ length: 3 }).map((_, categoryIndex) => ( -
-
-
- {Array.from({ length: 6 }).map((_, index) => ( -
-
-
-
-
-
-
- ))} -
+
+
+
+
- ))} +

go4.video

+

Loading videos...

+
); } @@ -137,6 +128,9 @@ export default function NetflixGrid({ videos, isLoading }: NetflixGridProps) { if (videos.length === 0) { return (
+
+
+
No videos found
diff --git a/client/src/components/thumbnail-generator.tsx b/client/src/components/thumbnail-generator.tsx index f19ba18..42ccd9c 100644 --- a/client/src/components/thumbnail-generator.tsx +++ b/client/src/components/thumbnail-generator.tsx @@ -271,7 +271,12 @@ export default function ThumbnailGenerator({ {!isVideoLoaded && (
-
+
+
+
+
+
go4.video
+
)}
diff --git a/client/src/components/video-ads.tsx b/client/src/components/video-ads.tsx index 3538fcb..6e7e51e 100644 --- a/client/src/components/video-ads.tsx +++ b/client/src/components/video-ads.tsx @@ -26,10 +26,13 @@ export default function VideoAds({ videoId }: VideoAdsProps) { if (isLoading) { return ( - -
-
-
+ +
+
+
+
+
go4.video
+
Loading ads...
); @@ -43,7 +46,7 @@ export default function VideoAds({ videoId }: VideoAdsProps) { ); } - const { ads = [], totalAds = 0 } = data || {}; + const { ads = [], totalAds = 0 } = (data as any) || {}; if (totalAds === 0) { return ( diff --git a/client/src/components/video-grid.tsx b/client/src/components/video-grid.tsx index 8943f73..555273f 100644 --- a/client/src/components/video-grid.tsx +++ b/client/src/components/video-grid.tsx @@ -34,16 +34,14 @@ export default function VideoGrid({ videos, isLoading, hasMore, onLoadMore, view if (isLoading && videos.length === 0) { return ( -
- {Array.from({ length: 8 }).map((_, index) => ( -
-
-
-
-
-
+
+
+
+
- ))} +

go4.video

+

Loading videos...

+
); } @@ -51,6 +49,9 @@ export default function VideoGrid({ videos, isLoading, hasMore, onLoadMore, view if (videos.length === 0) { return (
+
+
+
No videos found
@@ -87,12 +88,14 @@ export default function VideoGrid({ videos, isLoading, hasMore, onLoadMore, view > {isLoading ? ( <> -
- Wird geladen... +
+
+
+ Loading more... ) : ( <> - Weitere Videos laden + Load more videos )} diff --git a/client/src/pages/FolxStadlPage.tsx b/client/src/pages/FolxStadlPage.tsx index ed4b25f..2e875a8 100644 --- a/client/src/pages/FolxStadlPage.tsx +++ b/client/src/pages/FolxStadlPage.tsx @@ -78,7 +78,13 @@ export default function FolxStadlPage() { if (isLoading) { return (
-
Wird geladen...
+
+
+
+
+

go4.video

+

Loading FOLX STADL...

+
); } diff --git a/client/src/pages/GeschichteLiedPage.tsx b/client/src/pages/GeschichteLiedPage.tsx index 5cf3e8c..d1fcdba 100644 --- a/client/src/pages/GeschichteLiedPage.tsx +++ b/client/src/pages/GeschichteLiedPage.tsx @@ -80,7 +80,13 @@ export default function GeschichteLiedPage() { if (isLoading) { return (
-
Wird geladen...
+
+
+
+
+

go4.video

+

Loading GESCHICHTE VUM LIED...

+
); } diff --git a/client/src/pages/GipfelstammtischPage.tsx b/client/src/pages/GipfelstammtischPage.tsx index 0271018..e43e2e3 100644 --- a/client/src/pages/GipfelstammtischPage.tsx +++ b/client/src/pages/GipfelstammtischPage.tsx @@ -80,7 +80,13 @@ export default function GipfelstammtischPage() { if (isLoading) { return (
-
Wird geladen...
+
+
+
+
+

go4.video

+

Loading GIPFELSTAMMTISCH...

+
); } diff --git a/client/src/pages/VideoPage.tsx b/client/src/pages/VideoPage.tsx index ea7ab1a..e51de47 100644 --- a/client/src/pages/VideoPage.tsx +++ b/client/src/pages/VideoPage.tsx @@ -256,7 +256,13 @@ export default function VideoPage() { if (videoLoading) { return (
-
Lade Video...
+
+
+
+
+

go4.video

+

Loading video...

+
); } @@ -264,7 +270,13 @@ export default function VideoPage() { if (!currentVideo) { return (
-
Video nicht gefunden
+
+
+
+
+

go4.video

+

Video not found

+
); }