diff --git a/common/badge.ts b/common/badge.ts index 61d98e4a..c20b1f03 100644 --- a/common/badge.ts +++ b/common/badge.ts @@ -106,12 +106,13 @@ export const calculateBadgeRarity = (badge: Badge) => { } } -export const getBadgesByRarity = (user: User) => { +export const getBadgesByRarity = (user: User | null | undefined) => { const rarities: { [key in rarities]: number } = { bronze: 0, silver: 0, gold: 0, } + if (!user) return rarities Object.values(user.achievements).map((value) => { value.badges.map((badge) => { rarities[calculateBadgeRarity(badge)] = @@ -120,7 +121,3 @@ export const getBadgesByRarity = (user: User) => { }) return rarities } - -export const goldClassName = 'text-amber-400' -export const silverClassName = 'text-gray-500' -export const bronzeClassName = 'text-amber-900' diff --git a/web/components/badge-display.tsx b/web/components/badge-display.tsx new file mode 100644 index 00000000..983956cd --- /dev/null +++ b/web/components/badge-display.tsx @@ -0,0 +1,62 @@ +import { User } from 'common/user' +import { NextRouter } from 'next/router' +import { useEffect, useState } from 'react' +import { getBadgesByRarity } from 'common/badge' +import { Row } from 'web/components/layout/row' +import clsx from 'clsx' +import { BadgesModal } from 'web/components/profile/badges-modal' + +export const goldClassName = 'text-amber-400' +export const silverClassName = 'text-gray-500' +export const bronzeClassName = 'text-amber-900' + +export function BadgeDisplay(props: { + user: User | undefined | null + router?: NextRouter +}) { + const { user, router } = props + const [showBadgesModal, setShowBadgesModal] = useState(false) + + useEffect(() => { + if (!router) return + const showBadgesModal = router.query['show'] === 'badges' + setShowBadgesModal(showBadgesModal) + }, [router]) + // get number of badges of each rarity type + const badgesByRarity = getBadgesByRarity(user) + const badgesByRarityItems = Object.entries(badgesByRarity).map( + ([rarity, numBadges]) => { + return ( + + + {numBadges} + + ) + } + ) + return ( + setShowBadgesModal(true)} + > + {badgesByRarityItems} + {user && ( + + )} + + ) +} diff --git a/web/components/contract/contract-details.tsx b/web/components/contract/contract-details.tsx index d2734ab5..ed7374b1 100644 --- a/web/components/contract/contract-details.tsx +++ b/web/components/contract/contract-details.tsx @@ -154,8 +154,8 @@ export function MarketSubheader(props: { const { creatorName, creatorUsername, creatorId, creatorAvatarUrl } = contract const { resolvedDate } = contractMetrics(contract) const user = useUser() - const correctResolutionPercentage = - useUserById(creatorId)?.fractionResolvedCorrectly + const creator = useUserById(creatorId) + const correctResolutionPercentage = creator?.fractionResolvedCorrectly const isCreator = user?.id === creatorId const isMobile = useIsMobile() return ( @@ -178,12 +178,15 @@ export function MarketSubheader(props: { {disabled ? ( creatorName ) : ( - + + + {/**/} + )} {correctResolutionPercentage != null && correctResolutionPercentage < BAD_CREATOR_THRESHOLD && ( diff --git a/web/components/profile/badges-modal.tsx b/web/components/profile/badges-modal.tsx index 68338abd..96e0fa9d 100644 --- a/web/components/profile/badges-modal.tsx +++ b/web/components/profile/badges-modal.tsx @@ -4,13 +4,10 @@ import { PAST_BETS, User } from 'common/user' import clsx from 'clsx' import { Badge, - bronzeClassName, calculateBadgeRarity, - goldClassName, MarketCreatorBadge, ProvenCorrectBadge, rarities, - silverClassName, StreakerBadge, } from 'common/badge' import { groupBy } from 'lodash' @@ -18,6 +15,11 @@ import { Row } from 'web/components/layout/row' import { SiteLink } from 'web/components/site-link' import { contractPathWithoutContract } from 'web/lib/firebase/contracts' import { Tooltip } from 'web/components/tooltip' +import { + bronzeClassName, + goldClassName, + silverClassName, +} from 'web/components/badge-display' export function BadgesModal(props: { isOpen: boolean diff --git a/web/components/user-page.tsx b/web/components/user-page.tsx index c510807a..f0ad0569 100644 --- a/web/components/user-page.tsx +++ b/web/components/user-page.tsx @@ -33,16 +33,10 @@ import { PortfolioValueSection } from './portfolio/portfolio-value-section' import { formatMoney } from 'common/util/format' import { LoansModal } from './profile/loans-modal' -import { BadgesModal } from 'web/components/profile/badges-modal' import { copyToClipboard } from 'web/lib/util/copy' import { track } from 'web/lib/service/analytics' import { DOMAIN } from 'common/envs/constants' -import { - bronzeClassName, - getBadgesByRarity, - goldClassName, - silverClassName, -} from 'common/badge' +import { BadgeDisplay } from 'web/components/badge-display' export function UserPage(props: { user: User }) { const { user } = props @@ -334,49 +328,3 @@ export function ProfilePublicStats(props: { user: User; className?: string }) { ) } - -function BadgeDisplay(props: { user: User; router: NextRouter }) { - const { user, router } = props - const [showBadgesModal, setShowBadgesModal] = useState(false) - - useEffect(() => { - const showBadgesModal = router.query['show'] === 'badges' - setShowBadgesModal(showBadgesModal) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) - // get number of badges of each rarity type - const badgesByRarity = getBadgesByRarity(user) - const badgesByRarityItems = Object.entries(badgesByRarity).map( - ([rarity, numBadges]) => { - return ( - - - {numBadges} - - ) - } - ) - return ( - setShowBadgesModal(true)} - > - {badgesByRarityItems} - - - ) -}