Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/common/src/adapters/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ export const userMetadataFromSDK = (input: User): UserMetadata | undefined => {
location: input.location ?? null,
profile_picture_sizes: input.profilePictureSizes ?? null,

// Explicit handling for artist_coin_badge to convert nested logoUri to logo_uri
artist_coin_badge: input.artistCoinBadge
// Explicit handling for fan_club_badge to convert nested logoUri to logo_uri
fan_club_badge: input.artistCoinBadge
? {
mint: input.artistCoinBadge.mint ?? '',
logo_uri: input.artistCoinBadge.logoUri ?? '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { QUERY_KEYS } from '../queryKeys'
import { contextCacheResolver } from './contextCacheResolver'
import { BatchContext } from './types'

export const getArtistCoinsBatcher = memoize(
export const getFanClubsBatcher = memoize(
(context: BatchContext) =>
create({
fetcher: async (mints: string[]): Promise<Coin[]> => {
Expand Down
16 changes: 8 additions & 8 deletions packages/common/src/api/tan-query/coins/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Coins
export * from './useArtistCoin'
export * from './useArtistCoinByTicker'
export * from './useArtistCoinMembers'
export * from './useArtistCoinHoldersCount'
export * from './useArtistCoinMembersCount'
export * from './useArtistCoins'
export * from './useArtistCreatedCoin'
export * from './useFanClub'
export * from './useFanClubByTicker'
export * from './useFanClubMembers'
export * from './useFanClubHoldersCount'
export * from './useFanClubMembersCount'
export * from './useFanClubs'
export * from './useArtistCreatedFanClub'
export * from './useCoinGeckoCoin'
export * from './useCoinPair'
export * from './useCoinRedeemAmount'
Expand All @@ -14,7 +14,7 @@ export * from './useRedeemCoin'
export * from './useRedeemCoinCode'
export * from './useFirstBuyQuote'
export * from './useTradeableCoins'
export * from './useUpdateArtistCoin'
export * from './useUpdateFanClub'
export * from './useUserCoin'
export * from './useUserCoins'
export * from './useWalletCoins'
Expand Down
10 changes: 5 additions & 5 deletions packages/common/src/api/tan-query/coins/tokenUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@ const coinMetadataToTokenInfo = (coin: CoinMetadata): CoinInfo => ({
isStablecoin: false // API tokens are never stablecoins, only USDC is (which is frontend-only)
})

export const transformArtistCoinToTokenInfo = (artistCoin: Coin): CoinInfo => {
const coinMetadata = coinMetadataFromCoin(artistCoin)
export const transformFanClubToTokenInfo = (fanClub: Coin): CoinInfo => {
const coinMetadata = coinMetadataFromCoin(fanClub)
return coinMetadataToTokenInfo(coinMetadata)
}

export const transformArtistCoinsToTokenInfoMap = (
artistCoins: Coin[]
export const transformFanClubsToTokenInfoMap = (
fanClubs: Coin[]
): Record<string, CoinInfo> => {
const tokenMap: Record<string, CoinInfo> = {}

artistCoins.forEach((coin) => {
fanClubs.forEach((coin) => {
const coinMetadata = coinMetadataFromCoin(coin)
const ticker = coinMetadata.ticker || ''
if (ticker) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,21 @@ import { QUERY_KEYS } from '../queryKeys'
import { QueryKey, SelectableQueryOptions } from '../types'
import { useQueryContext } from '../utils/QueryContext'

import { getArtistCoinQueryKey } from './useArtistCoin'
import { getFanClubQueryKey } from './useFanClub'

export const getArtistCreatedCoinQueryKey = (ownerId: ID | null | undefined) =>
[QUERY_KEYS.coins, 'created', ownerId] as unknown as QueryKey<Coin | null>
export const getArtistCreatedFanClubQueryKey = (
ownerId: ID | null | undefined
) => [QUERY_KEYS.coins, 'created', ownerId] as unknown as QueryKey<Coin | null>

export const useArtistCreatedCoin = <TResult = Coin | null>(
export const useArtistCreatedFanClub = <TResult = Coin | null>(
ownerId: ID | null | undefined,
options?: SelectableQueryOptions<Coin | null, TResult>
) => {
const { audiusSdk } = useQueryContext()
const queryClient = useQueryClient()

return useQuery({
queryKey: getArtistCreatedCoinQueryKey(ownerId),
queryKey: getArtistCreatedFanClubQueryKey(ownerId),
queryFn: async () => {
if (!ownerId) {
return null
Expand All @@ -43,7 +44,7 @@ export const useArtistCreatedCoin = <TResult = Coin | null>(
if (parsedCoins && parsedCoins.length > 0) {
const coin = parsedCoins[0] // Get the first (and only) coin
if (coin.mint) {
queryClient.setQueryData(getArtistCoinQueryKey(coin.mint), coin)
queryClient.setQueryData(getFanClubQueryKey(coin.mint), coin)
}
return coin
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,25 @@ import { AnyAction, Dispatch } from 'redux'

import { coinFromSdk, Coin } from '~/adapters/coin'

import { getArtistCoinsBatcher } from '../batchers/getArtistCoinsBatcher'
import { getFanClubsBatcher } from '../batchers/getFanClubsBatcher'
import { QUERY_KEYS } from '../queryKeys'
import { QueryKey, SelectableQueryOptions } from '../types'
import { useQueryContext } from '../utils'
import { entityCacheOptions } from '../utils/entityCacheOptions'

export const getArtistCoinQueryKey = (mint: string | null | undefined) =>
export const getFanClubQueryKey = (mint: string | null | undefined) =>
[QUERY_KEYS.coin, mint] as unknown as QueryKey<Coin | undefined>

export const getArtistCoinByTickerQueryKey = (ticker: string) =>
export const getFanClubByTickerQueryKey = (ticker: string) =>
[QUERY_KEYS.coinByTicker, ticker] as unknown as QueryKey<string>

export const getArtistCoinQueryFn = async (
export const getFanClubQueryFn = async (
mint: string,
queryClient: QueryClient,
sdk: any,
dispatch: Dispatch<AnyAction>
) => {
const batchGetCoins = getArtistCoinsBatcher({
const batchGetCoins = getFanClubsBatcher({
sdk,
currentUserId: null,
queryClient,
Expand All @@ -32,7 +32,7 @@ export const getArtistCoinQueryFn = async (
return coins
}

export const useArtistCoin = <TResult = Coin | undefined>(
export const useFanClub = <TResult = Coin | undefined>(
mint: string | null | undefined,
options?: SelectableQueryOptions<Coin | undefined, TResult>
) => {
Expand All @@ -41,9 +41,9 @@ export const useArtistCoin = <TResult = Coin | undefined>(
const queryClient = useQueryClient()

return useQuery({
queryKey: getArtistCoinQueryKey(mint),
queryKey: getFanClubQueryKey(mint),
queryFn: async () => {
const coin = await getArtistCoinQueryFn(
const coin = await getFanClubQueryFn(
mint!,
queryClient,
await audiusSdk(),
Expand All @@ -55,7 +55,7 @@ export const useArtistCoin = <TResult = Coin | undefined>(
// Prime the ticker query key if we have coin data with ticker
if (parsedCoin?.ticker) {
queryClient.setQueryData(
getArtistCoinByTickerQueryKey(parsedCoin.ticker),
getFanClubByTickerQueryKey(parsedCoin.ticker),
parsedCoin.mint
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { formatTicker } from '~/utils'
import { QUERY_KEYS } from '../queryKeys'
import { combineQueryStatuses } from '../utils'

import { useArtistCoin, getArtistCoinQueryKey } from './useArtistCoin'
import { useFanClub, getFanClubQueryKey } from './useFanClub'

/**
* Function to check if a coin ticker is available for use.
Expand Down Expand Up @@ -46,24 +46,22 @@ export const fetchCoinTickerAvailability = async (
}
}

export interface UseArtistCoinByTickerParams {
export interface UseFanClubByTickerParams {
ticker: string
}

const getArtistCoinByTickerQueryKey = (ticker: string) =>
const getFanClubByTickerQueryKey = (ticker: string) =>
[QUERY_KEYS.coinByTicker, ticker] as const

type FetchArtistCoinByTickerContext = Pick<QueryContextType, 'audiusSdk'> & {
type FetchFanClubByTickerContext = Pick<QueryContextType, 'audiusSdk'> & {
queryClient: any
}

const getArtistCoinByTickerQueryFn =
(context: FetchArtistCoinByTickerContext) =>
const getFanClubByTickerQueryFn =
(context: FetchFanClubByTickerContext) =>
async ({
queryKey
}: QueryFunctionContext<
ReturnType<typeof getArtistCoinByTickerQueryKey>
>) => {
}: QueryFunctionContext<ReturnType<typeof getFanClubByTickerQueryKey>>) => {
const [_ignored, ticker] = queryKey
const { audiusSdk } = context
const sdk = await audiusSdk()
Expand All @@ -73,45 +71,45 @@ const getArtistCoinByTickerQueryFn =
})
const coin = coinFromSdk(response.data)

// Prime the artist coin query key if we have the mint
// Prime the fan club query key if we have the mint
if (coin?.mint) {
context.queryClient.setQueryData(getArtistCoinQueryKey(coin.mint), coin)
context.queryClient.setQueryData(getFanClubQueryKey(coin.mint), coin)
}

return coin?.mint
}

/**
* Helper function to get the query options for fetching an artist coin by ticker.
* Helper function to get the query options for fetching an fan club by ticker.
* Useful for getting the query key tagged with the data type stored in the cache.
*/
export const getArtistCoinByTickerOptions = (
context: FetchArtistCoinByTickerContext,
{ ticker }: UseArtistCoinByTickerParams
export const getFanClubByTickerOptions = (
context: FetchFanClubByTickerContext,
{ ticker }: UseFanClubByTickerParams
) => {
return queryOptions({
queryKey: getArtistCoinByTickerQueryKey(formatTicker(ticker)),
queryFn: getArtistCoinByTickerQueryFn(context),
queryKey: getFanClubByTickerQueryKey(formatTicker(ticker)),
queryFn: getFanClubByTickerQueryFn(context),
enabled: !!ticker
})
}

export const useArtistCoinByTicker = (
params: UseArtistCoinByTickerParams,
options?: Partial<ReturnType<typeof getArtistCoinByTickerOptions>>
export const useFanClubByTicker = (
params: UseFanClubByTickerParams,
options?: Partial<ReturnType<typeof getFanClubByTickerOptions>>
) => {
const context = useQueryContext()
const queryClient = useQueryClient()

const mintQuery = useQuery({
...options,
...getArtistCoinByTickerOptions(
...getFanClubByTickerOptions(
{ ...context, queryClient },
{ ...params, ticker: formatTicker(params.ticker) }
)
})

const coinQuery = useArtistCoin(mintQuery.data!)
const coinQuery = useFanClub(mintQuery.data!)

// Return the coin query result, but surface errors from the mint lookup
return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,15 @@ import { QueryKey, QueryOptions } from '../types'
import { useCurrentUserId } from '../users/account/useCurrentUserId'
import { useQueryContext } from '../utils/QueryContext'

export const getArtistCoinHoldersCountQueryKey = (
currentUserId?: number | null
) =>
[
QUERY_KEYS.artistCoinHoldersCount,
currentUserId
] as unknown as QueryKey<number>

export const useArtistCoinHoldersCount = (options?: QueryOptions) => {
export const getFanClubHoldersCountQueryKey = (currentUserId?: number | null) =>
[QUERY_KEYS.fanClubHoldersCount, currentUserId] as unknown as QueryKey<number>

export const useFanClubHoldersCount = (options?: QueryOptions) => {
const { audiusSdk } = useQueryContext()
const { data: currentUserId } = useCurrentUserId()

return useQuery({
queryKey: getArtistCoinHoldersCountQueryKey(currentUserId),
queryKey: getFanClubHoldersCountQueryKey(currentUserId),
queryFn: async () => {
const sdk = await audiusSdk()
if (!currentUserId) return 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { formatNumberCommas } from '~/utils'
import { QUERY_KEYS } from '../queryKeys'
import { QueryKey } from '../types'

import { useArtistCoin } from './useArtistCoin'
import { useFanClub } from './useFanClub'

const DEFAULT_PAGE_SIZE = 20

Expand All @@ -23,7 +23,7 @@ export interface CoinMember {
balanceLocaleString: string
}

export interface UseArtistCoinMembersArgs {
export interface UseFanClubMembersArgs {
mint: string | null
pageSize?: number
minBalance?: number
Expand All @@ -37,28 +37,28 @@ export const getCoinLeaderboardQueryKey = (
sortDirection?: 'asc' | 'desc'
) =>
[
QUERY_KEYS.artistCoinMembers,
QUERY_KEYS.fanClubMembers,
mint,
pageSize,
minBalance,
sortDirection
] as unknown as QueryKey<InfiniteData<CoinMember[], number>>

export const useArtistCoinMembers = <TResult = CoinMember[]>(
export const useFanClubMembers = <TResult = CoinMember[]>(
{
mint,
pageSize = DEFAULT_PAGE_SIZE,
minBalance,
sortDirection = 'desc'
}: UseArtistCoinMembersArgs,
}: UseFanClubMembersArgs,
options?: Pick<
UseInfiniteQueryOptions<CoinMember[], Error, TResult>,
'select' | 'enabled'
>
) => {
const { audiusSdk } = useQueryContext()

const { data: artistCoin } = useArtistCoin(mint)
const { data: fanClub } = useFanClub(mint)

return useInfiniteQuery({
queryKey: getCoinLeaderboardQueryKey(
Expand All @@ -74,7 +74,7 @@ export const useArtistCoinMembers = <TResult = CoinMember[]>(
},
queryFn: async ({ pageParam }) => {
if (!mint) return []
if (!artistCoin) return []
if (!fanClub) return []

const sdk = await audiusSdk()

Expand All @@ -88,7 +88,7 @@ export const useArtistCoinMembers = <TResult = CoinMember[]>(
const response = await sdk.coins.getCoinMembers(params)

const members = (response.data ?? []).map((member) => {
const decimals = artistCoin.decimals
const decimals = fanClub.decimals
const balanceFD = new FixedDecimal(
BigInt(member.balance.toString()),
decimals
Expand All @@ -110,6 +110,6 @@ export const useArtistCoinMembers = <TResult = CoinMember[]>(
return members
},
select: options?.select ?? ((data) => data.pages.flat() as TResult),
enabled: options?.enabled !== false && !!mint && !!artistCoin
enabled: options?.enabled !== false && !!mint && !!fanClub
})
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ import { QUERY_KEYS } from '../queryKeys'
import { QueryKey, QueryOptions } from '../types'
import { useQueryContext } from '../utils/QueryContext'

export const getArtistCoinMembersCountQueryKey = (
export const getFanClubMembersCountQueryKey = (
mint: string | null | undefined
) => [QUERY_KEYS.artistCoinMembersCount, mint] as unknown as QueryKey<number>
) => [QUERY_KEYS.fanClubMembersCount, mint] as unknown as QueryKey<number>

export const useArtistCoinMembersCount = (
export const useFanClubMembersCount = (
{ mint }: { mint: string | null | undefined },
options?: QueryOptions
) => {
const { audiusSdk } = useQueryContext()

return useQuery({
queryKey: getArtistCoinMembersCountQueryKey(mint),
queryKey: getFanClubMembersCountQueryKey(mint),
queryFn: async () => {
const sdk = await audiusSdk()
if (!mint) return 0
Expand Down
Loading
Loading