import React, { createContext, useContext, useState } from "react"; import moment from "moment"; import Breadcrumb from "../../components/common/Breadcrumb"; import CollectionList from "../../components/collections/CollectionList"; import { useModal } from "../../hooks/useAuth"; import { FormProvider, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { DateRangePicker1 } from "../../components/common/DateRangePicker"; import { isPending } from "@reduxjs/toolkit"; import ConfirmModal from "../../components/common/ConfirmModal"; import showToast from "../../services/toastService"; import { useMarkedPaymentReceived } from "../../hooks/useCollections"; import GlobalModel from "../../components/common/GlobalModel"; import AddPayment from "../../components/collections/AddPayment"; import ViewCollection from "../../components/collections/ViewCollection"; import ManageCollection from "../../components/collections/ManageCollection"; import PreviewDocument from "../../components/Expenses/PreviewDocument"; import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { ADDPAYMENT_COLLECTION, ADMIN_COLLECTION, CREATE_COLLECTION, EDIT_COLLECTION, VIEW_COLLECTION, } from "../../utils/constants"; import AccessDenied from "../../components/common/AccessDenied"; const CollectionContext = createContext(); export const useCollectionContext = () => { const context = useContext(CollectionContext); if (!context) { window.location = "/dashboard"; showToast("Out of Context Happend inside Collection Context", "warning"); } return context; }; const CollectionPage = () => { const [viewCollection, setViewCollection] = useState(null); const [makeCollection, setCollection] = useState({ isOpen: false, invoiceId: null, }); const [ViewDocument, setDocumentView] = useState({ IsOpen: false, Image: null, }); const [processedPayment, setProcessedPayment] = useState(null); const [addPayment, setAddPayment] = useState({ isOpen: false, invoiceId: null, }); const [showPending, setShowPending] = useState(false); const [searchText, setSearchText] = useState(""); const isAdmin = useHasUserPermission(ADMIN_COLLECTION); const canViewCollection = useHasUserPermission(VIEW_COLLECTION); const canCreate = useHasUserPermission(CREATE_COLLECTION); const canEditCollection = useHasUserPermission(EDIT_COLLECTION); const canAddPayment = useHasUserPermission(ADDPAYMENT_COLLECTION); const methods = useForm({ defaultValues: { fromDate: moment().subtract(180, "days").format("DD-MM-YYYY"), toDate: moment().format("DD-MM-YYYY"), }, }); const { watch } = methods; const [fromDate, toDate] = watch(["fromDate", "toDate"]); const handleToggleActive = (e) => setShowPending(e.target.checked); const contextMassager = { setProcessedPayment, setCollection, setAddPayment, addPayment, setViewCollection, viewCollection, setDocumentView, }; const { mutate: MarkedReceived, isPending } = useMarkedPaymentReceived(() => { setProcessedPayment(null); }); const handleMarkedPayment = (payload) => { MarkedReceived(payload); }; if ( isAdmin === undefined || canAddPayment === undefined || canEditCollection === undefined || canViewCollection === undefined || canCreate === undefined ) { return
Checking access...
; } if ( !isAdmin && !canAddPayment && !canEditCollection && !canViewCollection && !canCreate ) { return ( ); } return (
setSearchText(e.target.value)} placeholder="Search Collection" className="form-control form-control-sm mt-2 mt-sm-0" />
{(canCreate || isAdmin) && ( )}
{makeCollection.isOpen && ( setCollection({ isOpen: false, invoiceId: null })} > setCollection({ isOpen: false, invoiceId: null })} /> )} {addPayment.isOpen && ( setAddPayment({ isOpen: false, invoiceId: null })} > setAddPayment({ isOpen: false, invoiceId: null })} /> )} {viewCollection && ( setViewCollection(null)} > setViewCollection(null)} /> )} {ViewDocument.IsOpen && ( setDocumentView({ IsOpen: false, Image: null })} > )} handleMarkedPayment(processedPayment?.invoiceId)} onClose={() => setProcessedPayment(null)} />
); }; export default CollectionPage;