import { IconSymbol } from "@/components/ui/icon-symbol"; import { useTrip } from "@/state/use-trip"; import React, { useRef, useState } from "react"; import { Animated, Text, TouchableOpacity, View } from "react-native"; import CrewDetailModal from "./modal/CrewDetailModal"; import styles from "./style/CrewListTable.styles"; const CrewListTable: React.FC = () => { const [collapsed, setCollapsed] = useState(true); const [contentHeight, setContentHeight] = useState(0); const animatedHeight = useRef(new Animated.Value(0)).current; const [modalVisible, setModalVisible] = useState(false); const [selectedCrew, setSelectedCrew] = useState( null ); const { trip } = useTrip(); const data: Model.TripCrews[] = trip?.crews ?? []; const tongThanhVien = data.length; const handleToggle = () => { const toValue = collapsed ? contentHeight : 0; Animated.timing(animatedHeight, { toValue, duration: 300, useNativeDriver: false, }).start(); setCollapsed((prev) => !prev); }; const handleCrewPress = (crewId: string) => { const crew = data.find((item) => item.Person.personal_id === crewId); if (crew) { setSelectedCrew(crew); setModalVisible(true); } }; const handleCloseModal = () => { setModalVisible(false); setSelectedCrew(null); }; return ( {/* Header toggle */} Danh sách thuyền viên {collapsed && ( {tongThanhVien} )} {/* Nội dung ẩn để đo chiều cao */} { const height = event.nativeEvent.layout.height; if (height > 0 && contentHeight === 0) { setContentHeight(height); } }} > {/* Header */} Tên Chức vụ {/* Body */} {data.map((item) => ( handleCrewPress(item.Person.personal_id)} > {item.Person.name} {item.role} ))} {/* Footer */} Tổng cộng {tongThanhVien} {/* Bảng hiển thị với animation */} {/* Header */} Tên Chức vụ {/* Body */} {data.map((item) => ( handleCrewPress(item.Person.personal_id)} > {item.Person.name} {item.role} ))} {/* Footer */} Tổng cộng {tongThanhVien} {/* Modal chi tiết thuyền viên */} ); }; export default CrewListTable;