/* eslint-disable @typescript-eslint/no-explicit-any */ import React, { useState } from "react"; import CreateOrderFooter from "./CreateOrderFooter"; import HourGlassLoader from "../../../Loader/Loader"; import { useAppSelector } from "@/Redux/Hooks"; import Swal from "sweetalert2"; import { useRouter } from "next/navigation"; import InternationalPhoneInput from "../../../TextField/InternationalPhoneInput"; import { placeInternationalOrder } from "../../../../Api/InternationalOrderApi"; import SelectOptions from "../../../TextField/SelectOptions"; import { getMasterList } from "../../../../Api/MastersApi"; import OrderPlacedModal from "./Step3/OrderPlacedModal"; type Step4Props = { step: number; setStep: React.Dispatch>; defaultOrderDetails: any; isEditMode?: boolean; onSave: (data: any) => void; }; const Step4: React.FC = ({ step, setStep, defaultOrderDetails, isEditMode, }) => { const router = useRouter(); const createOrderData: any = useAppSelector((state) => state.createOrder); const step1Data = createOrderData?.step1; const step2Data = createOrderData?.step2; const step3Data = createOrderData?.step3; const [isLoading, setIsLoading] = useState(false); const [orderPlacedModalVisible, setOrderPlacedModalVisible] = useState(false); const [placedOrderNumber, setPlacedOrderNumber] = useState( "" ); const [pickupDate, setPickupDate] = useState<"Today" | "Tomorrow" | "Custom">( "Today" ); const [pickupTime, setPickupTime] = useState< "Morning" | "Afternoon" | "Night" >("Morning"); const [customDate, setCustomDate] = useState(""); const [contactNumber, setContactNumber] = useState( step3Data?.senderPhone || "" ); const [pickupAddress, setPickupAddress] = useState( step3Data?.senderAddress || "" ); const [isEditingContact, setIsEditingContact] = useState(false); const [isEditingAddress, setIsEditingAddress] = useState(false); const [countries, setCountries] = useState([]); const [goodsOrigin, setGoodsOrigin] = useState( step1Data?.fromCountry || null ); const [isEditingGoodsOrigin, setIsEditingGoodsOrigin] = useState(false); React.useEffect(() => { const fetchCountries = async () => { const res = await getMasterList("country"); if (res?.status) { setCountries( res.data.map((c: any) => ({ value: c.id, label: c.name, name: c.name, code: c.code, })) ); } }; fetchCountries(); }, []); const handlePlaceOrder = async () => { setIsLoading(true); try { // Construct final payload const payload = { draft_order_id: step1Data.draft_order_id, goods_origin_country_id: goodsOrigin?.value, pickup_date: pickupDate === "Custom" ? customDate : getPickupDateString(pickupDate), pickup_time: pickupTime, pickup_contact_number: contactNumber, pickup_address: pickupAddress, }; console.log("Placing Order with Payload:", payload); const response = await placeInternationalOrder(payload); if (response.status) { // Swal.fire({ // icon: "success", // title: "Order Placed!", // text: "Your international order has been successfully created.", // confirmButtonText: "Go to Dashboard", // }).then(() => { // }); const orderNo = response?.data?.order_no || response?.data?.orderNumber || response?.data?.id || response?.data || ""; setPlacedOrderNumber(orderNo); setOrderPlacedModalVisible(true); } else { throw new Error(response.message || "Failed to place order"); } } catch (error: any) { console.error("Order placement failed:", error); Swal.fire({ icon: "error", title: "Oops...", text: error.message || "Something went wrong while placing your order.", }); } finally { setIsLoading(false); } }; return ( <> {isLoading && } { setOrderPlacedModalVisible(false); router.push("/dashboard/orders"); }} onHome={() => { setOrderPlacedModalVisible(false); router.push("/dashboard"); }} onClose={() => setOrderPlacedModalVisible(false)} />
{/* Left Column: Order Summary */}
{/* From & To */}
From
{step3Data?.senderName}
{step3Data?.senderPhone}
{step3Data?.senderEmail}
{step3Data?.senderAddress} {step3Data?.senderAddress2 && `, ${step3Data.senderAddress2}`}
{step3Data?.senderCity?.label}, {step3Data?.senderState}{" "} {step3Data?.senderPostalCode}
{step3Data?.senderCountry?.label}
To
{step3Data?.receiverName}
{step3Data?.receiverPhone}
{step3Data?.receiverEmail}
{step3Data?.receiverAddress} {step3Data?.receiverAddress2 && `, ${step3Data.receiverAddress2}`}
{step3Data?.receiverCity?.label},{" "} {step3Data?.receiverState}{" "} {step3Data?.receiverPostalCode}
{step3Data?.receiverCountry?.label}

{/* Details List */}
Tax ID/VAT/EIN Number {step3Data?.senderTaxId || "TXN000001"}
Package Type {step1Data?.shipmentContent}
Number of Packages {step1Data?.noOfPackages}
Weight {step1Data?.totalWeight} KG
Goods Origin {!isEditingGoodsOrigin ? (
{goodsOrigin?.name || "--"} setIsEditingGoodsOrigin(true)} >
) : (
setGoodsOrigin(val)} placeholder="Select Country" /> setIsEditingGoodsOrigin(false)} >
)}
Country {step1Data?.toCountry?.name}
City {step1Data?.toCity?.name || "--"}
Remarks {step2Data?.remarks || "--"}
{/* Right Column: Schedule Pickup */}
Schedule Pickup
No. of Packages {String(step1Data?.noOfPackages).padStart(2, "0")}
Total Weight {step1Data?.totalWeight} Kg
Shipping Charge
{step2Data?.selectedServiceDetails?.currency}{" "} {step2Data?.selectedServiceDetails?.price?.toFixed(3)}
{!isEditingContact ? (
{contactNumber}
setIsEditingContact(true)} >
) : (
setContactNumber(val)} placeholder="Contact Number" className="bg-light" /> setIsEditingContact(false)} >
)}
{!isEditingAddress ? (
{pickupAddress}
setIsEditingAddress(true)} >
) : (
setPickupAddress(e.target.value)} /> setIsEditingAddress(false)} >
)}
{["Today", "Tomorrow", "Custom"].map((opt) => ( ))}
{pickupDate === "Custom" && ( setCustomDate(e.target.value)} /> )}
{["Morning", "Afternoon", "Night"].map((opt) => ( ))}
{ if (nextStep === 5) { await handlePlaceOrder(); } else { setStep(nextStep); } }} validation={() => true} backButton={true} backButtonFn={() => setStep(3)} defaultOrderDetails={defaultOrderDetails} isEditMode={isEditMode} // validation={() => !isEditingGoodsOrigin} // nextButtonText="PLACE ORDER" /> ); }; export default Step4; const getPickupDateString = (type: "Today" | "Tomorrow") => { const date = new Date(); if (type === "Tomorrow") { date.setDate(date.getDate() + 1); } return date.toISOString().split("T")[0]; };