import React, { createContext, useState, useEffect, useContext, useRef } from "react"; import Breadcrumb from "../../components/common/Breadcrumb"; import GlobalModel from "../../components/common/GlobalModel"; import ManagePaymentRequest from "../../components/PaymentRequest/ManagePaymentRequest"; import { useFab } from "../../Context/FabContext"; import PaymentRequestList from "../../components/PaymentRequest/PaymentRequestList"; import PaymentRequestFilterPanel from "../../components/PaymentRequest/PaymentRequestFilterPanel"; import { defaultPaymentRequestFilter } from "../../components/PaymentRequest/PaymentRequestSchema"; import ViewPaymentRequest from "../../components/PaymentRequest/ViewPaymentRequest"; import PreviewDocument from "../../components/Expenses/PreviewDocument"; import MakeExpense from "../../components/PaymentRequest/MakeExpense"; import handlePaymentRequestExport from "../../components/PaymentRequest/handlePaymentRequestExport"; export const PaymentRequestContext = createContext(); export const usePaymentRequestContext = () => { const context = useContext(PaymentRequestContext); if (!context) { throw new Error("usePaymentRequestContext must be used within PaymentRequestContext.Provider"); } return context; }; const PaymentRequestPage = () => { const [ManageRequest, setManageRequest] = useState({ IsOpen: null, RequestId: null }); const [ViewRequest, setVieRequest] = useState({ view: false, requestId: null }); const [filters, setFilters] = useState(defaultPaymentRequestFilter); const [filterData, setFilterdata] = useState(null); const [ViewDocument, setDocumentView] = useState({ IsOpen: false, Image: null }); const [searchText, setSearchText] = useState(""); const [isExpenseGenerate, setIsExpenseGenerate] = useState({ IsOpen: null, RequestId: null }); const [modalSize, setModalSize] = useState("md"); const [search, setSearch] = useState(""); const updatedRef = useRef(); const { setOffcanvasContent, setShowTrigger } = useFab(); const [exportLoading, setExportLoading] = useState(false); const tableRef = useRef(null); const [filteredData, setFilteredData] = useState([]); const contextValue = { setManageRequest, setVieRequest, setDocumentView, setModalSize, setIsExpenseGenerate, isExpenseGenerate, }; const clearFilter = () => setFilters(defaultPaymentRequestFilter); useEffect(() => { setShowTrigger(true); setOffcanvasContent( "Payment Request Filters", ); return () => { setShowTrigger(false); setOffcanvasContent("", null); }; }, []); const handleRemoveChip = (key, id) => { setFilters((prev) => { const updated = { ...prev }; if (Array.isArray(updated[key])) { updated[key] = updated[key].filter((v) => v !== id); setTimeout(() => updatedRef.current?.resetFieldValue(key, updated[key]), 0); } else { updated[key] = null; setTimeout(() => updatedRef.current?.resetFieldValue(key, null), 0); } return updated; }); }; const handleExport = (type) => { handlePaymentRequestExport(type, filters, search, tableRef, setExportLoading); }; return (
{/* Breadcrumb */} {/* Top Bar */}
setSearch(e.target.value)} />
{/* 3-Dots Dropdown */}

{/* Add/Edit Modal */} {ManageRequest.IsOpen && ( setManageRequest({ IsOpen: null, expenseId: null })} > setManageRequest({ IsOpen: null, RequestId: null })} /> )} {ViewRequest.view && ( setVieRequest({ requestId: null, view: false })} > )} {isExpenseGenerate.IsOpen && ( setIsExpenseGenerate({ IsOpen: false, requestId: null })} > setIsExpenseGenerate({ IsOpen: false, requestId: null })} /> )} {ViewDocument.IsOpen && ( setDocumentView({ IsOpen: false, Image: null })} > )}
); }; export default PaymentRequestPage;