sendou.ink/pages/xtrends.tsx
Kalle 1589b84c4b
New layout (#427) closes #405
* side layout initial

* add elements to side nav

* side buttons links

* remove clog

* calendar page initial

* position sticky working

* x trends page initial

* new table

* same mode selector

* mobile friendly table

* no underline for nav links

* xsearch

* x trends page outlined

* sr initial

* relocate calendar components

* calendar fix flex

* topnav fancier look

* layout looking good edition

* relocate xtrends

* xtrends remove linecharts

* x trends new

* calender page new

* delete headbanner, new login

* remove calendar stuff from api

* rename stuff in utils

* fix user item margin

* new home page initial

* remove page concept

* no pointer xtrends

* remove xrank from app

* xtrends service

* move fa from app

* move plus

* maps tweaks

* new table for plus history

* navigational sidebar flex tweaks

* builds page

* analyzer

* user page

* free agents

* plans

* remove mx

* tweaks

* change layout to grid

* home page finalized

* mobile nav

* restrict main content width

* tweaks style

* language switcher

* container in css

* sticky nav

* use duplicate icons for now

* change mapsketch width to old

* chara tour vid

* borzoic icons
2021-04-21 17:26:50 +03:00

62 lines
1.9 KiB
TypeScript

import { RankedMode } from ".prisma/client";
import { Box, Flex } from "@chakra-ui/react";
import ModeSelector from "components/common/ModeSelector";
import MyHead from "components/common/MyHead";
import TrendTier from "components/xtrends/TrendTier";
import { useMyTheme } from "hooks/common";
import { GetStaticProps } from "next";
import { useState } from "react";
import xRankService, { XTrends } from "services/xtrends";
import { xTrendsTiers } from "utils/constants";
export interface XTrendsPageProps {
trends: XTrends;
}
const XTrendsPage = ({ trends }: XTrendsPageProps) => {
const { gray } = useMyTheme();
const [mode, setMode] = useState<RankedMode>("SZ");
return (
<>
<MyHead title="Top 500 Trends" />
<Flex flexDir={["column", null, "row"]} justify="space-between">
<ModeSelector
mode={mode}
setMode={setMode}
mx={["auto", null, "0"]}
mb={[4, null, 0]}
/>
</Flex>
{xTrendsTiers.map((tier, i) => (
<TrendTier
key={tier.label}
tier={tier}
data={trends[mode].filter((weapon, _, arr) => {
const targetCount = 1500 * (tier.criteria / 100);
const previousTargetCount =
i === 0 ? Infinity : 1500 * (xTrendsTiers[i - 1].criteria / 100);
return (
weapon.count >= targetCount && weapon.count < previousTargetCount
);
})}
/>
))}
<Box color={gray} fontSize="sm">
Weapons are ordered based on their appearance in the Top 500 of X Rank
in the last three months. Average X Power per weapon is also shown.
Progress icon describes the change with the latest month.
</Box>
</>
);
};
export default XTrendsPage;
export const getStaticProps: GetStaticProps<XTrendsPageProps> = async () => {
const trends = await xRankService.getXTrends();
return { props: { trends } };
};