import { IconSymbol } from "@/components/ui/icon-symbol"; import { useI18n } from "@/hooks/use-i18n"; 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 { t } = useI18n(); 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 */} {t("trip.costDetailModal.title")} {isEditing ? ( <> {t("trip.costDetailModal.cancel")} {t("trip.costDetailModal.save")} ) : ( )} {/* Content */} {editableData.map((item, index) => ( {/* Loại */} {t("trip.costDetailModal.costType")} updateItem(index, "type", value)} editable={isEditing} placeholder={t("trip.costDetailModal.enterCostType")} /> {/* Số lượng & Đơn vị */} {t("trip.costDetailModal.quantity")} updateItem(index, "amount", value) } editable={isEditing} keyboardType="numeric" placeholder="0" /> {t("trip.costDetailModal.unit")} updateItem(index, "unit", value)} editable={isEditing} placeholder={t("trip.costDetailModal.placeholder")} /> {/* Chi phí/đơn vị */} {t("trip.costDetailModal.costPerUnit")} updateItem(index, "cost_per_unit", value) } editable={isEditing} keyboardType="numeric" placeholder="0" /> {/* Tổng chi phí */} {t("trip.costDetailModal.totalCost")} {item.total_cost.toLocaleString()}{" "} {t("trip.costDetailModal.vnd")} ))} {/* Footer Total */} {t("trip.costDetailModal.total")} {tongCong.toLocaleString()} {t("trip.costDetailModal.vnd")} ); }; export default TripCostDetailModal;