import { useCallback, useEffect, useRef, useState } from 'react' import { Animated, Image, Pressable, RefreshControl, ScrollView, StyleSheet, Text, View } from 'react-native' import { useRouter } from 'expo-router' import { useSafeAreaInsets } from 'react-native-safe-area-context' import { api, imageUrl } from '../../src/lib/api' import type { Release, ScheduleDay } from '../../src/lib/types' import { colors, radius, spacing } from '../../src/lib/theme' import Row from '../../src/components/Row' import Loader from '../../src/components/Loader' import Footer from '../../src/components/Footer' export default function HomeScreen() { const router = useRouter() const insets = useSafeAreaInsets() const [latest, setLatest] = useState(null) const [recommended, setRecommended] = useState([]) const [today, setToday] = useState([]) const [refreshing, setRefreshing] = useState(false) const heroOpacity = useRef(new Animated.Value(0)).current const heroTranslate = useRef(new Animated.Value(16)).current const buttonScale = useRef(new Animated.Value(1)).current const load = useCallback(async () => { const [latestRes, recommendedRes, scheduleRes] = await Promise.all([ api.latest(21).catch(() => [] as Release[]), api.recommended(14).catch(() => [] as Release[]), api.scheduleNow().catch(() => null), ]) setLatest(latestRes) setRecommended(recommendedRes) setToday(scheduleRes?.today?.filter((s) => s.release) ?? []) }, []) useEffect(() => { load() }, [load]) useEffect(() => { if (!latest) return heroOpacity.setValue(0) heroTranslate.setValue(16) Animated.parallel([ Animated.timing(heroOpacity, { toValue: 1, duration: 450, useNativeDriver: true }), Animated.timing(heroTranslate, { toValue: 0, duration: 450, useNativeDriver: true }), ]).start() }, [latest, heroOpacity, heroTranslate]) async function onRefresh() { setRefreshing(true) await load() setRefreshing(false) } function pressButtonIn() { Animated.spring(buttonScale, { toValue: 0.94, useNativeDriver: true, speed: 50 }).start() } function pressButtonOut() { Animated.spring(buttonScale, { toValue: 1, useNativeDriver: true, speed: 50 }).start() } if (!latest) { return } const hero = latest[0] return ( } > {hero && ( Новинка {hero.name.main} {!!hero.description && ( {hero.description} )} router.push(`/title/${hero.alias || hero.id}`)} onPressIn={pressButtonIn} onPressOut={pressButtonOut} > Смотреть )} s.release)} />