import { IconSymbol } from "@/components/ui/icon-symbol"; import React, { useEffect, useState } from "react"; import { KeyboardAvoidingView, Modal, Platform, ScrollView, Text, TextInput, TouchableOpacity, View, } from "react-native"; import styles from "./style/TripCostDetailModal.styles"; // --------------------------- // 🧩 Interface // --------------------------- interface TripCostDetailModalProps { visible: boolean; onClose: () => void; data: Model.TripCost[]; } // --------------------------- // 💰 Component Modal // --------------------------- const TripCostDetailModal: React.FC = ({ visible, onClose, data, }) => { const [isEditing, setIsEditing] = useState(false); const [editableData, setEditableData] = useState(data); // Cập nhật editableData khi props data thay đổi (API fetch xong) useEffect(() => { setEditableData(data); }, [data]); const tongCong = editableData.reduce((sum, item) => sum + item.total_cost, 0); const handleEdit = () => { setIsEditing(!isEditing); }; const handleSave = () => { setIsEditing(false); // TODO: Save data to backend console.log("Saved data:", editableData); }; const handleCancel = () => { setIsEditing(false); setEditableData(data); // Reset to original data }; const updateItem = ( index: number, field: keyof Model.TripCost, value: string ) => { setEditableData((prev) => prev.map((item, idx) => { if (idx === index) { const updated = { ...item, [field]: value }; // Recalculate total_cost if (field === "amount" || field === "cost_per_unit") { const amount = Number(field === "amount" ? value : item.amount) || 0; const costPerUnit = Number(field === "cost_per_unit" ? value : item.cost_per_unit) || 0; updated.total_cost = amount * costPerUnit; } return updated; } return item; }) ); }; return ( {/* Header */} Chi tiết chi phí chuyến đi {isEditing ? ( <> Hủy Lưu ) : ( )} {/* Content */} {editableData.map((item, index) => ( {/* Loại */} Loại chi phí updateItem(index, "type", value)} editable={isEditing} placeholder="Nhập loại chi phí" /> {/* Số lượng & Đơn vị */} Số lượng updateItem(index, "amount", value) } editable={isEditing} keyboardType="numeric" placeholder="0" /> Đơn vị updateItem(index, "unit", value)} editable={isEditing} placeholder="kg, lít..." /> {/* Chi phí/đơn vị */} Chi phí/đơn vị (VNĐ) updateItem(index, "cost_per_unit", value) } editable={isEditing} keyboardType="numeric" placeholder="0" /> {/* Tổng chi phí */} Tổng chi phí {item.total_cost.toLocaleString()} VNĐ ))} {/* Footer Total */} Tổng cộng {tongCong.toLocaleString()} VNĐ ); }; export default TripCostDetailModal;