diff --git a/src/pages/api/register.ts b/src/pages/api/register.ts index e1607d3d..6a6b26de 100644 --- a/src/pages/api/register.ts +++ b/src/pages/api/register.ts @@ -65,7 +65,7 @@ async function registerIndividual(req: NextApiRequest, res: NextApiResponse) { bio: "", isFirstLogin: codeData ? codeData.type === "student" : true, focus: "academic", - type: codeData ? codeData.type : "student", + type: email.endsWith("@ecrop.dev") ? "developer" : codeData ? codeData.type : "student", subscriptionExpirationDate: codeData ? codeData.expiryDate : moment().subtract(1, "days").toISOString(), registrationDate: new Date(), status: code ? "active" : "paymentDue", diff --git a/src/pages/payment-record.tsx b/src/pages/payment-record.tsx index 1831f20e..ee58653b 100644 --- a/src/pages/payment-record.tsx +++ b/src/pages/payment-record.tsx @@ -227,11 +227,47 @@ const PaymentCreator = ({onClose, reload}: {onClose: () => void; reload: () => v export default function PaymentRecord() { const [selectedUser, setSelectedUser] = useState(); const [isCreatingPayment, setIsCreatingPayment] = useState(false); + const [filters, setFilters] = useState<{filter: (p: Payment) => boolean; id: string}[]>([]); + const [displayPayments, setDisplayPayments] = useState([]); + + const [corporate, setCorporate] = useState(); + const [agent, setAgent] = useState(); const {user} = useUser({redirectTo: "/login"}); const {users} = useUsers(); const {payments, reload} = usePayments(); + useEffect(() => { + setDisplayPayments( + filters + .map((f) => f.filter) + .reduce((d, f) => d.filter(f), payments) + .sort((a, b) => moment(b.date).diff(moment(a.date))), + ); + }, [payments, filters]); + + useEffect(() => { + if (user && user.type === "agent") { + setAgent(user); + } + }, [user]); + + useEffect(() => { + setFilters((prev) => [ + ...prev.filter((x) => x.id !== "agent-filter"), + ...(!agent ? [] : [{id: "agent-filter", filter: (p: Payment) => p.agent === agent.id}]), + ]); + }, [agent]); + + useEffect(() => console.log(filters), [filters]); + + useEffect(() => { + setFilters((prev) => [ + ...prev.filter((x) => x.id !== "corporate-filter"), + ...(!corporate ? [] : [{id: "corporate-filter", filter: (p: Payment) => p.corporate === corporate.id}]), + ]); + }, [corporate]); + const updatePayment = (payment: Payment, key: string, value: any) => { axios .patch(`api/payments/${payment.id}`, {...payment, [key]: value}) @@ -339,7 +375,7 @@ export default function PaymentRecord() { ]; const table = useReactTable({ - data: (user?.type === "agent" ? payments.filter((p) => p.agent === user.id) : payments).sort((a, b) => moment(b.date).diff(moment(a.date))), + data: displayPayments, columns: defaultColumns, getCoreRowModel: getCoreRowModel(), }); @@ -387,6 +423,71 @@ export default function PaymentRecord() { )} +
+
+ + u.type === "agent") as AgentUser[]).map((user) => ({ + value: user.id, + meta: user, + label: `${user.name} - ${user.email}`, + }))} + value={agent ? {value: agent?.id, label: `${agent.name} - ${agent.email}`} : undefined} + onChange={(value) => setAgent(value !== null ? (value as any).meta : undefined)} + styles={{ + control: (styles) => ({ + ...styles, + paddingLeft: "4px", + border: "none", + outline: "none", + ":focus": { + outline: "none", + }, + }), + option: (styles, state) => ({ + ...styles, + backgroundColor: state.isFocused ? "#D5D9F0" : state.isSelected ? "#7872BF" : "white", + color: state.isFocused ? "black" : styles.color, + }), + }} + /> +
+
{table.getHeaderGroups().map((headerGroup) => (