/* eslint-disable @typescript-eslint/no-explicit-any */ import Link from "next/link"; import { useEffect, useRef, useState } from "react"; import HourGlassLoader from "../../Loader/Loader"; import { updateStaffStatus } from "../../../Api/CustomerApi"; import Swal from "sweetalert2"; import NoData from "../../NoDataContainer/NoData"; import Modal from "../../Modal/Modal"; import OverView from "./Containers/OverView"; import ShipmentPreview from "./Containers/ShipmentPreview"; import { getShipmentDetails, listShipments } from "../../../Api/ShipmentApi"; import ShipmentCard from "./Containers/ShipmentCard"; import { useRouter, useSearchParams } from "next/navigation"; import ShipmentFilter from "../../Modal/Filters/ShipmentFilter"; import { ShipmentMode, ShipmentStatus, ShipmentTypeForCustomer } from "@/Constant/enums"; export default function AddUsersIndex() { const router = useRouter(); const [isLoading, setIsLoading] = useState(true); const [step, setStep] = useState(1); const dropdownRef = useRef(null); const [addUserModal, setAddUserModal] = useState(false); const [viewShipmentModal, setViewShipmentModal] = useState(false); const [users, setUsers] = useState([]); const [shipmentDetails, setShipmentDetails] = useState({}) const searchParams = useSearchParams(); const [filterModal, setFilterModal] = useState(false); const toggleFilter = () => setFilterModal(!filterModal); const [shipmentFilters, setShipmentFilters] = useState({}); useEffect(() => { const id = searchParams.get("id"); const isEdit = searchParams.get("edit"); if (id) { (async () => { try { setIsLoading(true); const data = await getShipmentDetails(Number(id)); setShipmentDetails(data?.shipmentDetails); if (isEdit === "true") setStep(1) else setStep(2); // open in "view" mode directly if you want setAddUserModal(true); // auto-open modal if needed } catch (error) { console.error("Failed to fetch shipment details:", error); } finally { setIsLoading(false); } })(); } }, [searchParams]); // eslint-disable-next-line @typescript-eslint/no-unused-vars const [activeMenu, setActiveMenu] = useState(null); 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); }; }, []); const fetchOrders = async () => { setIsLoading(true); try { const staffList = await listShipments(shipmentFilters); setUsers(staffList); } catch (error) { console.error("Failed to fetch staffs:", error); } finally { setIsLoading(false); } }; const toggle = () => { setAddUserModal(!addUserModal); setShipmentDetails({}); if (addUserModal) { fetchOrders(); } else { // router.push(`${window.location.pathname}`); } }; const toggleShipmentView = () => setViewShipmentModal(!viewShipmentModal); const handleEdit = (item: any) => { setShipmentDetails(item); setStep(1) toggle(); router.push(`${window.location.pathname}?id=${item?.id}&edit=true`); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const handleChangeStatus = async (item: any) => { try { setIsLoading(true); const response = await updateStaffStatus(item?.id, { is_active: item?.isActive ? false : true, }); if (response?.status) { await fetchOrders(); Swal.fire({ icon: "success", title: "Status Updated", text: response?.message, customClass: { confirmButton: "delybell-primary px-4", cancelButton: "delybell-dark", }, }); } else Swal.fire({ icon: "error", title: "Error", text: response?.message, customClass: { confirmButton: "delybell-primary px-4", cancelButton: "delybell-dark", }, }); } catch (error) { console.error("Failed to change status of staff:", error); } finally { setIsLoading(false); } }; // const handleChangePassword = () => { // try { // } catch (error) { // console.error("Failed to change password of staff:", error); // } finally { // setIsLoading(false); // } // }; // const handleEdit = (details: any) => { } const handleView = (details: any) => { router.push(`${window.location.pathname}?id=${details?.id}`); setShipmentDetails(details); setStep(2) toggle(); // setStep } // eslint-disable-next-line @typescript-eslint/no-unused-vars const handlePrint = (details: any) => { } const handleClearUrlPrams = () => router.push(`${window.location.pathname}`) const hasActiveFilters = () => { for (const key in shipmentFilters) { const value = shipmentFilters[key]; if (typeof value === 'object' && value !== null) { // Handle date range objects if (('start' in value && value.start !== '') || ('end' in value && value.end !== '')) { return true; } } else if (value !== '' && value !== null && value !== undefined) { return true; } } return false; }; const getFilterBadges = () => { const badges: { label: string; type: string }[] = []; // Shipment ID if (shipmentFilters.shipmentId) { badges.push({ label: `Shipment ID: ${shipmentFilters.shipmentId}`, type: "shipmentId", }); } // Status (enum mapping) if (shipmentFilters.status) { const statusLabel = ShipmentStatus[shipmentFilters.status as keyof typeof ShipmentStatus]; badges.push({ label: `Status: ${statusLabel}`, type: "status", }); } // Type (enum mapping) if (shipmentFilters.type) { const typeLabel = ShipmentTypeForCustomer[ shipmentFilters.type as keyof typeof ShipmentTypeForCustomer ]; badges.push({ label: `Type: ${typeLabel}`, type: "type", }); } // Shipment Type for Admin (string value?) if (shipmentFilters.shipmentTypeForAdmin) { badges.push({ label: `Shipment Type: ${shipmentFilters.shipmentTypeForAdmin}`, type: "shipmentTypeForAdmin", }); } // Mode (enum mapping) if (shipmentFilters.mode) { const modeLabel = ShipmentMode[shipmentFilters.mode as keyof typeof ShipmentMode]; badges.push({ label: `Mode: ${modeLabel}`, type: "mode", }); } // Shipment Date Range if ( shipmentFilters.shipmentDateRange?.start || shipmentFilters.shipmentDateRange?.end ) { badges.push({ label: `Shipment Date: ${shipmentFilters.shipmentDateRange.start || ""} - ${ shipmentFilters.shipmentDateRange.end || "" }`, type: "shipmentDateRange", }); } // ETA Date Range if ( shipmentFilters.etaDateRange?.start || shipmentFilters.etaDateRange?.end ) { badges.push({ label: `ETA Date: ${shipmentFilters.etaDateRange.start || ""} - ${ shipmentFilters.etaDateRange.end || "" }`, type: "etaDateRange", }); } return badges; }; const clearIndividualFilter = (type: string) => { const newFilters = { ...shipmentFilters }; if (type === 'shipmentDateRange' || type === 'etaDateRange') { newFilters[type] = { start: '', end: '' }; } else { newFilters[type] = ''; } setShipmentFilters(newFilters); }; const handleClearAllFilters = () => { setShipmentFilters({ shipmentId: "", status: "", type: "", shipmentTypeForAdmin: "", mode: "", shipmentDateRange: { start: "", end: "", }, etaDateRange: { start: "", end: "", }, }); }; useEffect(() => { fetchOrders(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [shipmentFilters]); return ( <> {isLoading && }
Shipments {/* */}
{/* */}
{hasActiveFilters() && (
{getFilterBadges().map((badge, index) => (
{badge.label}  |  clearIndividualFilter(badge.type)} >
))}
 |  Clear All
)}
{users?.length > 0 ? ( ) : ( )}
{addUserModal && ( )} {filterModal && ( { setShipmentFilters(filter); toggleFilter(); }} initialFilters={shipmentFilters} /> )} {viewShipmentModal && ( )} ); }