From a4e4c96128550593f9414d8f85c17cc851d35e2a Mon Sep 17 00:00:00 2001 From: "Kalle (Sendou)" <38327916+Sendouc@users.noreply.github.com> Date: Thu, 4 Feb 2021 20:37:22 +0200 Subject: [PATCH] ladder matches preliminary UI --- components/play/LadderTeam.tsx | 72 +++++++++++++++++ components/play/MatchUp.tsx | 34 ++++++++ pages/play/index.tsx | 140 +++++++++++++++------------------ prisma/queries/getLadderDay.ts | 13 ++- 4 files changed, 182 insertions(+), 77 deletions(-) create mode 100644 components/play/LadderTeam.tsx create mode 100644 components/play/MatchUp.tsx diff --git a/components/play/LadderTeam.tsx b/components/play/LadderTeam.tsx new file mode 100644 index 000000000..18a094638 --- /dev/null +++ b/components/play/LadderTeam.tsx @@ -0,0 +1,72 @@ +import { Box, BoxProps, Flex, HStack } from "@chakra-ui/react"; +import SubText from "components/common/SubText"; +import TwitterAvatar from "components/common/TwitterAvatar"; +import UserAvatar from "components/common/UserAvatar"; +import { useMyTheme } from "hooks/common"; +import { Unpacked } from "lib/types"; +import { GetAllLadderRegisteredTeamsData } from "prisma/queries/getAllLadderRegisteredTeams"; + +interface Props { + roster: Unpacked["roster"]; +} + +const LadderTeam: React.FC = ({ roster, ...props }) => { + const { gray } = useMyTheme(); + const teamTuple = roster + .filter((member) => member.team) + .map((member) => member.team) + .reduce( + ( + acc: [ + { + name: string; + twitterName: string; + nameForUrl: string; + }, + number + ][], + cur + ) => { + const tuple = acc.find(([{ name }]) => name === cur!.name); + if (tuple) tuple[1]++; + + acc.push([{ ...(cur as any) }, 1]); + return acc; + }, + [] + ) + .find((tuple) => tuple[1] >= 3); + + return ( + + {teamTuple && roster.length === 4 ? ( + + {teamTuple[0].twitterName && ( + + )} + {teamTuple[0].name} + {teamTuple[1] === 3 && roster.length >= 4 && ( + +1 + )} + + ) : ( + + {roster.map((member) => ( + + ))} + + )} + + {roster + .map((user) => `${user.username}#${user.discriminator}`) + .join(", ")} + + + ); +}; + +export default LadderTeam; diff --git a/components/play/MatchUp.tsx b/components/play/MatchUp.tsx new file mode 100644 index 000000000..8b964164e --- /dev/null +++ b/components/play/MatchUp.tsx @@ -0,0 +1,34 @@ +import { Box } from "@chakra-ui/react"; +import { Unpacked } from "lib/types"; +import { GetLadderDayData } from "prisma/queries/getLadderDay"; +import LadderTeam from "./LadderTeam"; + +interface Props { + matchUp: Unpacked["matches"]>; +} + +const MatchUp: React.FC = ({ matchUp }) => { + return ( + <> + + player.team === "ALPHA") + .map((player) => player.user)} + /> + + + {matchUp.teamAScore}-{matchUp.teamBScore} + + + player.team === "BRAVO") + .map((player) => player.user)} + /> + + + ); +}; + +export default MatchUp; diff --git a/pages/play/index.tsx b/pages/play/index.tsx index 84bab74b5..da9f77994 100644 --- a/pages/play/index.tsx +++ b/pages/play/index.tsx @@ -1,10 +1,11 @@ -import { Box, Flex, HStack } from "@chakra-ui/react"; +import { Box, Center, Flex, Grid, Heading } from "@chakra-ui/react"; import { t, Trans } from "@lingui/macro"; import Breadcrumbs from "components/common/Breadcrumbs"; +import ModeImage from "components/common/ModeImage"; import MyContainer from "components/common/MyContainer"; import SubText from "components/common/SubText"; -import TwitterAvatar from "components/common/TwitterAvatar"; -import UserAvatar from "components/common/UserAvatar"; +import LadderTeam from "components/play/LadderTeam"; +import MatchUp from "components/play/MatchUp"; import RegisterHeader from "components/play/RegisterHeader"; import { useMyTheme } from "hooks/common"; import { useLadderTeams } from "hooks/play"; @@ -14,6 +15,7 @@ import { GetStaticProps } from "next"; import prisma from "prisma/client"; import { getAllLadderRegisteredTeamsForMatches } from "prisma/queries/getAllLadderRegisteredTeamsForMatches"; import { getLadderDay, GetLadderDayData } from "prisma/queries/getLadderDay"; +import { Fragment } from "react"; interface Props { ladderDay: GetLadderDayData; @@ -23,91 +25,79 @@ const PlayPage: React.FC = ({ ladderDay }) => { const { gray } = useMyTheme(); const { data } = useLadderTeams(!ladderDay); - console.log({ ladderDay }); - return ( - - {ladderDay ? ( - <>Next event: {new Date(ladderDay.date).toLocaleString()} - ) : ( - <> - - Next ladder date is not confirmed. Follow this page for updates! - - - )} - + {!ladderDay?.matches.length && ( + + {ladderDay ? ( + <>Next event: {new Date(ladderDay.date).toLocaleString()} + ) : ( + <> + + Next ladder date is not confirmed. Follow this page for updates! + + + )} + + )} {ladderDay && ladderDay.matches.length === 0 && ( <> {data ?.sort((a, b) => b.roster.length - a.roster.length) - .map((team) => { - const teamTuple = team.roster - .filter((member) => member.team) - .map((member) => member.team) - .reduce( - ( - acc: [ - { - name: string; - twitterName: string; - nameForUrl: string; - }, - number - ][], - cur - ) => { - const tuple = acc.find( - ([{ name }]) => name === cur!.name - ); - if (tuple) tuple[1]++; - - acc.push([{ ...(cur as any) }, 1]); - return acc; - }, - [] - ) - .find((tuple) => tuple[1] >= 3); - return ( - - {teamTuple && team.roster.length === 4 ? ( - - {teamTuple[0].twitterName && ( - - )} - {teamTuple[0].name} - {teamTuple[1] === 3 && team.roster.length >= 4 && ( - +1 - )} - - ) : ( - - {team.roster.map((member) => ( - - ))} - - )} - - {team.roster - .map((user) => `${user.username}#${user.discriminator}`) - .join(", ")} - - - ); - })} + .map((team) => ( + + ))} )} {ladderDay && ladderDay.matches.length > 0 && ( - <>{ladderDay.matches.length} matches pending + <> + {[1, 2].map((round) => ( + + + Round {round} + + Maplist + {(ladderDay.matches.find((match) => match.order === round)! + .maplist as any[]).map(({ stage, mode }, i) => { + return ( + + {i + 1}){" "} +
+ +
{" "} + {stage} +
+ ); + })} + + {ladderDay.matches + .filter((match) => match.order === round) + .map((match) => ( + + ))} + +
+ ))} + )}
); diff --git a/prisma/queries/getLadderDay.ts b/prisma/queries/getLadderDay.ts index 15431708e..5e63a7a42 100644 --- a/prisma/queries/getLadderDay.ts +++ b/prisma/queries/getLadderDay.ts @@ -18,12 +18,21 @@ export const getLadderDay = async () => { teamBScore: true, players: { select: { + team: true, user: { select: { - username: true, + id: true, discordAvatar: true, - discriminator: true, discordId: true, + discriminator: true, + username: true, + team: { + select: { + name: true, + nameForUrl: true, + twitterName: true, + }, + }, }, }, },