import { Box, Flex, Heading, HStack, Link, Modal, ModalCloseButton, ModalContent, ModalOverlay, SimpleGrid, Text, useDisclosure, } from '@metafam/ds'; import { PlayerFragmentFragment } from 'graphql/autogen/types'; import React, { useState } from 'react'; import { isBackdropFilterSupported } from 'utils/compatibilityHelpers'; import polygonImage from '../../../assets/chains/polygon.png'; import xDaiImage from '../../../assets/chains/xDai.png'; import ethereumImage from '../../../assets/moloch/ethereum.png'; import hausdaoImage from '../../../assets/moloch/hausdao.png'; import metacartelImage from '../../../assets/moloch/metacartel.png'; import metaclanImage from '../../../assets/moloch/metaclan.png'; import metagameImage from '../../../assets/moloch/metagame.png'; import raidGuildImage from '../../../assets/moloch/raid_guild.png'; import { ProfileSection } from '../../ProfileSection'; const getImageMoloch = (title: string) => { if (title.toLowerCase().includes('hausdao')) return hausdaoImage; if (title.toLowerCase().includes('metacartel')) return metacartelImage; if (title.toLowerCase().includes('metaclan')) return metaclanImage; if (title.toLowerCase().includes('metagame')) return metagameImage; if (title.toLowerCase().includes('raid guild')) return raidGuildImage; if (title.toLowerCase().includes('xdai')) return xDaiImage; if (title.toLowerCase().includes('polygon')) return polygonImage; return ethereumImage; }; type LinkDaoProps = { chain: string; address: string; setIsLink: React.Dispatch>; }; const LinkDao: React.FC = ({ chain, address, setIsLink, children, }) => { let explorerUrl; if (chain.toLowerCase() === 'xdai') explorerUrl = `https://blockscout.com/xdai/mainnet/address/${address}`; else if (chain.toLowerCase() === 'ethereum') explorerUrl = `https://etherscan.io/address/${address}`; else return <>{children}; setIsLink(true); return ( {children} ); }; type DaoListingProps = { memberId: string; memberShares?: string; memberRank?: string; memberXp?: number; title?: string; daoShares?: string; chain?: string; address?: string; }; const DaoListing: React.FC = ({ title, memberShares, daoShares, memberRank, memberXp, chain, address, }) => { let message; if (memberXp !== undefined) { message = `XP: ${Math.floor(memberXp || 0)}`; } else { message = `Shares: ${memberShares}/${daoShares}`; } const [isLink, setIsLink] = useState(false); return ( {title || `Unknown ${chain} DAO`} {memberRank || 'player'} {message} ); }; type MembershipSectionProps = { player: PlayerFragmentFragment; onRemoveClick: () => void; }; export const PlayerMemberships: React.FC = ({ player, onRemoveClick, }) => { const { isOpen, onOpen, onClose } = useDisclosure(); const modalContentStyles = isBackdropFilterSupported() ? { backgroundColor: 'rgba(255,255,255,0.08)', backdropFilter: 'blur(8px)', } : { backgroundColor: 'rgba(7, 2, 29, 0.91)', }; const memberships: DaoListingProps[] = [ { memberId: 'metagame-pinned', title: 'MetaGame', memberRank: player.rank || '', memberXp: player.total_xp, }, ...(player.daohausMemberships || []).map((m) => ({ memberId: m.id, title: m.moloch.title || undefined, memberShares: m.shares, daoShares: m.moloch.totalShares, chain: m.moloch.chain, address: m.molochAddress, })), ]; return ( {memberships.slice(0, 4).map((dao) => ( ))} {memberships.length > 4 && ( View all )} Memberships {memberships.map((dao) => ( ))} ); };