From 2c9072299e7fd3c5ba09fe13acd099a0b2c73934 Mon Sep 17 00:00:00 2001 From: AdityasahuX07 Date: Tue, 9 Dec 2025 23:17:19 +0530 Subject: [PATCH] Add Show/Hide Titles for Library. The Show/Hide Titles for Library because when the name of movie/show is large then it create uneven gap between library which not look good. And also If anyone want can toggle keep on for show titles in settings. --- src/screens/LibraryScreen.tsx | 110 ++++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 46 deletions(-) diff --git a/src/screens/LibraryScreen.tsx b/src/screens/LibraryScreen.tsx index 470575e9..71f048dc 100644 --- a/src/screens/LibraryScreen.tsx +++ b/src/screens/LibraryScreen.tsx @@ -36,6 +36,7 @@ import { useTraktContext } from '../contexts/TraktContext'; import TraktIcon from '../../assets/rating-icons/trakt.svg'; import { traktService, TraktService, TraktImages } from '../services/traktService'; import { TraktLoadingSpinner } from '../components/common/TraktLoadingSpinner'; +import { useSettings } from '../hooks/useSettings'; // ADD THIS IMPORT // Define interfaces for proper typing interface LibraryItem extends StreamingContent { @@ -87,6 +88,7 @@ function getGridLayout(screenWidth: number): { numColumns: number; itemWidth: nu const TraktItem = React.memo(({ item, width, navigation, currentTheme }: { item: TraktDisplayItem; width: number; navigation: any; currentTheme: any }) => { const [posterUrl, setPosterUrl] = useState(null); + const { settings } = useSettings(); // ADD THIS useEffect(() => { let isMounted = true; @@ -107,7 +109,7 @@ const TraktItem = React.memo(({ item, width, navigation, currentTheme }: { item: navigation.navigate('Metadata', { id: item.imdbId, type: item.type }); } }, [navigation, item.imdbId, item.type]); - + return ( )} - - {item.name} - + {/* Conditionally render title based on settings.showPosterTitles */} + {settings.showPosterTitles && ( + + {item.name} + + )} ); @@ -168,17 +173,17 @@ const SkeletonLoader = () => { const renderSkeletonItem = () => ( - - ); @@ -212,7 +217,8 @@ const LibraryScreen = () => { const [selectedItem, setSelectedItem] = useState(null); const insets = useSafeAreaInsets(); const { currentTheme } = useTheme(); - + const { settings } = useSettings(); // ADD THIS + // Trakt integration const { isAuthenticated: traktAuthenticated, @@ -272,14 +278,14 @@ const LibraryScreen = () => { setLoading(true); try { const items = await catalogService.getLibraryItems(); - + // Sort by date added (most recent first) const sortedItems = items.sort((a, b) => { const timeA = (a as any).addedToLibraryAt || 0; const timeB = (b as any).addedToLibraryAt || 0; return timeB - timeA; // Descending order (newest first) }); - + // Load watched status for each item from AsyncStorage const updatedItems = await Promise.all(sortedItems.map(async (item) => { // Map StreamingContent to LibraryItem shape @@ -313,7 +319,7 @@ const LibraryScreen = () => { const timeB = (b as any).addedToLibraryAt || 0; return timeB - timeA; // Descending order (newest first) }); - + // Sync watched status on update const updatedItems = await Promise.all(sortedItems.map(async (item) => { // Map StreamingContent to LibraryItem shape @@ -403,7 +409,7 @@ const LibraryScreen = () => { activeOpacity={0.7} > - + { )} - - {item.name} - + {/* Conditionally render title based on settings.showPosterTitles */} + {settings.showPosterTitles && ( + + {item.name} + + )} ); @@ -444,11 +453,11 @@ const LibraryScreen = () => { > - {folder.name} @@ -458,6 +467,12 @@ const LibraryScreen = () => { + {/* Conditionally render folder title based on settings.showPosterTitles */} + {settings.showPosterTitles && ( + + {folder.name} + + )} ); @@ -489,9 +504,12 @@ const LibraryScreen = () => { )} - - Trakt collections - + {/* Conditionally render title based on settings.showPosterTitles */} + {settings.showPosterTitles && ( + + Trakt collections + + )} ); @@ -724,8 +742,8 @@ const LibraryScreen = () => { Your Trakt collections will appear here once you start using Trakt - { // Show content for specific folder const folderItems = getTraktFolderItems(selectedTraktFolder); - + if (folderItems.length === 0) { const folderName = traktFolders.find(f => f.id === selectedTraktFolder)?.name || 'Collection'; return ( @@ -767,8 +785,8 @@ const LibraryScreen = () => { This collection is empty - { const renderFilter = (filterType: 'trakt' | 'movies' | 'series', label: string, iconName: keyof typeof MaterialIcons.glyphMap) => { const isActive = filter === filterType; - + return ( { const emptySubtitle = 'Add some content to your library to see it here'; return ( - @@ -869,8 +887,8 @@ const LibraryScreen = () => { {emptySubtitle} - { {/* Fixed position header background to prevent shifts */} - + {/* Header Section with proper top spacing */} @@ -930,14 +948,14 @@ const LibraryScreen = () => { }} activeOpacity={0.7} > - - {selectedTraktFolder + {selectedTraktFolder ? traktFolders.find(f => f.id === selectedTraktFolder)?.name || 'Collection' : 'Trakt Collection' } @@ -951,10 +969,10 @@ const LibraryScreen = () => { onPress={() => navigation.navigate('Calendar')} activeOpacity={0.7} > - @@ -1352,4 +1370,4 @@ const styles = StyleSheet.create({ }, }); -export default LibraryScreen; +export default LibraryScreen;