import { Box, BoxProps, Flex, IconButton, Popover, PopoverBody, PopoverContent, PopoverTrigger, } from "@chakra-ui/react"; import { Plural, t, Trans } from "@lingui/macro"; import { Ability, Prisma } from "@prisma/client"; import ModeImage from "components/common/ModeImage"; import UserAvatar from "components/common/UserAvatar"; import WeaponImage from "components/common/WeaponImage"; import { getEmojiFlag } from "countries-list"; import { PartialBy } from "lib/types"; import { useMyTheme } from "lib/useMyTheme"; import Image from "next/image"; import Link from "next/link"; import { useState } from "react"; import { FiBarChart2, FiEdit, FiInfo, FiTarget } from "react-icons/fi"; import Gears from "./Gears"; import ViewAP from "./ViewAP"; import ViewSlots from "./ViewSlots"; interface BuildCardProps { // TODO: don't select unnecessary fields build: PartialBy, "user">; otherBuildCount?: number; onShowAllByUser?: () => void; onEdit?: (build: BuildCardProps["build"]) => void; showWeapon?: boolean; } const BuildCard: React.FC = ({ build, onEdit, otherBuildCount, onShowAllByUser, showWeapon, ...props }) => { const [apView, setApView] = useState(false); const { themeColorShade, secondaryBgColor, gray } = useMyTheme(); const username = build.user?.username; return ( <> {build.title && ( {build.title} )} {build.user && ( {build.user.username}#{build.user.discriminator} )} {showWeapon && ( )} {build.updatedAt.toLocaleDateString()} {build.jpn ? ( <>{getEmojiFlag("JP")} ) : build.top500 ? ( ) : null} setApView(!apView)} aria-label="Set build card view" fontSize="20px" icon={} mr="0.5em" /> } mr="0.5em" /> {onEdit && ( onEdit(build)} aria-label="Edit build" fontSize="20px" icon={} ml="0.5em" /> )} {apView ? ( } /> ) : ( )} {otherBuildCount ? ( Show # more build by {username}} other={Show # more builds by {username}} /> ) : null} ); function Description() { if (build.modes.length === 0 && !build.description) return null; return ( } /> {build.modes.map((mode) => ( ))} {build.description} ); } }; export default BuildCard;