import React, { useEffect, useRef, useState } from 'react'; import { View, Text, Animated, TouchableOpacity } from 'react-native'; export default function LinearProgressBar({ duration = 10 }) { const [timeLeft, setTimeLeft] = useState(duration); const [isRunning, setIsRunning] = useState(false); const progress = useRef(new Animated.Value(0)).current; const intervalRef = useRef(null); const startAnimation = () => { setIsRunning(true); progress.setValue(0); setTimeLeft(duration); Animated.timing(progress, { toValue: 1, duration: duration * 1000, useNativeDriver: false, }).start(() => setIsRunning(false)); //@ts-ignore intervalRef.current = setInterval(() => { setTimeLeft((prev) => (prev > 0 ? prev - 1 : 0)); }, 1000); }; useEffect(() => { //@ts-ignore return () => clearInterval(intervalRef.current); }, []); const progressWidth = progress.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"], }); return ( Temps restant : {timeLeft}s {isRunning ? 'En cours...' : 'Play'} ); }