diff --git a/pages/api/payments/count/index.ts b/pages/api/payments/count/index.ts index 96c3eb1be..547fe334c 100644 --- a/pages/api/payments/count/index.ts +++ b/pages/api/payments/count/index.ts @@ -1,16 +1,13 @@ -import { CacheGet } from 'redis/index' -import { fetchUserProfileFromId } from 'services/userService' +import { fetchPaymentsCountByUserId } from 'services/transactionService' import { setSession } from 'utils/setSession' export default async (req: any, res: any): Promise => { if (req.method === 'GET') { await setSession(req, res) const userId = req.session.userId - const userReqTimezone = req.headers.timezone as string - const userProfile = await fetchUserProfileFromId(userId) - const userPreferredTimezone = userProfile?.preferredTimezone - const timezone = userPreferredTimezone !== '' ? userPreferredTimezone : userReqTimezone - const resJSON = await CacheGet.paymentsCount(userId, timezone) + const paybuttonId = (req.query.paybuttonId === '' || req.query.paybuttonId === undefined) ? undefined : req.query.paybuttonId as string + const paybuttonIds = paybuttonId !== undefined ? [paybuttonId] : undefined + const resJSON = await fetchPaymentsCountByUserId(userId, paybuttonIds) res.status(200).json(resJSON) } } diff --git a/pages/api/payments/index.ts b/pages/api/payments/index.ts index 84215e557..0665164a0 100644 --- a/pages/api/payments/index.ts +++ b/pages/api/payments/index.ts @@ -9,8 +9,8 @@ export default async (req: any, res: any): Promise => { const pageSize = req.query.pageSize as number const orderDesc: boolean = !!(req.query.orderDesc === '' || req.query.orderDesc === undefined || req.query.orderDesc === 'true') const orderBy = (req.query.orderBy === '' || req.query.orderBy === undefined) ? undefined : req.query.orderBy as string - - const resJSON = await fetchAllPaymentsByUserIdWithPagination(userId, page, pageSize, orderBy, orderDesc) + const paybuttonId = (req.query.paybuttonId === '' || req.query.paybuttonId === undefined) ? undefined : req.query.paybuttonId as string + const resJSON = await fetchAllPaymentsByUserIdWithPagination(userId, page, pageSize, orderBy, orderDesc, paybuttonId) res.status(200).json(resJSON) } } diff --git a/pages/payments/index.tsx b/pages/payments/index.tsx index 6785a8f96..dd9b3bab3 100644 --- a/pages/payments/index.tsx +++ b/pages/payments/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useState } from 'react' +import React, { useCallback, useEffect, useMemo, useState } from 'react' import supertokensNode from 'supertokens-node' import * as SuperTokensConfig from '../../config/backendConfig' import Session from 'supertokens-node/recipe/session' @@ -17,6 +17,7 @@ import TopBar from 'components/TopBar' import { fetchUserWithSupertokens, UserWithSupertokens } from 'services/userService' import { UserProfile } from '@prisma/client' import Button from 'components/Button' +import { PaybuttonWithAddresses } from 'services/paybuttonService' export const getServerSideProps: GetServerSideProps = async (context) => { // this runs on the backend, so we must call init on supertokens-node SDK @@ -57,6 +58,8 @@ export default function Payments ({ user, userId }: PaybuttonsProps): React.Reac const [selectedCurrencyCSV, setSelectedCurrencyCSV] = useState('') const [paybuttonNetworks, setPaybuttonNetworks] = useState>(new Set()) const [loading, setLoading] = useState(false) + const [paybuttons, setPaybuttons] = useState() + const [selectedButton, setSelectedButton] = useState('all') const fetchPaybuttons = async (): Promise => { const res = await fetch(`/api/paybuttons?userId=${user?.userProfile.id}`, { @@ -74,6 +77,7 @@ export default function Payments ({ user, userId }: PaybuttonsProps): React.Reac return p.addresses.forEach((c: { address: { networkId: number } }) => networkIds.add(c.address.networkId)) }) + setPaybuttons(paybuttons) setPaybuttonNetworks(networkIds) } @@ -81,22 +85,28 @@ export default function Payments ({ user, userId }: PaybuttonsProps): React.Reac void getDataAndSetUpCurrencyCSV() }, []) - function fetchData (): Function { - return async (page: number, pageSize: number, orderBy: string, orderDesc: boolean) => { - const paymentsResponse = await fetch(`/api/payments?page=${page}&pageSize=${pageSize}&orderBy=${orderBy}&orderDesc=${String(orderDesc)}`) - const paymentsCountResponse = await fetch('/api/payments/count', { - headers: { - Timezone: timezone + const fetchData = useCallback( + (selectedButton: string): Function => { + return async (page: number, pageSize: number, orderBy: string, orderDesc: boolean) => { + const buttonFilter = selectedButton !== 'all' ? `&paybuttonId=${selectedButton}` : '' + const buttonFilterCount = selectedButton !== 'all' ? `?paybuttonId=${selectedButton}` : '' + + const paymentsResponse = await fetch(`/api/payments?page=${page}&pageSize=${pageSize}&orderBy=${orderBy}&orderDesc=${String(orderDesc)}${buttonFilter}`) + const paymentsCountResponse = await fetch(`/api/payments/count${buttonFilterCount}`, { + headers: { + Timezone: timezone + } + }) + const totalCount = await paymentsCountResponse.json() + const payments = await paymentsResponse.json() + return { + data: payments, + totalCount } - }) - const totalCount = await paymentsCountResponse.json() - const payments = await paymentsResponse.json() - return { - data: payments, - totalCount } - } - } + }, + [selectedButton, timezone] + ) const columns = useMemo( () => [ @@ -215,6 +225,18 @@ export default function Payments ({ user, userId }: PaybuttonsProps): React.Reac <>
+ + {paybuttonNetworks.size > 1 ? (