import { ThemedText } from "@/components/themed-text"; import { ThemedView } from "@/components/themed-view"; import { queryCreateShip, queryUpdateShip, } from "@/controller/DeviceController"; import { useTheme } from "@/hooks/use-theme-context"; import { showSuccessToast } from "@/services/toast_service"; import { useShip } from "@/state/use-ship"; import { useEffect, useState } from "react"; import { ScrollView, StyleSheet, TouchableOpacity, View } from "react-native"; import CreateOrUpdateShip from "./ship_components/CreateOrUpdateShip"; import ShipCard from "./ship_components/ShipCard"; interface ShipUpdateData { ship_id: string; body: Model.ShipBodyRequest; } export default function ShipsScreen() { const { ships, getShip } = useShip(); const { colors } = useTheme(); const [ship, setShip] = useState(null); const [showUpdateShip, setShowUpdateShip] = useState(false); const [isCreateShip, setIsCreateShip] = useState(false); useEffect(() => { if (ships === null) { getShip(); } }, [ships]); const handleClickShip = async (ship: Model.Ship) => { const shipBodyRequest: Model.ShipBodyRequest = { name: ship.name, reg_number: ship.reg_number, imo_number: ship.imo_number, mmsi_number: ship.mmsi_number, thing_id: ship.thing_id, ship_type: ship.ship_type, owner_id: ship.owner_id, home_port: ship.home_port, ship_length: ship.ship_length, ship_power: ship.ship_power, ship_group_id: ship.ship_group_id, fishing_license_number: ship.fishing_license_number, fishing_license_expiry_date: ship.fishing_license_expiry_date, }; setShip({ ship_id: ship.id!, body: shipBodyRequest }); setIsCreateShip(false); // Đảm bảo là mode update khi edit setShowUpdateShip(true); }; const handleSubmitForm = async (body: Model.ShipBodyRequest) => { try { let resp; if (isCreateShip) { resp = await queryCreateShip(body); if (resp.status === 201) { showSuccessToast("Thêm tàu mới thành công"); } } else { resp = await queryUpdateShip(ship!.ship_id, body); if (resp.status === 200) { showSuccessToast("Cập nhật thông tin tàu thành công"); } } setShowUpdateShip(false); await getShip(); } catch (error) { console.error("Error when update/create Ship: ", error); } }; const handleCreateNewShip = () => { setShip(null); setIsCreateShip(true); setShowUpdateShip(true); }; return ( <> {ships?.map((ship) => ( handleClickShip(ship)} /> ))} {/* Thêm khoảng trống ở cuối để không bị FAB che */} {/* Floating Action Button */} + setShowUpdateShip(false)} onSubmit={handleSubmitForm} /> ); } const styles = StyleSheet.create({ container: { flex: 1, paddingBottom: 20, // Khoảng trống cho FAB }, bottomPadding: { height: 50, // Thêm khoảng trống ở cuối }, fab: { position: "absolute", bottom: 30, right: 20, width: 56, height: 56, borderRadius: 28, justifyContent: "center", alignItems: "center", shadowColor: "#000", shadowOffset: { width: 0, height: 2, }, shadowOpacity: 0.25, shadowRadius: 3.84, elevation: 5, }, fabText: { fontSize: 24, fontWeight: "bold", color: "#ffffff", lineHeight: 24, }, });