Skip to content

Commit

Permalink
Aggregate trending cycle
Browse files Browse the repository at this point in the history
  • Loading branch information
wraeth-eth committed Jan 20, 2025
1 parent 26e4dfa commit 6d7002f
Showing 1 changed file with 52 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { ProjectsDocument } from 'packages/v4/graphql/client/graphql'
import { useSubgraphQuery } from 'packages/v4/graphql/useSubgraphQuery'
import useProjectOwnerOf from 'packages/v4/hooks/useV4ProjectOwnerOf'
import { fetchProjectsBySuckers } from 'packages/v4/utils/fetchProjectsBySuckers'
import React from 'react'

export interface ProjectHeaderData {
title: string | undefined
Expand Down Expand Up @@ -46,27 +47,60 @@ export const useV4ProjectHeader = (): ProjectHeaderData => {
})
const projectStatsData = data?.projects?.[0]

const { data: totalPayments, isLoading: totalPaymentsIsLoading } =
useTotalPaymentsCount() ?? 0
const suckers = useSuckers()

// Fallback to the local chain as subgraph omnichain call can take a while
const paymentsCount = totalPaymentsIsLoading
? projectStatsData?.paymentsCount
: totalPayments
const omnichainProjects = useQuery({
enabled: !suckers.isLoading,
queryKey: ['projectData', suckers],
queryFn: async () => {
if (!suckers.data) {
return null
}
return await fetchProjectsBySuckers(suckers.data)
},
})

const {
createdAt,
volume: totalVolumeStr,
trendingVolume: trendingVolumeStr,
} = projectStatsData ?? {
createdAt: 0,
volume: '0',
trendingVolume: '0',
paymentsCount: 0,
}
const paymentsCount = React.useMemo(() => {
if (omnichainProjects.isLoading || !omnichainProjects.data) {
// Fallback to the local chain as subgraph omnichain call can take a while
return projectStatsData?.paymentsCount ?? 0
}
return omnichainProjects.data.reduce((acc, result) => {
return acc + (result.data.paymentsCount ?? 0)
}, 0)
}, [
omnichainProjects.data,
omnichainProjects.isLoading,
projectStatsData?.paymentsCount,
])

const createdAt = projectStatsData?.createdAt

const totalVolume = React.useMemo(() => {
if (omnichainProjects.isLoading || !omnichainProjects.data) {
return projectStatsData?.volume ?? 0n
}
return omnichainProjects.data.reduce((acc, result) => {
return acc + BigInt(result.data.volume)
}, 0n)
}, [
omnichainProjects.data,
omnichainProjects.isLoading,
projectStatsData?.volume,
])

const totalVolume = BigInt(totalVolumeStr)
const trendingVolume = BigInt(trendingVolumeStr)
const trendingVolume = React.useMemo(() => {
if (omnichainProjects.isLoading || !omnichainProjects.data) {
return projectStatsData?.trendingVolume ?? 0n
}
return omnichainProjects.data.reduce((acc, result) => {
return acc + BigInt(result.data.trendingVolume)
}, 0n)
}, [
omnichainProjects.data,
omnichainProjects.isLoading,
projectStatsData?.trendingVolume,
])

const last7DaysPercent = useProjectTrendingPercentageIncrease({
totalVolume: BigNumber.from(totalVolume ?? 0),
Expand All @@ -90,22 +124,3 @@ export const useV4ProjectHeader = (): ProjectHeaderData => {
createdAtSeconds: createdAt,
}
}

const useTotalPaymentsCount = () => {
const { data: suckers, isLoading: suckersIsLoading } = useSuckers()

return useQuery({
enabled: !suckersIsLoading,
queryKey: ['totalPaymentsCount', suckers],
queryFn: async () => {
if (!suckers?.length) {
return 0
}
return await fetchProjectsBySuckers(suckers).then(results => {
return results.reduce((acc, result) => {
return acc + (result.data.paymentsCount ?? 0)
}, 0)
})
},
})
}

0 comments on commit 6d7002f

Please sign in to comment.