import { Box, Flex, Popover, PopoverArrow, PopoverContent, PopoverTrigger, Select, } from "@chakra-ui/react"; import { t, Trans } from "@lingui/macro"; import { useLingui } from "@lingui/react"; import Breadcrumbs from "components/common/Breadcrumbs"; import ModeSelector from "components/common/ModeSelector"; import Section from "components/common/Section"; import SubText from "components/common/SubText"; import WeaponImage from "components/common/WeaponImage"; import WeaponLineChart from "components/top500/WeaponLineChart"; import { useXTrends } from "hooks/xtrends"; import { useMyTheme } from "lib/useMyTheme"; import { GetStaticProps } from "next"; import { getXTrends, GetXTrendsData } from "prisma/queries/getXTrends"; const tiers = [ { label: "X", criteria: 6, color: "purple.700", }, { label: "S+", criteria: 5, color: "red.700", }, { label: "S", criteria: 4, color: "red.700", }, { label: "A+", criteria: 3, color: "orange.700", }, { label: "A", criteria: 2, color: "orange.700", }, { label: "B+", criteria: 1.5, color: "yellow.700", }, { label: "B", criteria: 1, color: "yellow.700", }, { label: "C+", criteria: 0.4, color: "green.700", }, { label: "C", criteria: 0.002, //1 in 500 color: "green.700", }, ] as const; interface Props { trends: GetXTrendsData; } const XTrendsPage: React.FC = ({ trends }) => { const { gray } = useMyTheme(); const { state, dispatch, weaponData, getDataForChart, monthOptions, } = useXTrends(trends); return ( <> Here you can find X Rank Top 500 usage tier lists. For example for a weapon to be in the X tier it needs at least 30 placements in that mode that month. Below the weapon count and X Power average are shown. dispatch({ type: "SET_MODE", mode })} /> {tiers.map((tier, i) => ( { const targetCount = 500 * (tier.criteria / 100); const previousTargetCount = i === 0 ? Infinity : 500 * (tiers[i - 1].criteria / 100); return ( weapon.count >= targetCount && weapon.count < previousTargetCount ); })} getDataForChart={getDataForChart} mode={state.mode} /> ))} ); }; function Tier({ tier, weapons, getDataForChart, mode, }: { tier: { label: string; criteria: number; color: string }; weapons: { name: string; count: number; xPowerAverage: number; }[]; mode: string; getDataForChart: (weapon: string) => { count: number }[]; }) { const { i18n } = useLingui(); const { gray, secondaryBgColor } = useMyTheme(); if (!weapons.length) return null; return (
{tier.label} {tier.criteria === 0.002 ? ">0%" : `${tier.criteria}%`} {weapons.map((weapon) => ( {weapon.count} / {weapon.xPowerAverage.toFixed(1)} {i18n._(weapon.name)} {i18n._(mode)} getDataForChart(weapon.name)} /> ))}
); } export const getStaticProps: GetStaticProps = async () => { const trends = await getXTrends(); return { props: { trends } }; }; export default XTrendsPage;