Skip to content

Commit

Permalink
clients/web: move transactions queries to new client
Browse files Browse the repository at this point in the history
  • Loading branch information
frankie567 committed Feb 7, 2025
1 parent 87eb021 commit 16a685e
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import {
getAPIParams,
serializeSearchParams,
} from '@/utils/datatable'
import { TransactionType } from '@polar-sh/api'
import {
Tabs,
TabsContent,
Expand Down Expand Up @@ -76,17 +75,17 @@ export default function ClientPage({
)

const balancesHook = useSearchTransactions({
accountId: account?.id,
type: TransactionType.BALANCE,
excludePlatformFees: true,
account_id: account?.id,
type: 'balance',
exclude_platform_fees: true,
...getAPIParams(pagination, sorting),
})
const balances = balancesHook.data?.items || []
const balancesCount = balancesHook.data?.pagination.max_page ?? 1

const payoutsHooks = useSearchTransactions({
accountId: account?.id,
type: TransactionType.PAYOUT,
account_id: account?.id,
type: 'payout',
...getAPIParams(pagination, sorting),
})
const refetchPayouts = payoutsHooks.refetch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export default function ClientPage({
}

const transactionsHook = useSearchTransactions({
paymentUserId: currentUser?.id,
payment_user_id: currentUser?.id,
...getAPIParams(pagination, sorting),
})
const transactions = transactionsHook.data?.items || []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
getAPIParams,
serializeSearchParams,
} from '@/utils/datatable'
import { Organization, TransactionType } from '@polar-sh/api'
import { components } from '@polar-sh/client'
import {
Tabs,
TabsContent,
Expand All @@ -28,7 +28,7 @@ export default function ClientPage({
}: {
pagination: DataTablePaginationState
sorting: DataTableSortingState
organization: Organization
organization: components['schemas']['Organization']
}) {
const router = useRouter()
const pathname = usePathname()
Expand Down Expand Up @@ -77,17 +77,17 @@ export default function ClientPage({
useOrganizationAccount(organization.id)

const balancesHook = useSearchTransactions({
accountId: organizationAccount?.id,
type: TransactionType.BALANCE,
excludePlatformFees: true,
account_id: organizationAccount?.id,
type: 'balance',
exclude_platform_fees: true,
...getAPIParams(pagination, sorting),
})
const balances = balancesHook.data?.items || []
const balancesCount = balancesHook.data?.pagination.max_page ?? 1

const payoutsHooks = useSearchTransactions({
accountId: organizationAccount?.id,
type: TransactionType.PAYOUT,
account_id: organizationAccount?.id,
type: 'payout',
...getAPIParams(pagination, sorting),
})
const refetchPayouts = payoutsHooks.refetch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
getAPIParams,
serializeSearchParams,
} from '@/utils/datatable'
import { Organization } from '@polar-sh/api'
import { components } from '@polar-sh/client'
import { usePathname, useRouter } from 'next/navigation'

export default function ClientPage({
Expand All @@ -19,7 +19,7 @@ export default function ClientPage({
}: {
pagination: DataTablePaginationState
sorting: DataTableSortingState
organization: Organization
organization: components['schemas']['Organization']
}) {
const router = useRouter()
const pathname = usePathname()
Expand Down Expand Up @@ -55,7 +55,7 @@ export default function ClientPage({
}

const transactionsHook = useSearchTransactions({
paymentOrganizationId: organization.id,
payment_organization_id: organization.id,
...getAPIParams(pagination, sorting),
})
const transactions = transactionsHook.data?.items || []
Expand Down
54 changes: 30 additions & 24 deletions clients/apps/web/src/components/Transactions/TransactionsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,7 @@ import {
KeyboardArrowDownOutlined,
KeyboardArrowRightOutlined,
} from '@mui/icons-material'
import {
PlatformFeeType,
Transaction,
TransactionEmbedded,
TransactionType,
} from '@polar-sh/api'
import { components } from '@polar-sh/client'
import Avatar from '@polar-sh/ui/components/atoms/Avatar'
import {
DataTable,
Expand All @@ -26,7 +21,9 @@ import Link from 'next/link'
import { useMemo } from 'react'
import ProductPill from '../Products/ProductPill'

const getTransactionMeta = (transaction: Transaction) => {
const getTransactionMeta = (
transaction: components['schemas']['Transaction'],
) => {
if (transaction.order) {
return {
type: transaction.order.subscription_id ? 'Subscription' : 'Purchase',
Expand All @@ -48,7 +45,7 @@ const getTransactionMeta = (transaction: Transaction) => {
externalOrganization: transaction.pledge?.issue.organization,
meta: transaction.pledge,
}
} else if (transaction.type === TransactionType.PAYOUT) {
} else if (transaction.type === 'payout') {
return {
type: 'Payout',
meta: undefined,
Expand All @@ -61,7 +58,7 @@ const getTransactionMeta = (transaction: Transaction) => {
}

interface TransactionMetaProps {
transaction: Transaction
transaction: components['schemas']['Transaction']
}

const TransactionMeta: React.FC<TransactionMetaProps> = ({ transaction }) => {
Expand Down Expand Up @@ -132,33 +129,39 @@ const TransactionMeta: React.FC<TransactionMetaProps> = ({ transaction }) => {
}

export const platformFeesDisplayNames: {
[key in PlatformFeeType]: string
[key in components['schemas']['PlatformFeeType']]: string
} = {
[PlatformFeeType.PAYMENT]: 'Payment fee',
[PlatformFeeType.INTERNATIONAL_PAYMENT]: 'International payment fee',
[PlatformFeeType.SUBSCRIPTION]: 'Subscription fee',
[PlatformFeeType.INVOICE]: 'Invoice fee',
[PlatformFeeType.CROSS_BORDER_TRANSFER]: 'Cross-border transfer payout fee',
[PlatformFeeType.PAYOUT]: 'Payout fee',
[PlatformFeeType.ACCOUNT]: 'Active payout account fee',
[PlatformFeeType.DISPUTE]: 'Dispute fee',
[PlatformFeeType.PLATFORM]: 'Polar fee',
payment: 'Payment fee',
international_payment: 'International payment fee',
subscription: 'Subscription fee',
invoice: 'Invoice fee',
cross_border_transfer: 'Cross-border transfer payout fee',
payout: 'Payout fee',
account: 'Active payout account fee',
dispute: 'Dispute fee',
platform: 'Polar fee',
}

interface TransactionsListProps {
transactions: Transaction[]
transactions: components['schemas']['Transaction'][]
pageCount: number
pagination: DataTablePaginationState
onPaginationChange?: DataTableOnChangeFn<DataTablePaginationState>
sorting: DataTableSortingState
onSortingChange?: DataTableOnChangeFn<DataTableSortingState>
extraColumns?: DataTableColumnDef<Transaction | TransactionEmbedded>[]
extraColumns?: DataTableColumnDef<
| components['schemas']['Transaction']
| components['schemas']['TransactionEmbedded']
>[]
isLoading: boolean | ReactQueryLoading
}

export const isTransaction = (
t: Transaction | TransactionEmbedded,
): t is Transaction => t.hasOwnProperty('account_incurred_transactions')
t:
| components['schemas']['Transaction']
| components['schemas']['TransactionEmbedded'],
): t is components['schemas']['Transaction'] =>
t.hasOwnProperty('account_incurred_transactions')

const TransactionsList = ({
transactions,
Expand All @@ -170,7 +173,10 @@ const TransactionsList = ({
extraColumns,
isLoading,
}: TransactionsListProps) => {
const columns: DataTableColumnDef<Transaction | TransactionEmbedded>[] = [
const columns: DataTableColumnDef<
| components['schemas']['Transaction']
| components['schemas']['TransactionEmbedded']
>[] = [
{
id: 'expand',
enableSorting: false,
Expand Down
63 changes: 33 additions & 30 deletions clients/apps/web/src/hooks/queries/transactions.ts
Original file line number Diff line number Diff line change
@@ -1,59 +1,62 @@
import { api } from '@/utils/api'
import {
ListResourceTransaction,
PayoutEstimate,
ResponseError,
TransactionSortProperty,
TransactionType,
TransactionsSummary,
} from '@polar-sh/api'
import { api } from '@/utils/client'
import { components, unwrap } from '@polar-sh/client'
import { UseQueryResult, useQuery } from '@tanstack/react-query'
import { defaultRetry } from './retry'

export const useSearchTransactions = (variables: {
accountId?: string
paymentUserId?: string
paymentOrganizationId?: string
excludePlatformFees?: boolean
type?: TransactionType
account_id?: string
payment_user_id?: string
payment_organization_id?: string
exclude_platform_fees?: boolean
type?: components['schemas']['TransactionType']
page?: number
limit?: number
sorting?: TransactionSortProperty[]
}): UseQueryResult<ListResourceTransaction> =>
sorting?: components['schemas']['TransactionSortProperty'][]
}): UseQueryResult<components['schemas']['ListResource_Transaction_']> =>
useQuery({
queryKey: ['transactions', { ...variables }],
queryFn: () =>
api.transactions.searchTransactions({
...variables,
}),
unwrap(
api.GET('/v1/transactions/search', {
params: { query: { ...variables } },
}),
),
retry: defaultRetry,
enabled:
!!variables.accountId ||
!!variables.paymentUserId ||
!!variables.paymentOrganizationId,
!!variables.account_id ||
!!variables.payment_user_id ||
!!variables.payment_organization_id,
})

export const useTransactionsSummary = (
accountId: string,
): UseQueryResult<TransactionsSummary> =>
): UseQueryResult<components['schemas']['TransactionsSummary']> =>
useQuery({
queryKey: ['transactions_summary', accountId],
queryFn: () =>
api.transactions.getSummary({
accountId,
}),
unwrap(
api.GET('/v1/transactions/summary', {
params: {
query: { account_id: accountId },
},
}),
),
retry: defaultRetry,
enabled: !!accountId,
})

export const usePayoutEstimate = (
accountId: string,
enabled: boolean = true,
): UseQueryResult<PayoutEstimate> =>
): UseQueryResult<components['schemas']['PayoutEstimate']> =>
useQuery({
queryKey: ['payout_estimate', accountId],
queryFn: () => api.transactions.getPayoutEstimate({ accountId }),
retry: (failureCount, error) =>
!(error instanceof ResponseError) && failureCount < 3,
queryFn: () =>
unwrap(
api.GET('/v1/transactions/payouts', {
params: { query: { account_id: accountId } },
}),
),
retry: defaultRetry,
enabled,
})

0 comments on commit 16a685e

Please sign in to comment.