import clsx from "clsx"; import { useTranslation } from "~/hooks/useTranslation"; import { Link } from "react-router-dom"; import type { Build, BuildWeapon, GearType, UserWithPlusTier, } from "~/db/types"; import { useIsMounted } from "~/hooks/useIsMounted"; import { useUser } from "~/features/auth/core"; import type { Ability as AbilityType, ModeShort, } from "~/modules/in-game-lists"; import type { BuildAbilitiesTuple } from "~/modules/in-game-lists/types"; import { databaseTimestampToDate } from "~/utils/dates"; import { discordFullName, gearTypeToInitial } from "~/utils/strings"; import { analyzerPage, gearImageUrl, mainWeaponImageUrl, modeImageUrl, mySlugify, navIconUrl, userBuildsPage, weaponBuildPage, } from "~/utils/urls"; import { Ability } from "./Ability"; import { Button, LinkButton } from "./Button"; import { FormWithConfirm } from "./FormWithConfirm"; import { TrashIcon } from "./icons/Trash"; import { EditIcon } from "./icons/Edit"; import { Image } from "./Image"; import { Popover } from "./Popover"; import { InfoIcon } from "./icons/Info"; import { LockIcon } from "./icons/Lock"; import type { BuildWeaponWithTop500Info } from "~/features/builds"; import { altWeaponIdToId } from "~/modules/in-game-lists/weapon-ids"; interface BuildProps { build: Pick< Build, | "id" | "title" | "description" | "clothesGearSplId" | "headGearSplId" | "shoesGearSplId" | "updatedAt" | "private" > & { abilities: BuildAbilitiesTuple; modes: ModeShort[] | null; weapons: Array<{ weaponSplId: BuildWeapon["weaponSplId"]; minRank: number | null; maxPower: number | null; }>; }; owner?: Pick< UserWithPlusTier, "discordId" | "discordName" | "discordDiscriminator" | "plusTier" >; canEdit?: boolean; } export function BuildCard({ build, owner, canEdit = false }: BuildProps) { const user = useUser(); const { t } = useTranslation(["weapons", "builds", "common", "game-misc"]); const { i18n } = useTranslation(); const isMounted = useIsMounted(); const { id, title, description, clothesGearSplId, headGearSplId, shoesGearSplId, updatedAt, abilities, modes, weapons, } = build; return (