/* eslint-disable @typescript-eslint/no-explicit-any */ "use client"; import { usePopup } from "@/context/PopupContext"; import BottomSheetModal from "../../Modal/BottomSheetModal"; import Modal from "../../Modal/Modal"; import Image from "next/image"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import dynamic from "next/dynamic"; import LoginModal from "../../Modal/LoginModal"; import { useAppDispatch, useAppSelector } from "@/Redux/Hooks"; import { saveStepData } from "@/Redux/Reducers/CreateOrderSlice"; import ServiceTypeSelector from "../../pages/CreateOrder/Containers/Step1/ServiceTypeSelector"; const MenuModal = dynamic(() => import("../../Modal/MenuModal"), { ssr: false, }); import Cookies from "js-cookie"; import HourGlassLoader from "../../Loader/Loader"; import { getMasterList } from "../../../Api/MastersApi"; import { getOrders } from "../../../Api/OrderApi"; import { serviceIconMap } from "@/Constant/enums"; import { checkPrimaryAddressAvailable } from "../../../lib/Helper"; import Swal from "sweetalert2"; const Footer: React.FC = () => { const { showPopup, closePopup } = usePopup(); const pathname = usePathname(); const [isLoading, setIsLoading] = useState(false); const [showOrderModal, setShowOrderModal] = useState(false); const [showProfileModal, setShowProfileModal] = useState(false); const handleOrderModalClose = () => setShowOrderModal(false); const handleOrderModalOpen = () => setShowOrderModal(true); const handleProfileModalOpen = () => setShowProfileModal(true); const handleProfileModalClose = () => setShowProfileModal(false); const isActive = (path: string): boolean => pathname === path; const [isPinned, setIsPinned] = useState(false); const [openLoginModal, setOpenLoginModal] = useState(false); const togglePin = () => { const newPinState = !isPinned; setIsPinned(newPinState); localStorage.setItem("menuModalPinned", newPinState.toString()); }; const toggleLogin = () => { const newPinState = !openLoginModal; setOpenLoginModal(newPinState); }; const clearData = () => { if (typeof window !== "undefined") { localStorage.removeItem("AUTH_TOKEN"); localStorage.removeItem("ROLE"); localStorage.removeItem("ROLE_NAME"); localStorage.removeItem("F_NAME"); localStorage.removeItem("L_NAME"); localStorage.removeItem("USER_ID"); Cookies.remove("AUTH_TOKEN"); } }; const dispatch = useAppDispatch(); interface CreateOrderState { step1: Record; step2: Record; step3: Record; orderId?: string; } const createOrderData = useAppSelector( (state: { createOrder: CreateOrderState }) => state.createOrder ); const [showServiceTypeSelector, setShowServiceTypeSelector] = useState(false); type ServiceType = { id: number; name: string }; const [serviceTypes, setServiceTypes] = useState([]); // Replace with actual fetch if needed const [serviceType, setServiceType] = useState(null); const [serviceTypeError, setServiceTypeError] = useState(""); const [allowedServiceTypeId, setAllowedServiceTypeId] = useState< number | null >(null); const router = useRouter(); useEffect(() => { const fetchMasterLists = async () => { try { setIsLoading(true); const [services] = await Promise.all([getMasterList("service_type")]); setServiceTypes(services.data || []); } catch (err) { console.error("Error loading masterlists", err); } finally { setIsLoading(false); } }; fetchMasterLists(); }, []); // Fetch service types if needed (mock or real fetch) // useEffect(() => { setServiceTypes([...]); }, []); const handleCreateOrderClick = () => { if (checkPrimaryAddressAvailable()) { setShowServiceTypeSelector(true); } else { Swal.fire({ icon: "error", title: "Profile Incomplete", text: "Please complete your profile by adding an pickup address before creating an order.", customClass: { confirmButton: "delybell-primary px-4", cancelButton: "delybell-dark", }, buttonsStyling: true, showCancelButton: true, reverseButtons: true, cancelButtonText: "Cancel", confirmButtonText: "Go to Profile", }).then((result) => { if (result.isConfirmed) { router.push("/my-profile"); } }); } }; const handleDomesticClick = () => { handleCreateOrderClick() }; const handleInternationalClick = () => { setShowOrderModal(false) router.push('/create-international-order') } const handleServiceTypeChange = (serviceName: string | null) => { if (serviceName === null) { setServiceType(null); setServiceTypeError("Please select a service type"); } else { const selected = serviceTypes.find((s) => s.name === serviceName); if (selected) { setServiceType(selected); setServiceTypeError(""); dispatch( saveStepData({ step: "step1", data: { ...createOrderData.step1, serviceType: selected }, }) ); // setShowServiceTypeSelector(false); // Close selector after selection } } }; const fetchOrders = async () => { setIsLoading(true); try { const orderList: any[] = await getOrders("draft", { limit: 1 }); if ( orderList && orderList.length > 0 && orderList[0].service_type_details ) { setServiceType(orderList[0].service_type_details); setAllowedServiceTypeId(orderList[0].service_type_details.id); dispatch( saveStepData({ step: "step1", data: { ...createOrderData.step1, serviceType: orderList[0].service_type_details, }, }) ); } else { setAllowedServiceTypeId(null); } } catch (error) { console.error("Failed to fetch orders:", error); } finally { setIsLoading(false); } }; useEffect(() => { fetchOrders(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [showOrderModal]); return ( <> {isLoading && } {/* Language Modal */} {showPopup && (

{`We're multilingual`}

Choose your Language

)} {/* Footer Navigation */} {/* Order Type Modal */} { handleOrderModalClose(); setShowServiceTypeSelector(false); }} header={false} title="Select order type" fullscreen={"lg"} centered={true} classname={showServiceTypeSelector ? "order-type-popup modal-dialog-service-type" : "modal-dialog-order-type"} position={"center"} >
{/*

Please choose your

*/}

{showServiceTypeSelector ? "Domestic Order" : "Select order type"}

{/* */}
{showServiceTypeSelector ? ( <>
Select service type
) : (
Domestic Truck

Domestic

International Flight

International

)}
{/* Left Side Profile Modal */} {showProfileModal && ( )} {openLoginModal && ( )} ); }; export default Footer;