From c9bb77d453ab8fee01c0dcf2a01b84aa508931de Mon Sep 17 00:00:00 2001
From: "Kalle (Sendou)" <38327916+Sendouc@users.noreply.github.com>
Date: Wed, 17 Nov 2021 14:03:51 +0200
Subject: [PATCH] Make teamsTab mobile friendly
---
components/AvatarWithName.tsx | 14 +++---
scenes/layout/components/Layout.tsx | 2 +-
scenes/tournament/TournamentPage.data.ts | 5 ++-
scenes/tournament/components/TeamsTab.tsx | 46 +++++++-------------
scenes/tournament/styles/TeamsTab.module.css | 25 +++++++++--
5 files changed, 48 insertions(+), 44 deletions(-)
diff --git a/components/AvatarWithName.tsx b/components/AvatarWithName.tsx
index 36ce8c137..a7da8569f 100644
--- a/components/AvatarWithName.tsx
+++ b/components/AvatarWithName.tsx
@@ -8,12 +8,14 @@ export function AvatarWithName(p: {
return (
-

+ {p.discordAvatar && (
+

+ )}
{p.discordName}
diff --git a/scenes/layout/components/Layout.tsx b/scenes/layout/components/Layout.tsx
index d4c3b1d18..77d4d36f3 100644
--- a/scenes/layout/components/Layout.tsx
+++ b/scenes/layout/components/Layout.tsx
@@ -26,8 +26,8 @@ export function Layout(p: { children: JSXElement }) {
-
+
diff --git a/scenes/tournament/TournamentPage.data.ts b/scenes/tournament/TournamentPage.data.ts
index 81bb4f5bd..98d17db7f 100644
--- a/scenes/tournament/TournamentPage.data.ts
+++ b/scenes/tournament/TournamentPage.data.ts
@@ -20,5 +20,6 @@ export default function TournamentData({
return user;
}
-export const useTournamentData = (delta?: number) =>
- useData>>(delta);
+export function useTournamentData(delta?: number) {
+ return useData>>(delta);
+}
diff --git a/scenes/tournament/components/TeamsTab.tsx b/scenes/tournament/components/TeamsTab.tsx
index 35eafe4c1..b07a2e581 100644
--- a/scenes/tournament/components/TeamsTab.tsx
+++ b/scenes/tournament/components/TeamsTab.tsx
@@ -4,30 +4,23 @@ import s from "../styles/TeamsTab.module.css";
import { AvatarWithName } from "../../../components/AvatarWithName";
import type { InferQueryOutput } from "../../../utils/trpc-client";
+const sortCaptainFirst = (a: { captain: boolean }, b: { captain: boolean }) => {
+ return Number(b.captain) - Number(a.captain);
+};
+
+const sortTeamsFullFirst = (a: { members: any[] }, b: { members: any[] }) => {
+ const aSortValue = a.members.length >= 4 ? 1 : 0;
+ const bSortValue = b.members.length >= 4 ? 1 : 0;
+
+ return bSortValue - aSortValue;
+};
+
export function TeamsTab() {
const tournament = useTournamentData(1);
- const sortCaptainFirst = (
- a: { captain: boolean },
- b: { captain: boolean }
- ) => {
- return Number(b.captain) - Number(a.captain);
- };
-
- const completeTeams = createMemo(() =>
+ const sortedTeams = createMemo(() =>
tournament()
- ?.teams.filter((team) => team.members.length >= 4)
- .map((team) => {
- return {
- ...team,
- members: team.members.sort(sortCaptainFirst),
- };
- })
- );
-
- const inCompleteTeams = createMemo(() =>
- tournament()
- ?.teams.filter((team) => team.members.length < 4)
+ ?.teams.sort(sortTeamsFullFirst)
.map((team) => {
return {
...team,
@@ -38,27 +31,18 @@ export function TeamsTab() {
return (
-
- {(teams) => }
-
-
- {(teams) => }
-
+ {(teams) => }
);
}
function TeamsList(p: {
teams: NonNullable>["teams"];
- title: string;
}) {
if (!p.teams.length) return null;
return (
-
- {p.title} ({p.teams.length})
-
{(team) => (
@@ -69,7 +53,7 @@ function TeamsList(p: {
{(data, i) => (
- {data.captain ? "C" : i()}
+ {data.captain ? "C" : i() + 1}
diff --git a/scenes/tournament/styles/TeamsTab.module.css b/scenes/tournament/styles/TeamsTab.module.css
index 025ca94c9..9b14f045c 100644
--- a/scenes/tournament/styles/TeamsTab.module.css
+++ b/scenes/tournament/styles/TeamsTab.module.css
@@ -6,23 +6,24 @@
.teamsContainer {
display: grid;
- grid-template-columns: 1fr 1fr;
+ grid-template-columns: 1fr;
row-gap: var(--s-10);
+ column-gap: var(--s-6);
}
.teamName {
display: flex;
- align-items: center;
+ justify-self: center;
+ align-self: center;
font-weight: var(--extra-bold);
font-size: var(--fonts-lg);
+ border-block-end: 2px solid var(--theme);
}
.membersContainer {
display: flex;
flex-direction: column;
gap: var(--s-4);
- border-inline-start: 2px solid var(--theme);
- padding-inline-start: var(--s-3);
}
.member {
@@ -42,3 +43,19 @@
text-align: center;
margin-block-start: 0;
}
+
+@media screen and (min-width: 640px) {
+ .teamsContainer {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ .teamName {
+ justify-self: flex-end;
+ border-bottom: none;
+ }
+
+ .membersContainer {
+ border-inline-start: 2px solid var(--theme);
+ padding-inline-start: var(--s-6);
+ }
+}