diff --git a/src/pages/payment-record.tsx b/src/pages/payment-record.tsx index e123779f..558c89b5 100644 --- a/src/pages/payment-record.tsx +++ b/src/pages/payment-record.tsx @@ -12,7 +12,7 @@ import {createColumnHelper, flexRender, getCoreRowModel, useReactTable} from "@t import {CURRENCIES} from "@/resources/paypal"; import {BsTrash} from "react-icons/bs"; import axios from "axios"; -import {useEffect, useState} from "react"; +import {useEffect, useState, useMemo} from "react"; import {AgentUser, CorporateUser, User} from "@/interfaces/user"; import UserCard from "@/components/UserCard"; import Modal from "@/components/Modal"; @@ -235,6 +235,18 @@ const PaymentCreator = ({onClose, reload, showComission = false}: {onClose: () = ); }; +const IS_PAID_OPTIONS = [ +{ + value: null, + label: 'All', +}, { + value: false, + label: 'Unpaid', +}, { + value: true, + label: 'Paid', +}, +]; export default function PaymentRecord() { const [selectedUser, setSelectedUser] = useState(); const [isCreatingPayment, setIsCreatingPayment] = useState(false); @@ -246,18 +258,31 @@ export default function PaymentRecord() { const {user} = useUser({redirectTo: "/login"}); const {users, reload: reloadUsers} = useUsers(); - const {payments, reload: reloadPayment} = usePayments(); - + const {payments: originalPayments, reload: reloadPayment} = usePayments(); + const [startDate, setStartDate] = useState(moment("01/01/2023").toDate()); + const [endDate, setEndDate] = useState(moment().endOf('day').toDate()); + const [paid, setPaid] = useState(IS_PAID_OPTIONS[0].value); const reload = () => { reloadUsers(); reloadPayment(); }; + const payments = useMemo(() => { + return originalPayments.filter((p: Payment) => { + const date = moment(p.date); + return date.isAfter(startDate) && date.isBefore(endDate); + }); + }, [originalPayments, startDate, endDate]); + useEffect(() => { setDisplayPayments( filters .map((f) => f.filter) - .reduce((d, f) => d.filter(f), payments) + .reduce((d, f) => { + // unlike other filters, date period is not optional + debugger; + return d.filter(f); + }, payments) .sort((a, b) => moment(b.date).diff(moment(a.date))), ); }, [payments, filters]); @@ -284,6 +309,13 @@ export default function PaymentRecord() { ]); }, [corporate]); + useEffect(() => { + setFilters((prev) => [ + ...prev.filter((x) => x.id !== "paid"), + ...(typeof paid !== 'boolean' ? [] : [{id: "paid", filter: (p: Payment) => p.isPaid === paid}]), + ]) + }, [paid]); + const updatePayment = (payment: Payment, key: string, value: any) => { axios .patch(`api/payments/${payment.id}`, {...payment, [key]: value}) @@ -613,6 +645,62 @@ export default function PaymentRecord() { }} /> +
+ +