import { useState, type ButtonHTMLAttributes } from 'react'; import { Link, useParams } from 'react-router-dom'; import orderBy from 'lodash/orderBy'; import { Splash, truncateMiddle, Loader } from '@vegaprotocol/ui-toolkit'; import { DispatchMetricLabels, type DispatchMetric } from '@vegaprotocol/types'; import classNames from 'classnames'; import { useT } from '../../lib/use-t'; import { Table } from '../../components/table'; import { formatNumber, getDateTimeFormat } from '@vegaprotocol/utils'; import { useTeam, type TeamStats as ITeamStats, type Team as TeamType, type Member, type TeamGame, } from '../../lib/hooks/use-team'; import { DApp, EXPLORER_PARTIES, useLinks } from '@vegaprotocol/environment'; import { TeamAvatar } from '../../components/competitions/team-avatar'; import { TeamStats } from '../../components/competitions/team-stats'; import { usePageTitle } from '../../lib/hooks/use-page-title'; import { ErrorBoundary } from '../../components/error-boundary'; import { LayoutWithGradient } from '../../components/layouts-inner'; import { useVegaWallet } from '@vegaprotocol/wallet'; import { JoinTeam } from './join-team'; import { UpdateTeamButton } from './update-team-button'; export const CompetitionsTeam = () => { const t = useT(); const { teamId } = useParams<{ teamId: string }>(); usePageTitle([t('Competitions'), t('Team')]); return ( ); }; const TeamPageContainer = ({ teamId }: { teamId: string | undefined }) => { const t = useT(); const { pubKey } = useVegaWallet(); const { team, partyTeam, stats, members, games, loading, refetch } = useTeam( teamId, pubKey || undefined ); if (loading) { return ( ); } if (!team) { return (

{t('Page not found')}

); } return ( ); }; const TeamPage = ({ team, partyTeam, stats, members, games, refetch, }: { team: TeamType; partyTeam?: TeamType; stats?: ITeamStats; members?: Member[]; games?: TeamGame[]; refetch: () => void; }) => { const t = useT(); const [showGames, setShowGames] = useState(true); return (

{team.name}

setShowGames(true)} data-testid="games-toggle" > {t('Games ({{count}})', { count: games ? games.length : 0 })} setShowGames(false)} data-testid="members-toggle" > {t('Members ({{count}})', { count: members ? members.length : 0, })}
{showGames ? : }
); }; const Games = ({ games }: { games?: TeamGame[] }) => { const t = useT(); if (!games?.length) { return

{t('No games')}

; } return ( ({ rank: game.team.rank, epoch: game.epoch, type: DispatchMetricLabels[game.team.rewardMetric as DispatchMetric], amount: formatNumber(game.team.totalRewardsEarned), participatingTeams: game.entities.length, participatingMembers: game.numberOfParticipants, }))} noCollapse={true} /> ); }; const Members = ({ members }: { members?: Member[] }) => { const t = useT(); if (!members?.length) { return

{t('No members')}

; } const data = orderBy( members.map((m) => ({ referee: , joinedAt: getDateTimeFormat().format(new Date(m.joinedAt)), joinedAtEpoch: Number(m.joinedAtEpoch), })), 'joinedAtEpoch', 'desc' ); return (
); }; const RefereeLink = ({ pubkey }: { pubkey: string }) => { const linkCreator = useLinks(DApp.Explorer); const link = linkCreator(EXPLORER_PARTIES.replace(':id', pubkey)); return ( {truncateMiddle(pubkey)} ); }; const ToggleButton = ({ active, ...props }: ButtonHTMLAttributes & { active: boolean }) => { return (