/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-explicit-any */ import Image from "next/image"; import React, { useCallback } from "react"; import { createOrder, createReturnOrder, deleteDraft, getOrders, cancelOrder, } from "../../../../Api/OrderApi"; import BottomSheetModal from "../../../Modal/BottomSheetModal"; import CustomizeOrderModal from "../../../Modal/CustomizeOrderModal"; import CreateReturnOrderModal from "../../../Modal/CreateReturnOrderModal"; import CancelOrderModal from "../../../Modal/CancelOrderModal"; import HourGlassLoader from "../../../Loader/Loader"; import Link from "next/link"; import { amountFormatWithCurrency, cryptoHandler, getFormattedAddress, getOrderStatusInfo, handleFuturePickup, truncateWithTooltip, } from "../../../../lib/Helper"; import NoData from "../../../NoDataContainer/NoData"; import { OrderFlowType, OrderStatus } from "@/Constant/enums"; import { usePathname, useRouter } from "next/navigation"; import { toast } from "react-toastify"; import AccordionOrder from "./AccordionOrder"; import Modal from "../../../Modal/Modal"; interface PropsType { tab?: any; edit?: boolean; page?: string; filters?: any; orderCardDetails?: any; setDashboard?: any; dashboard?: any; } const OrderCard = ({ tab = "draft", edit = true, page = "", filters, orderCardDetails, setDashboard, dashboard, }: PropsType) => { const truncateCharLimit = 35; const pathname = usePathname(); const storedUser = localStorage.getItem("ALL_DATA"); const allData = storedUser ? JSON.parse(storedUser)?.data : null; const hasReturnFlowPermission = Array.isArray(allData?.order_flow_types) ? allData?.order_flow_types?.some( (flow: any) => flow?.id === OrderFlowType.Return ) : allData?.order_flow_types?.id === OrderFlowType.Return; const [accordionView] = React.useState(false); const [orders, setOrders] = React.useState([]); const [selectedOrders, setSelectedOrders] = React.useState({}); const [isLoading, setIsLoading] = React.useState(true); const [customizeOrderModal, setCustomizeOrderModal] = React.useState(false); const [returnOrderModal, setReturnOrderModal] = React.useState(false); const [cancelOrderModal, setCancelOrderModal] = React.useState(false); const [showDropdown, setShowDropdown] = React.useState(null); const dropdownContainerRefs = React.useRef< Record >({}); const router = useRouter(); React.useEffect(() => { const handleClickOutside = (event: MouseEvent) => { const isClickInside = Object.values(dropdownContainerRefs.current).some( (ref) => ref && ref.contains(event.target as Node) ); if (!isClickInside) { setShowDropdown(null); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, []); const fetchOrders = useCallback(async () => { try { setIsLoading(true); const appliedFilters: any = { ...filters }; // Map filter fields to API expected format if (filters?.serviceTypes?.id) { appliedFilters.service_type_id = filters.serviceTypes.id; } if (filters?.orderFlowType?.id) { appliedFilters.order_flow_type_id = filters.orderFlowType.id; } if (filters?.orderId) { appliedFilters.order_id = filters.orderId; } if (filters?.customerOrderId) { appliedFilters.customer_order_id = filters.customerOrderId; } if (filters?.deliveryMobile) { appliedFilters.delivery_mobile = filters.deliveryMobile; } if (filters?.orderStatus?.id) { appliedFilters.order_status_id = filters.orderStatus.id; } if (filters?.packageId) { appliedFilters.package_id = filters.packageId; } if (filters?.noOfPackages) { appliedFilters.no_of_packages = filters.noOfPackages; } if (filters?.packageWeight) { appliedFilters.package_weight = filters.packageWeight; } if (filters?.packageValue) { appliedFilters.package_value = filters.packageValue; } if (filters?.packageStatus?.id) { appliedFilters.package_status_id = filters.packageStatus.id; } if (filters?.blockNumber?.id) { appliedFilters.block_id = filters.blockNumber.id; } if (filters?.roadNumber?.id) { appliedFilters.road_id = filters.roadNumber.id; } if (filters?.buildingNumber?.id) { appliedFilters.building_id = filters.buildingNumber.id; } if (filters?.flatNumber) { appliedFilters.flat_number = filters.flatNumber; } if (page === "dashboard-today_orders") { appliedFilters.limit = 4; } const orderList = await getOrders(tab, appliedFilters); const orderListAllResponse: any = await getOrders( tab, appliedFilters, true ); if (tab === "in_progress") setDashboard({ ...dashboard, in_progress_orders: orderListAllResponse?.data?.length || 0, }); setOrders(orderList); setIsLoading(false); } catch (error) { setIsLoading(false); console.error("Failed to fetch orders:", error); } finally { setIsLoading(false); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [filters, tab, page]); const handleEdit = (orderDetail: any) => { const url = `/create-order?mode=edit_order&orderId=${ orderDetail?.id }&customerName=${encodeURIComponent( orderDetail?.destinationCustomerName || "" )}`; router.push(url); }; const handleReturnOrder = async (orderDetail: any) => { setSelectedOrders(orderDetail); setReturnOrderModal(true); }; const handleReturnSelectionConfirm = async (selectedPackages: any[]) => { try { setIsLoading(true); // Step 1 Payload const step1Payload = { step: 1, order_type: selectedOrders?.orderType?.id ?? 1, order_flow_type: { id: OrderFlowType.Return }, package_details: selectedPackages, // use selectedPackages service_type: selectedOrders?.service_type_details, cod_details: { cod_enabled: selectedOrders?.isCod ?? false, cod_amount: selectedOrders?.codAmount ?? 0, }, }; // Call Step 1 API const step1Response = await createOrder(step1Payload, 0, null); if (!step1Response?.status) throw new Error("Step 1 failed"); const draftOrderId = step1Response?.data?.id || step1Response?.data?.orderId || step1Response?.data?.customerInputOrderId; // Step 2 Payload (customer/destination details from selectedOrders) const step2Payload = { step: 2, // orderId: draftOrderId, order_id: selectedOrders?.customerInputOrderId || "", customer_name: selectedOrders?.destinationCustomerName || "", delivery_mobile: selectedOrders?.destinationMobileNumber || "", alt_delivery_mobile: selectedOrders?.destinationAlternateNumber || "", block_no: selectedOrders?.destination_block_details?.id === 1 ? 0 : selectedOrders?.destination_block_details || "", road_no: selectedOrders?.destination_road_details?.id === 1 ? 0 : selectedOrders?.destination_road_details || "", building_no: selectedOrders?.destination_building_details?.id === 1 ? 0 : selectedOrders?.destination_building_details || "", flat_no: selectedOrders?.destinationFlatOrOfficeNumber, sender_address: selectedOrders?.destinationAddress || "", delivery_instructions: selectedOrders?.deliveryInstructions || "", destination_address: selectedOrders?.senderAddress || "", // destination_customer_name: selectedOrders?.pickupCustomerName, // destination_mobile_number: selectedOrders?.pickupMobileNumber, // destination_alternate_number: selectedOrders?.pickupAlternateNumber, // destination_block_id: selectedOrders?.pickup_block_details?.id || "", // destination_road_id: selectedOrders?.pickup_road_details?.name || "", // destination_building_id: selectedOrders?.pickup_building_details?.name || "", // destination_flat_or_office_number: selectedOrders?.pickupFlatOrOfficeNumber || "", }; const step2Response = await createOrder( step2Payload, 0, { ...step1Response?.data, orderId: draftOrderId }, draftOrderId, { step1: { ...step1Payload, orderFlowType: { id: OrderFlowType.Return, name: "Return", }, }, } ); if (!step2Response?.status) throw new Error("Step 2 failed"); // Step 3 Payload (final accept) const step3Payload = { step: 3, draft_order_id: draftOrderId, ref_order_id: selectedOrders?.id, }; const step3Response = await createOrder( step3Payload, 0, { orderId: draftOrderId, refOrderId: selectedOrders?.id || 0 }, draftOrderId, { step1: step1Payload, step2: step2Payload } ); if (!step3Response?.status) throw new Error("Step 3 failed"); // ✅ All steps successful → redirect setReturnOrderModal(false); setShowDropdown(null); router.push( `/create-order?mode=edit&orderId=${draftOrderId}&customerName=${encodeURIComponent( selectedOrders?.pickupCustomerName )}&packageDisable=true` ); router.refresh(); } catch (err: any) { console.error("Failed to create return order:", err); setReturnOrderModal(false); toast.error("Failed to create return order. Please try again."); } finally { setIsLoading(false); } }; const handleExchangeOrder = (orderDetail: any) => { toast.warning("Api not found"); }; const handleCancelOrder = (orderDetail: any) => { setSelectedOrders(orderDetail); setCancelOrderModal(true); }; const handleCancelConfirm = async (reason: string) => { try { setIsLoading(true); const response = await cancelOrder(selectedOrders?.id, reason); if (response) { toast.success("Order cancelled successfully"); setCancelOrderModal(false); setSelectedOrders({}); setShowDropdown(null); router.push("/my-orders?_=cancel"); fetchOrders(); } } catch (error) { console.error("Error cancelling order:", error); toast.error("Failed to cancel order"); } finally { setIsLoading(false); } }; const handleTrackNow = (orderDetail: any) => { const url = `/order-tracking?id=${encodeURIComponent( orderDetail?.id || "" )}`; router.push(url); }; // const handleDraftList= () => { // const url = `/create-order?_=draft`; // window.location.href = url; // }; const handleDelete = async (orderDetail: any) => { try { await deleteDraft(orderDetail?.id); setShowDropdown(null); fetchOrders(); } catch (error) { console.error("Error deleting draft:", error); } }; const toggleDropdown = (orderId: string) => { setShowDropdown(showDropdown === orderId ? null : orderId); }; React.useEffect(() => { fetchOrders(); }, [fetchOrders, filters, tab]); if (isLoading) { return (
); } const handleEditOrder = (item: any) => { setSelectedOrders(item); }; const handleFuturePickupFlag = async (orderId = 0, orderData: any) => { try { const isMarked = await handleFuturePickup(orderId, orderData); if (isMarked) { await fetchOrders(); } } catch (error) { console.error("Error in future pickup:", error); } }; return ( <> {isLoading && } {page ? ( <> {page === "dashboard-draft_orders" ? ( <> {orders?.length > 0 && (
Draft Orders ({orders?.length || 0})
{/* View all */}
)} ) : page === "dashboard-today_orders" ? ( <> {orders?.length > 0 && (
Order Placed Today ( {orderCardDetails?.orders_placed_today || 0})
{/* View all */}
)} ) : page === "dashboard-live_orders" ? ( <> {orders?.length > 0 && (
Live Orders ({orderCardDetails?.live_orders || 0})
{/* View all */}
)} ) : ( "" )} ) : ( <> )}
{orders?.length > 0 ? ( orders?.map((order: any, index: number) => (
{accordionView ? ( ) : (
{ dropdownContainerRefs.current[order.id] = el; }} > {tab === "draft" ? ( <> {!edit ? ( <> Pending {order?.orderFlowType?.id === OrderFlowType.Return ? ( {" "} {order?.orderFlowType?.name} ) : ( "" )} {order?.isFuturePickup ? ( <> {" "}   ) : ( "" )} { e.preventDefault(); toggleDropdown(order.id); }} className="ms-auto" > {showDropdown === order.id && (
e.stopPropagation()} > {order?.refOrderId ? ( "" ) : ( )} {/* */} {order?.isFuturePickup ? ( ) : ( )}
)} ) : ( { setCustomizeOrderModal(true); handleEditOrder(order); }} > )} ) : ( <> { getOrderStatusInfo(order?.status?.id, order) ?.text } {order?.orderFlowType?.id === OrderFlowType.Return ? ( {" "} {order?.orderFlowType?.name} ) : ( "" )} {/* {order?.orderFlowType?.id === OrderFlowType.Return ? ( <> {" "}  ) : ''} */} {order?.status?.id !== OrderStatus.Cancelled ? ( { e.preventDefault(); toggleDropdown(order.id); }} className="ms-auto" > ) : ( "" )} {showDropdown === order.id && (
e.stopPropagation()} > {order?.status?.id === OrderStatus.Open || order?.status?.id === OrderStatus.PendingPickup ? ( <> ) : ( <> )} {(order?.status?.id === OrderStatus.Delivered || order?.status?.id === OrderStatus.Exception) && !order?.isReturnGenerated && order?.orderFlowType?.id === OrderFlowType.Forward && hasReturnFlowPermission ? ( <> ) : ( "" )}
)} )}
{order?.customerInputOrderId || truncateWithTooltip( order?.destinationCustomerName, truncateCharLimit ).text || order?.generatedOrderId ? (
{page === "dashboard-draft_orders" || tab === "draft" ? ( {" "} {page === "dashboard-draft_orders" || tab === "draft" ? order?.customerInputOrderId || truncateWithTooltip( order?.destinationCustomerName, truncateCharLimit ).text : order?.generatedOrderId}{" "} ) : ( {page === "dashboard-draft_orders" || tab === "draft" || page === "dashboard-live_orders" ? order?.customerInputOrderId || truncateWithTooltip( order?.destinationCustomerName, truncateCharLimit ).text : order?.generatedOrderId}{" "} {/* Using optional chaining */} )} {/* {order?.customerInputOrderId && order?.destinationCustomerName ? " - " : ""}{" "} */}
) : ( "" )}

{order?.service_type_details?.name}{" "}

{/* {page == "dashboard-draft_orders" || tab === "draft" ? '' : ( { page === "dashboard-draft_orders" || tab === "draft" ? (order?.destinationCustomerName && order?.customerInputOrderId) ? truncateWithTooltip(order?.destinationCustomerName, truncateCharLimit).text : "" : truncateWithTooltip(order?.destinationCustomerName, truncateCharLimit).text}{" "} )} */}
{/* {" "} */} {(() => { const rawAddress = allData?.addressFormatType?.name !== "Standard" ? order?.orderFlowType?.id === OrderFlowType.Return ? order?.senderAddress : order?.destinationAddress : order?.orderFlowType?.id === OrderFlowType.Return ? getFormattedAddress( order, "order_summary_return" ) : getFormattedAddress( order, "order_summary" ); const truncated = truncateWithTooltip( rawAddress, 50 ); // pick your char limit return ( <> {" "} {truncated?.text ?? "Not Available"} ); })()}

{/*

{order?.service_type_details?.name}{" "}

*/}
Box Icon
{order?.order_package_list?.length || order?.draft_order_package_list?.length || 0}{" "} Pkgs {" "} {/* Using optional chaining */}
Weight Icon
{order?.totalWeight} KG {" "} {/* Using optional chaining */}
Wallet Icon
{amountFormatWithCurrency( order?.calculatedTotalShippingCharge || 0 )}
)} {/* View all */}
)) ) : ( <> {page === "dashboard-today_orders" || page === "dashboard-draft_orders" || page === "dashboard-live_orders" ? ( "" ) : ( )} )} {orders?.length > 0 && (page === "dashboard-today_orders" || page === "dashboard-draft_orders") ? ( View all ) : null}
{customizeOrderModal && ( { setCustomizeOrderModal(false); setSelectedOrders({}); }} header={false} > )} {returnOrderModal && ( { setReturnOrderModal(false); setSelectedOrders({}); }} header={false} title="" fullscreen={"xl"} centered={true} classname="custom-center-modal" position={"top"} > { setReturnOrderModal(false); setSelectedOrders({}); }} onConfirm={handleReturnSelectionConfirm} /> )} {cancelOrderModal && ( { setCancelOrderModal(false); setSelectedOrders({}); }} header={false} title="" fullscreen={"xl"} centered={true} classname="custom-center-modal" position={"top"} > { setCancelOrderModal(false); setSelectedOrders({}); }} onConfirm={handleCancelConfirm} /> )} ); }; export default OrderCard;