From bc9f397ada32d9f23a956900396fc1f45cecbfc5 Mon Sep 17 00:00:00 2001 From: tapframe Date: Sat, 21 Jun 2025 16:01:34 +0530 Subject: [PATCH] Refactor CatalogSection, ContinueWatchingSection, and ThisWeekSection for improved styling and layout consistency This update enhances the CatalogSection, ContinueWatchingSection, and ThisWeekSection components by refining styles, adjusting layout properties, and improving text visibility. Key changes include updated font sizes, weights, and colors for better readability, as well as modifications to button styles and spacing for a more cohesive user interface. Additionally, the gradient overlays and item containers have been optimized for a more polished appearance. --- src/components/home/CatalogSection.tsx | 41 ++- .../home/ContinueWatchingSection.tsx | 23 +- src/components/home/ThisWeekSection.tsx | 332 ++++++++++++------ 3 files changed, 258 insertions(+), 138 deletions(-) diff --git a/src/components/home/CatalogSection.tsx b/src/components/home/CatalogSection.tsx index 78b25f8f..2b043083 100644 --- a/src/components/home/CatalogSection.tsx +++ b/src/components/home/CatalogSection.tsx @@ -80,13 +80,8 @@ const CatalogSection = ({ catalog }: CatalogSectionProps) => { > - {catalog.name} - + {catalog.name} + @@ -96,10 +91,10 @@ const CatalogSection = ({ catalog }: CatalogSectionProps) => { addonId: catalog.addon }) } - style={styles.seeAllButton} + style={styles.viewAllButton} > - See More - + View All + @@ -130,41 +125,45 @@ const CatalogSection = ({ catalog }: CatalogSectionProps) => { const styles = StyleSheet.create({ catalogContainer: { - marginBottom: 24, + marginBottom: 28, }, catalogHeader: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', paddingHorizontal: 16, - marginBottom: 12, + marginBottom: 16, }, titleContainer: { position: 'relative', }, catalogTitle: { - fontSize: 19, - fontWeight: '700', - letterSpacing: 0.2, + fontSize: 24, + fontWeight: '800', + letterSpacing: 0.5, marginBottom: 4, }, titleUnderline: { position: 'absolute', bottom: -2, left: 0, - width: 35, - height: 2, - borderRadius: 1, + width: 40, + height: 3, + borderRadius: 2, opacity: 0.8, }, - seeAllButton: { + viewAllButton: { flexDirection: 'row', alignItems: 'center', - gap: 4, + paddingVertical: 8, + paddingHorizontal: 10, + borderRadius: 20, + backgroundColor: 'rgba(255,255,255,0.1)', }, - seeAllText: { + viewAllText: { fontSize: 14, fontWeight: '600', + marginRight: 4, }, catalogList: { paddingHorizontal: 16, diff --git a/src/components/home/ContinueWatchingSection.tsx b/src/components/home/ContinueWatchingSection.tsx index 7aeda06c..b86e5438 100644 --- a/src/components/home/ContinueWatchingSection.tsx +++ b/src/components/home/ContinueWatchingSection.tsx @@ -277,13 +277,8 @@ const ContinueWatchingSection = React.forwardRef((props, re - Continue Watching - + Continue Watching + @@ -386,7 +381,7 @@ const ContinueWatchingSection = React.forwardRef((props, re const styles = StyleSheet.create({ container: { - marginBottom: 24, + marginBottom: 28, paddingTop: 0, marginTop: 12, }, @@ -395,15 +390,15 @@ const styles = StyleSheet.create({ justifyContent: 'space-between', alignItems: 'center', paddingHorizontal: 16, - marginBottom: 12, + marginBottom: 16, }, titleContainer: { position: 'relative', }, title: { - fontSize: 20, - fontWeight: '700', - letterSpacing: 0.3, + fontSize: 24, + fontWeight: '800', + letterSpacing: 0.5, marginBottom: 4, }, titleUnderline: { @@ -411,8 +406,8 @@ const styles = StyleSheet.create({ bottom: -2, left: 0, width: 40, - height: 2, - borderRadius: 1, + height: 3, + borderRadius: 2, opacity: 0.8, }, wideList: { diff --git a/src/components/home/ThisWeekSection.tsx b/src/components/home/ThisWeekSection.tsx index d83f5cf1..166f4681 100644 --- a/src/components/home/ThisWeekSection.tsx +++ b/src/components/home/ThisWeekSection.tsx @@ -22,8 +22,8 @@ import { parseISO, isThisWeek, format, isAfter, isBefore } from 'date-fns'; import Animated, { FadeIn, FadeInRight } from 'react-native-reanimated'; const { width } = Dimensions.get('window'); -const ITEM_WIDTH = width * 0.85; -const ITEM_HEIGHT = 180; +const ITEM_WIDTH = width * 0.75; // Reduced width for better spacing +const ITEM_HEIGHT = 220; // Increased height for better proportions interface ThisWeekEpisode { id: string; @@ -163,7 +163,10 @@ export const ThisWeekSection = () => { if (loading) { return ( - + + + Loading this week's episodes... + ); } @@ -186,84 +189,134 @@ export const ThisWeekSection = () => { return ( handleEpisodePress(item)} - activeOpacity={0.7} + activeOpacity={0.8} > - - - - - - - - {isReleased ? 'Released' : 'Coming Soon'} - - - - {item.vote_average > 0 && ( - + + + + {/* Enhanced gradient overlay */} + + {/* Top badges */} + + - - {item.vote_average.toFixed(1)} + + {isReleased ? 'Available' : 'Upcoming'} - )} - - - - - {item.seriesName} - - - S{item.season}:E{item.episode} - {item.title} - - {item.overview ? ( - - {item.overview} + + {item.vote_average > 0 && ( + + + + {item.vote_average.toFixed(1)} + + + )} + + + {/* Content area */} + + + + {item.seriesName} + + + + S{item.season}:E{item.episode} + + + + + + {item.title} - ) : null} - - {formattedDate} - - - + + {item.overview && ( + + {item.overview} + + )} + + + + + {formattedDate} + + + + + ); }; return ( - + - This Week + + This Week + + - View All - + View All + @@ -274,8 +327,10 @@ export const ThisWeekSection = () => { horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.listContent} - snapToInterval={ITEM_WIDTH + 12} + snapToInterval={ITEM_WIDTH + 16} decelerationRate="fast" + snapToAlignment="start" + ItemSeparatorComponent={() => } /> ); @@ -283,109 +338,180 @@ export const ThisWeekSection = () => { const styles = StyleSheet.create({ container: { - marginVertical: 16, + marginVertical: 20, }, header: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', paddingHorizontal: 16, - marginBottom: 12, + marginBottom: 16, + }, + titleContainer: { + position: 'relative', }, title: { - fontSize: 19, - fontWeight: '700', - letterSpacing: 0.2, + fontSize: 24, + fontWeight: '800', + letterSpacing: 0.5, + marginBottom: 4, + }, + titleUnderline: { + position: 'absolute', + bottom: -2, + left: 0, + width: 40, + height: 3, + borderRadius: 2, + opacity: 0.8, }, viewAllButton: { flexDirection: 'row', alignItems: 'center', + paddingVertical: 8, + paddingHorizontal: 10, + borderRadius: 20, + backgroundColor: 'rgba(255,255,255,0.1)', }, viewAllText: { fontSize: 14, + fontWeight: '600', marginRight: 4, }, listContent: { - paddingHorizontal: 8, + paddingHorizontal: 20, + paddingBottom: 8, }, loadingContainer: { - padding: 20, + padding: 32, alignItems: 'center', }, + loadingText: { + marginTop: 12, + fontSize: 16, + fontWeight: '500', + }, episodeItemContainer: { width: ITEM_WIDTH, height: ITEM_HEIGHT, - marginHorizontal: 6, }, episodeItem: { width: '100%', height: '100%', - borderRadius: 8, + borderRadius: 16, overflow: 'hidden', + shadowOffset: { width: 0, height: 8 }, + shadowOpacity: 0.3, + shadowRadius: 12, + elevation: 12, + }, + imageContainer: { + width: '100%', + height: '100%', + position: 'relative', }, poster: { width: '100%', height: '100%', + borderRadius: 16, }, gradient: { position: 'absolute', left: 0, right: 0, + top: 0, bottom: 0, - height: '80%', - justifyContent: 'flex-end', - padding: 16, - }, - badgeContainer: { - flexDirection: 'row', - alignItems: 'center', justifyContent: 'space-between', - marginBottom: 12, + padding: 16, + borderRadius: 16, }, - badge: { + topBadgeContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'flex-start', + }, + statusBadge: { flexDirection: 'row', alignItems: 'center', - paddingHorizontal: 8, - paddingVertical: 4, - borderRadius: 4, + paddingHorizontal: 10, + paddingVertical: 6, + borderRadius: 20, + borderWidth: 1, + backgroundColor: 'rgba(0,0,0,0.3)', }, releasedBadge: {}, upcomingBadge: {}, - badgeText: { - fontSize: 10, - fontWeight: 'bold', - marginLeft: 4, + statusBadgeText: { + fontSize: 11, + fontWeight: '700', + color: '#FFFFFF', + marginLeft: 6, + textTransform: 'uppercase', + letterSpacing: 0.5, }, ratingBadge: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 8, paddingVertical: 4, - borderRadius: 4, + borderRadius: 16, + borderWidth: 1, + backgroundColor: 'rgba(0,0,0,0.3)', }, ratingText: { - fontSize: 10, - fontWeight: 'bold', + fontSize: 11, + fontWeight: '700', + color: '#FFFFFF', marginLeft: 4, }, - content: { - width: '100%', + contentArea: { + justifyContent: 'flex-end', + }, + seriesHeader: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: 8, }, seriesName: { - fontSize: 16, - fontWeight: 'bold', - marginBottom: 4, + fontSize: 18, + fontWeight: '700', + flex: 1, + marginRight: 8, + }, + episodeNumber: { + paddingHorizontal: 8, + paddingVertical: 4, + borderRadius: 12, + borderWidth: 1, + borderColor: 'rgba(255,255,255,0.2)', + }, + episodeNumberText: { + fontSize: 12, + fontWeight: '700', + letterSpacing: 0.5, }, episodeTitle: { - fontSize: 14, - marginBottom: 4, + fontSize: 15, + fontWeight: '600', + marginBottom: 6, + lineHeight: 20, }, overview: { - fontSize: 12, - marginBottom: 4, + fontSize: 13, + lineHeight: 18, + marginBottom: 8, + opacity: 0.9, + }, + dateContainer: { + flexDirection: 'row', + alignItems: 'center', + marginTop: 4, }, releaseDate: { - fontSize: 12, - fontWeight: 'bold', + fontSize: 13, + fontWeight: '600', + marginLeft: 6, + letterSpacing: 0.3, }, }); \ No newline at end of file