import { IconSymbol } from "@/components/ui/icon-symbol"; import React, { useRef, useState } from "react"; import { Animated, Text, TouchableOpacity, View } from "react-native"; import styles from "./style/CrewListTable.styles"; // --------------------------- // 🧩 Interface // --------------------------- interface CrewMember { id: string; maDinhDanh: string; ten: string; chucVu: string; } // --------------------------- // ⚓ Dữ liệu mẫu // --------------------------- const data: CrewMember[] = [ { id: "10", maDinhDanh: "ChuTau", ten: "Nguyễn Nhật Minh", chucVu: "Chủ tàu", }, { id: "1", maDinhDanh: "TV001", ten: "Nguyễn Văn A", chucVu: "Thuyền trưởng", }, { id: "2", maDinhDanh: "TV002", ten: "Trần Văn B", chucVu: "Máy trưởng" }, { id: "3", maDinhDanh: "TV003", ten: "Lê Văn C", chucVu: "Thủy thủ" }, ]; const CrewListTable: React.FC = () => { const [collapsed, setCollapsed] = useState(true); const [contentHeight, setContentHeight] = useState(0); const animatedHeight = useRef(new Animated.Value(0)).current; 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) => { console.log("Crew ID:", crewId); }; 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 */} Mã định danh Tên Chức vụ {/* Body */} {data.map((item) => ( {item.maDinhDanh} handleCrewPress(item.id)} > {item.ten} {item.chucVu} ))} {/* Footer */} Tổng cộng {tongThanhVien} {/* Bảng hiển thị với animation */} {/* Header */} Mã định danh Tên Chức vụ {/* Body */} {data.map((item) => ( {item.maDinhDanh} handleCrewPress(item.id)} > {item.ten} {item.chucVu} ))} {/* Footer */} Tổng cộng {tongThanhVien} ); }; export default CrewListTable;