import { addDecimalsFormatNumber, getDateTimeFormat, } from '@vegaprotocol/utils'; import { useReferralProgram } from './hooks/use-referral-program'; import { Table } from '../../components/table'; import classNames from 'classnames'; import { BORDER_COLOR, GRADIENT } from './constants'; import { Tag } from '../../components/helpers/tag'; import { getTierColor, getTierGradient } from '../../components/helpers/tiers'; import type { ReactNode } from 'react'; import { ExternalLink, truncateMiddle } from '@vegaprotocol/ui-toolkit'; import { DApp, DocsLinks, TOKEN_PROPOSAL, TOKEN_PROPOSALS, useLinks, } from '@vegaprotocol/environment'; import { useT, ns } from '../../lib/use-t'; import { Trans } from 'react-i18next'; const Loading = ({ variant }: { variant: 'large' | 'inline' }) => (
); const StakingTier = ({ tier, referralRewardMultiplier, minimumStakedTokens, max, }: { tier: number; referralRewardMultiplier: string; minimumStakedTokens: string; max?: number; }) => { const t = useT(); const minimum = addDecimalsFormatNumber(minimumStakedTokens, 18); // TODO: Decide what to do with the multiplier images // eslint-disable-next-line @typescript-eslint/no-unused-vars const multiplierImage = (
{`${referralRewardMultiplier}x multiplier`}
); return (
{t('Multiplier')} {referralRewardMultiplier}x

]} />

); }; export const TiersContainer = () => { const t = useT(); const { benefitTiers, stakingTiers, details, loading, error } = useReferralProgram(); const ends = details?.endOfProgramTimestamp ? getDateTimeFormat().format(new Date(details.endOfProgramTimestamp)) : undefined; const governanceLink = useLinks(DApp.Governance); if ((!loading && !details) || error) { return (
{t('Governance App')} , ]} ns={ns} />{' '} {t('docs')} , ]} ns={ns} />
); } return ( <>

{t('Current program details')}

{details?.id && (

proposal , ]} />

)} {/* Meta */}
{details?.id && ( {t('Proposal ID:')}{' '} {truncateMiddle(details.id)} )} {ends && ( {t('Program ends:')} {ends} )}
{/* Container */}
{/* Benefit tiers */}

{t('Benefit tiers')}

{t( 'Members of a referral group can access the increasing commission and discount benefits defined in the program based on their combined running volume.' )}

{loading || !benefitTiers || benefitTiers.length === 0 ? ( ) : ( ({ ...bt, tierElement: (
{bt.tier}
), }))} /> )}
{/* Staking tiers */}

{t('Staking multipliers')}

{t( 'Referrers can access the commission multipliers defined in the program by staking VEGA tokens in the amounts shown.' )}

{loading || !stakingTiers || stakingTiers.length === 0 ? ( <> ) : ( )}
); }; const StakingTiers = ({ data, }: { data: ReturnType['stakingTiers']; }) => ( <> {data.map(({ tier, referralRewardMultiplier, minimumStakedTokens }, i) => ( ))} ); const TiersTable = ({ data, windowLength, }: { data: Array<{ tier: number; tierElement: ReactNode; commission: string; discount: string; volume: string; }>; windowLength?: number; }) => { const t = useT(); return ( ({ ...d, className: classNames(getTierGradient(d.tier, data.length)), }))} /> ); };