From d3a14d77da7de54eee593e21d5595be34d599c25 Mon Sep 17 00:00:00 2001 From: "Kalle (Sendou)" <38327916+Sendouc@users.noreply.github.com> Date: Mon, 25 Oct 2021 14:25:17 +0300 Subject: [PATCH] Import InfoBanner --- .../frontend/components/common/TextInput.tsx | 2 +- packages/frontend/components/layout.tsx | 6 +- .../components/tournament/InfoBanner.tsx | 164 ++++++++++++++++++ packages/frontend/pages/_app.css | 7 + .../pages/o/[organization]/[tournament].tsx | 3 +- 5 files changed, 179 insertions(+), 3 deletions(-) create mode 100644 packages/frontend/components/tournament/InfoBanner.tsx diff --git a/packages/frontend/components/common/TextInput.tsx b/packages/frontend/components/common/TextInput.tsx index 840f5d9a9..afdf06498 100644 --- a/packages/frontend/components/common/TextInput.tsx +++ b/packages/frontend/components/common/TextInput.tsx @@ -7,7 +7,7 @@ const useStyles = createStyles(() => ({ backgroundColor: "var(--colors-bg-lighter)", color: "var(--colors-text)", fontWeight: 500, - fontSize: "0.9rem", + fontSize: "var(--fonts-sm)", "::placeholder": { color: "var(--colors-text-lighter)", }, diff --git a/packages/frontend/components/layout.tsx b/packages/frontend/components/layout.tsx index ec40ed7c3..eb36d38c8 100644 --- a/packages/frontend/components/layout.tsx +++ b/packages/frontend/components/layout.tsx @@ -35,6 +35,10 @@ const _LogoContainer = styled.div` border-radius: 16px; `; +const _Main = styled.main` + padding-top: 1rem; +`; + export function Layout({ children }: { children: ReactNode }) { return ( <> @@ -52,7 +56,7 @@ export function Layout({ children }: { children: ReactNode }) { -
{children}
+ <_Main>{children} ); } diff --git a/packages/frontend/components/tournament/InfoBanner.tsx b/packages/frontend/components/tournament/InfoBanner.tsx new file mode 100644 index 000000000..3742f0ff7 --- /dev/null +++ b/packages/frontend/components/tournament/InfoBanner.tsx @@ -0,0 +1,164 @@ +import styled from "@emotion/styled"; +import { ReactNode } from "react"; +import { FaDiscord, FaTwitter } from "react-icons/fa"; + +const infos = [ + { + title: "Starting time", + value: "Saturday, 18:00", + }, + { + title: "Format", + value: "Double Elimination", + }, + { + title: "Organizer", + value: "Sendou#0043", + }, +]; + +const _Container = styled.div` + width: min(48rem, 100%); + padding: 1.5rem; + margin: 0 auto; + background: linear-gradient(to bottom, #9796f0, #fbc7d4); + border-radius: var(--radii-rounded); + color: hsl(231, 9%, 16%); +`; + +const _TopRow = styled.div` + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 1rem; +`; + +const _DateName = styled.div` + display: flex; + align-items: center; + gap: 1rem; +`; + +const _MonthDate = styled.div` + display: flex; + flex-direction: column; + align-items: center; + line-height: 1.25; +`; + +const _Month = styled.div` + font-size: var(--fonts-xs); +`; + +const _Date = styled.div` + font-size: var(--fonts-lg); + font-weight: bold; +`; + +const _TournamentName = styled.div` + padding-left: 1rem; + border-color: var(--colors-text); + border-left: 1px solid; + font-size: var(--fonts-xl); + font-weight: bold; +`; + +const _BottomRow = styled.div` + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 1rem; + + @media only screen and (min-width: 600px) { + flex-direction: row; + align-items: flex-end; + } +`; + +const _Infos = styled.div` + display: flex; + flex-wrap: wrap; + margin-top: 2rem; + gap: 1rem; + + @media only screen and (min-width: 500px) { + gap: 2rem; + } +`; + +const _IconButtons = styled.div` + display: flex; + gap: 1rem; +`; + +export function InfoBanner() { + return ( + <_Container> + <_TopRow> + <_DateName> + <_MonthDate> + <_Month>APR + <_Date>23 + + <_TournamentName>In The Zone 23 + + <_IconButtons> + + + + + + + + + <_BottomRow> + <_Infos> + {infos.map((info) => ( + + ))} + + + + ); +} + +const _InfoContainer = styled.div` + font-size: var(--fonts-xs); + + > label { + font-weight: bold; + } +`; + +function Info(props: { info: { title: string; value: string } }) { + return ( + <_InfoContainer> + +
{props.info.value}
+ + ); +} + +const _IconButton = styled.a` + display: inline-flex; + width: 2.25rem; + height: 2.25rem; + align-items: center; + justify-content: center; + padding: 0.5rem; + border: 1px solid; + border-color: var(--text-transparent); + border-radius: 50%; + color: inherit; + transition: background-color 0.3s; + :hover { + background-color: var(--text-transparent); + } + > svg { + height: 1.75rem; + } +`; + +function IconButton(props: { children: ReactNode; href: string }) { + return <_IconButton href={props.href}>{props.children}; +} diff --git a/packages/frontend/pages/_app.css b/packages/frontend/pages/_app.css index c9be3731c..90c2ef305 100644 --- a/packages/frontend/pages/_app.css +++ b/packages/frontend/pages/_app.css @@ -3,6 +3,13 @@ --colors-bg-lighter: hsl(237.3, 42.3%, 35.6%); --colors-text: rgba(255, 255, 255, 0.95); --colors-text-lighter: rgba(255, 255, 255, 0.55); + --radii-rounded: 16px; + --fonts-xl: 1.5rem; + --fonts-lg: 1.2rem; + --fonts-md: 1rem; + --fonts-sm: 0.9rem; + --fonts-xs: 0.8rem; + --text-transparent: hsla(231, 9%, 16%, 0.2); } *, diff --git a/packages/frontend/pages/o/[organization]/[tournament].tsx b/packages/frontend/pages/o/[organization]/[tournament].tsx index 913a89938..1afac39e5 100644 --- a/packages/frontend/pages/o/[organization]/[tournament].tsx +++ b/packages/frontend/pages/o/[organization]/[tournament].tsx @@ -1,5 +1,6 @@ import { useRouter } from "next/dist/client/router"; import useSWR from "swr"; +import { InfoBanner } from "../../../components/tournament/InfoBanner"; export default function TournamentPage() { const router = useRouter(); @@ -7,5 +8,5 @@ export default function TournamentPage() { `/tournaments/${router.query.organization}/${router.query.tournament}` ); console.log("error", error); - return
{JSON.stringify(data, null, 2)}
; + return ; }