import styles from "@/app/tabStyles/indexStyles"; import ShowCard from "@/components/ui/ShowCard"; import { useShowContext } from "@/contexts/ShowContext"; import { useStreamingServiceContext } from "@/contexts/StreamingServiceContext"; import { router } from "expo-router"; import React from "react"; import { ActivityIndicator, Image, Text, TouchableOpacity, View, } from "react-native"; import { GestureHandlerRootView, ScrollView, } from "react-native-gesture-handler"; export default function HomeScreen() { const { shows, error, loading } = useShowContext(); const { streamingServices } = useStreamingServiceContext(); const [filteredShows, setFilteredShows] = React.useState(shows); const [activeFilter, setActiveFilter] = React.useState("all"); React.useEffect(() => { setFilteredShows(shows); }, [shows]); const handleFilter = (type: string) => { setActiveFilter(type); if (type === "all") { setFilteredShows(shows); return; } if (type === "live") { const filtered = shows.filter((show) => show.running); setFilteredShows(filtered); return; } const filtered = shows.filter((show) => show.streamingService === type); setFilteredShows(filtered); }; const uniqueStreamingServices = React.useMemo(() => { const uniqueServices = new Set(shows.map((show) => show.streamingService)); return Array.from(uniqueServices); }, [shows]); if (loading) { return ( ); } if (error) { return ( Error: {error} ); } return ( FLTR {activeFilter !== "all" && ( handleFilter("all")} > ALLE )} {activeFilter !== "live" && ( handleFilter("live")} > LIVE )} {uniqueStreamingServices.map((serviceName) => { const streamingService = streamingServices[ `assets.images.streamingServices.${serviceName.toLowerCase()}` ]; return ( handleFilter(serviceName)} > ); })} {filteredShows.map((show) => { const showLiveBadge = show.running; const streamingService = streamingServices[ `assets.images.streamingServices.${show.streamingService.toLowerCase()}` ]; return ( router.push({ pathname: "/showDetails", params: { id: String(show.id), title: show.title, bannerUri: show.bannerUri, description: show.description, concept: show.concept, genres: show.genres, streamingService: show.streamingService, logoUri: show.logoUri, running: String(show.running), }, }) } imageUri={show.bannerUri} streamingServiceUri={streamingService} genres={show.genres} {...(showLiveBadge ? { liveBadgeText: "LIVE", liveBadgeContainerStyle: styles.liveBadgeContainer, } : {})} /> ); })} ); }