import { IconSymbol } from "@/components/ui/icon-symbol"; 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"; // --------------------------- // 🧩 Interface // --------------------------- interface CrewMember { id: string; maDinhDanh: string; ten: string; chucVu: string; ngaySinh?: string; cccd?: string; soDienThoai?: string; diaChi?: string; ngayVaoLam?: string; trinhDoChuyenMon?: string; bangCap?: string; tinhTrang?: string; } // --------------------------- // ⚓ Dữ liệu mẫu // --------------------------- const data: CrewMember[] = [ { id: "10", maDinhDanh: "ChuTau", ten: "Nguyễn Nhật Minh", chucVu: "Chủ tàu", ngaySinh: "08/06/2006", cccd: "079085012345", soDienThoai: "0912345678", diaChi: "Hà Nội", ngayVaoLam: "", trinhDoChuyenMon: "Thuyền trưởng hạng I", bangCap: "Bằng thuyền trưởng xa bờ", tinhTrang: "Đang làm việc", }, { id: "1", maDinhDanh: "TV001", ten: "Nguyễn Văn A", chucVu: "Thuyền trưởng", ngaySinh: "20/05/1988", cccd: "079088011111", soDienThoai: "0901234567", diaChi: "456 Đường Cảng, Phường Thanh Khê, Đà Nẵng", ngayVaoLam: "15/06/2015", trinhDoChuyenMon: "Thuyền trưởng hạng II", bangCap: "Bằng thuyền trưởng ven bờ", tinhTrang: "Đang làm việc", }, { id: "2", maDinhDanh: "TV002", ten: "Trần Văn B", chucVu: "Máy trưởng", ngaySinh: "10/08/1990", cccd: "079090022222", soDienThoai: "0987654321", diaChi: "789 Đường Nguyễn Văn Linh, Quận Sơn Trà, Đà Nẵng", ngayVaoLam: "20/03/2016", trinhDoChuyenMon: "Máy trưởng hạng III", bangCap: "Bằng máy trưởng ven bờ", tinhTrang: "Đang làm việc", }, { id: "3", maDinhDanh: "TV003", ten: "Lê Văn C", chucVu: "Thủy thủ", ngaySinh: "25/12/1995", cccd: "079095033333", soDienThoai: "0976543210", diaChi: "321 Đường Hoàng Sa, Quận Ngũ Hành Sơn, Đà Nẵng", ngayVaoLam: "10/07/2018", trinhDoChuyenMon: "Thủy thủ hạng I", bangCap: "Chứng chỉ thủy thủ", tinhTrang: "Đang làm việc", }, ]; 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 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.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 */} 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} {/* Modal chi tiết thuyền viên */} ); }; export default CrewListTable;