"use client"; /* eslint-disable @typescript-eslint/no-explicit-any */ import React from "react"; import { deleteCustomerAddress, getCustomerAddresses, updateCustomerAddress, } from "../../../../Api/CustomerApi"; import BottomSheetModal from "../../../Modal/BottomSheetModal"; import AddAddressModal from "../../../Modal/AddAddressModal"; import HourGlassLoader from "../../../Loader/Loader"; import Swal from "sweetalert2"; import { toast } from "react-toastify"; import { useRouter } from "next/navigation"; interface ComponentPropsType { modal?: boolean; toggleAddressChange?: () => void; isReturn?: boolean; } const AddressList = ({ modal = true, toggleAddressChange, isReturn = false }: ComponentPropsType) => { const router = useRouter(); const [isLoading, setIsLoading] = React.useState(false); const [addresses, setAddresses] = React.useState([]); const [selectedAddress, setSelectedAddress] = React.useState({}); const [addAddress, setAddAddress] = React.useState(false); const [activeMenu, setActiveMenu] = React.useState(null); const dropdownRef = React.useRef(null); const toggle = () => { if (addAddress) { setSelectedAddress({}); fetchAddresses(); setActiveMenu(null); } setAddAddress(!addAddress); }; React.useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) ) { setActiveMenu(null); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, []); async function fetchAddresses(id?: any) { try { setIsLoading(true); const response: any = await getCustomerAddresses({ id: id || "", order_by: "is_primary", }); if (id) return response?.data?.[0] || {}; else setAddresses(response?.data || []); } catch (error) { console.error(error, "ERROR------>>>"); } finally { setIsLoading(false); } } React.useEffect(() => { fetchAddresses(); }, []); const makePrimary = async (id: number) => { try { setIsLoading(true); await updateCustomerAddress(id, { is_primary: true }); fetchAddresses(); } catch (error) { console.error(error, "ERROR"); } finally { setIsLoading(false); router.refresh() } }; const handleDelete = async (id: number) => { // Prevent form submission const event = window.event; if (event) { event.preventDefault(); event.stopPropagation(); } Swal.fire({ title: "Are you sure?", text: "Do you really want to delete this address?", icon: "warning", showCancelButton: true, confirmButtonText: "Yes, delete it!", cancelButtonText: "Cancel", reverseButtons: true, customClass: { confirmButton: "delybell-primary px-4", cancelButton: "delybell-dark", }, }).then(async (response) => { if (response?.isConfirmed) { await deleteCustomerAddress(id); await fetchAddresses(); toast.success("Pickup address deleted successfully!"); } }); }; const handleEdit = async (id: number) => { try { setIsLoading(true); const response: any = await fetchAddresses(id); setSelectedAddress(response || {}); } catch (error) { console.error(error, "ERROR------>>>"); } finally { setIsLoading(false); toggle(); } }; return ( <> {isLoading && } {addAddress ? ( ) : ( <> {modal && ( <>

{isReturn ? 'Delivery ' : 'Pickup '} Address

Add New
)}
{addresses?.map((address: any) => (
makePrimary(address.id)} /> {address.isPrimary ? ( Primary ) : ( "" )}
{ e.preventDefault(); setActiveMenu((prev) => prev === address.id ? null : address.id ); }} > {activeMenu === address.id && (
)}
{address.addressLineOne ? ( <> {address.addressLineOne}
) : ( "" )} {address.addressLineTwo ? ( <> {address.addressLineTwo}
) : ( "" )} {`${address?.building?.code}${address?.building?.name ? ` - ${address?.building?.name}` : ""}, ${address?.road?.code}${address?.road?.name ? ` - ${address?.road?.name}` : ""}, ${address?.block?.code}${address?.block?.name ? ` - ${address?.block?.name}` : ""}`}
{address?.phone ? : ""} {address?.phone} {/*
*/} {/* {address.phone_number} */}
))}
{modal && (
)} )} ); }; export default AddressList;