import { convertToDMS, kmhToKnot } from "@/utils/geom"; import { MaterialIcons } from "@expo/vector-icons"; import { useEffect, useRef, useState } from "react"; import { Animated, TouchableOpacity, View } from "react-native"; import { Description } from "./Description"; type GPSInfoPanelProps = { gpsData: Model.GPSResonse | undefined; }; const GPSInfoPanel = ({ gpsData }: GPSInfoPanelProps) => { const [isExpanded, setIsExpanded] = useState(true); const [panelHeight, setPanelHeight] = useState(0); const translateY = useRef(new Animated.Value(0)).current; const blockBottom = useRef(new Animated.Value(0)).current; useEffect(() => { Animated.timing(translateY, { toValue: isExpanded ? 0 : 200, // Dịch chuyển xuống 200px khi thu gọn duration: 500, useNativeDriver: true, }).start(); }, [isExpanded]); useEffect(() => { const targetBottom = isExpanded ? panelHeight + 12 : 10; Animated.timing(blockBottom, { toValue: targetBottom, duration: 500, useNativeDriver: false, }).start(); }, [isExpanded, panelHeight, blockBottom]); const togglePanel = () => { setIsExpanded(!isExpanded); }; return ( <> {/* Khối hình vuông */} setPanelHeight(event.nativeEvent.layout.height)} > {/* Nút toggle ở top-right */} {/* Nút floating để mở lại panel khi thu gọn */} {!isExpanded && ( )} ); }; export default GPSInfoPanel;