/* eslint-disable @typescript-eslint/no-explicit-any */ import Image from "next/image"; import Link from "next/link"; import { useCallback, useEffect, useState } from "react"; import { getCompletedSettlements, getToSettlements, } from "../../../Api/OrderApi"; import { amountFormat, amountFormatWithCurrency, formatDate, getSettlementStatusInfo, stringFormatterQuoteStart, } from "../../../lib/Helper"; import NoData from "../../NoDataContainer/NoData"; import Modal from "../../Modal/Modal"; import SettlementFilter from "../../Modal/Filters/SettlementFilter"; import moment from "moment-timezone"; interface Invoice { invoice_number: string; status: string; total_orders: number; period_start: string; period_end: string; invoice_date: string; total_amount: number; } interface Receipt { receipt_number: string; customer_name: string; payment_method: string; amount: number; payment_date: string; notes: string; } interface FilterState { dateRange: { start: string; end: string; }; status: string; amountRange: { min: number | string; max: number | string; }; } export default function NotificationsIndex() { const [activeTab, setActiveTab] = useState("invoices"); const [invoices, setInvoices] = useState([]); const [receipts, setReceipts] = useState([]); const [loading, setLoading] = useState(false); const [filterModal, setFilterModal] = useState(false); const [filters, setFilters] = useState({ dateRange: { start: "", end: "", }, status: "", amountRange: { min: "", max: "", }, }); const [showAllOrders, setShowAllOrders] = useState<{ [key: number]: boolean; }>({}); // Check if any filters are active const hasActiveFilters = () => { return ( filters.dateRange.start || filters.dateRange.end || filters.status || filters.amountRange.min || filters.amountRange.max ); }; // Clear specific filter const clearFilter = (filterType: string, subType?: string) => { setFilters(prev => { const newFilters = { ...prev }; if (filterType === 'dateRange' && subType) { newFilters.dateRange = { ...newFilters.dateRange, [subType]: "" }; } else if (filterType === 'amountRange' && subType) { newFilters.amountRange = { ...newFilters.amountRange, [subType]: "" }; } else if (filterType === 'status') { newFilters.status = ""; } return newFilters; }); }; // Clear all filters const clearAllFilters = () => { setFilters({ dateRange: { start: "", end: "", }, status: "", amountRange: { min: "", max: "", }, }); }; const fetchInvoices = useCallback(async () => { try { setLoading(true); const params: any = { start_date: filters.dateRange.start || undefined, end_date: filters.dateRange.end || undefined, status: filters.status || undefined, min_amount: filters.amountRange.min || undefined, max_amount: filters.amountRange.max || undefined, }; const data = await getToSettlements(params); setInvoices(data); } catch (error) { console.error("Error fetching invoices:", error); } finally { setLoading(false); } }, [filters]); const fetchReceipts = useCallback(async () => { try { setLoading(true); const params: any = { start_date: filters.dateRange.start || undefined, end_date: filters.dateRange.end || undefined, status: filters.status || undefined, min_amount: filters.amountRange.min || undefined, max_amount: filters.amountRange.max || undefined, }; const data = await getCompletedSettlements(params); setReceipts(data); } catch (error) { console.error("Error fetching receipts:", error); } finally { setLoading(false); } }, [filters]); useEffect(() => { if (activeTab === "invoices") { fetchInvoices(); fetchReceipts(); } else { fetchReceipts(); } }, [activeTab, fetchInvoices, fetchReceipts]); const toggleFilter = () => setFilterModal(!filterModal); const onSaveFilter = (filter: FilterState) => { setFilters(filter); toggleFilter(); }; return ( <>
Settlements
{/* Active Filter Badges */} {hasActiveFilters() && (
{filters.dateRange.start && (
clearFilter('dateRange', 'start')} > From: {formatDate(filters.dateRange.start)}  | 
)} {filters.dateRange.end && (
clearFilter('dateRange', 'end')} > To: {formatDate(filters.dateRange.end)}  | 
)} {filters.amountRange.min && (
clearFilter('amountRange', 'min')} > Min: {amountFormat(String(filters.amountRange.min))}  | 
)} {filters.amountRange.max && (
clearFilter('amountRange', 'max')} > Max: {amountFormat(String(filters.amountRange.max))}  | 
)} {filters.status && (
clearFilter('status')} > Status: {filters.status}  | 
)}
 |  Clear All
)}
{loading ? (
) : (
{activeTab === "invoices" ? ( invoices?.length > 0 ? ( invoices.map((receipt: any, index) => (
{receipt?.settlementId}
{ getSettlementStatusInfo( receipt?.status?.id, receipt )?.text }
{receipt?.order_details?.pickupCustomerName}
Payment Method:{" "} {stringFormatterQuoteStart( receipt?.codPaymentMethod?.name || "" )}
Wallet Icon
{amountFormatWithCurrency( receipt?.amount || 0 )}