From 0e9426b6c60237a4c4569edfaa51211522f15c79 Mon Sep 17 00:00:00 2001 From: tapframe Date: Mon, 30 Jun 2025 19:28:28 +0530 Subject: [PATCH] Refactor ContentItem and MetadataScreen for improved loading handling and UI consistency This update removes unnecessary state management for image loading in the ContentItem component, streamlining the image display logic. In the MetadataScreen, loading states are now handled more effectively, ensuring a loading screen is shown when metadata is not ready. The overall structure has been simplified for better readability and maintainability. --- src/components/home/ContentItem.tsx | 20 -------- src/screens/MetadataScreen.tsx | 74 +++++++++-------------------- 2 files changed, 23 insertions(+), 71 deletions(-) diff --git a/src/components/home/ContentItem.tsx b/src/components/home/ContentItem.tsx index 8c1ea5e..1c7728c 100644 --- a/src/components/home/ContentItem.tsx +++ b/src/components/home/ContentItem.tsx @@ -53,8 +53,6 @@ const POSTER_WIDTH = posterLayout.posterWidth; const ContentItem = React.memo(({ item, onPress }: ContentItemProps) => { const [menuVisible, setMenuVisible] = useState(false); const [isWatched, setIsWatched] = useState(false); - const [imageLoaded, setImageLoaded] = useState(false); - const [imageError, setImageError] = useState(false); const { currentTheme } = useTheme(); const handleLongPress = useCallback(() => { @@ -108,25 +106,7 @@ const ContentItem = React.memo(({ item, onPress }: ContentItemProps) => { placeholder={{ uri: 'https://via.placeholder.com/300x450' }} placeholderContentFit="cover" recyclingKey={item.id} - onLoadStart={() => { - setImageLoaded(false); - setImageError(false); - }} - onLoadEnd={() => setImageLoaded(true)} - onError={() => { - setImageError(true); - setImageLoaded(true); - }} /> - {(!imageLoaded || imageError) && ( - - {!imageError ? ( - - ) : ( - - )} - - )} {isWatched && ( diff --git a/src/screens/MetadataScreen.tsx b/src/screens/MetadataScreen.tsx index e553d24..a91fcc5 100644 --- a/src/screens/MetadataScreen.tsx +++ b/src/screens/MetadataScreen.tsx @@ -281,6 +281,11 @@ const MetadataScreen: React.FC = () => { return ErrorComponent; } + // Show loading screen if metadata is not yet available + if (loading || !isContentReady) { + return ; + } + return ( { /> {/* Cast Section with skeleton when loading */} - {loadingCast ? ( - - - - {[...Array(4)].map((_, index) => ( - - ))} - - - ) : ( - - )} + {/* Recommendations Section with skeleton when loading */} {type === 'movie' && ( - loadingRecommendations ? ( - - - - {[...Array(3)].map((_, index) => ( - - ))} - - - ) : ( - - ) + )} {/* Series/Movie Content with episode skeleton when loading */} {type === 'series' ? ( - (loadingSeasons || Object.keys(groupedEpisodes).length === 0) ? ( - - - - {[...Array(6)].map((_, index) => ( - - ))} - - - ) : ( - - ) + ) : ( metadata && )}