From 298afe4d4d9a6a85abf553dd31b7003aa5df6ae4 Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sat, 16 Apr 2022 20:02:50 +0300 Subject: [PATCH] Fix seed page wrong order in some case Closes #799 --- app/routes/to/$organization.$tournament/manage.tsx | 3 ++- app/routes/to/$organization.$tournament/seeds.tsx | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/routes/to/$organization.$tournament/manage.tsx b/app/routes/to/$organization.$tournament/manage.tsx index 5fe1aacb3..52015eafb 100644 --- a/app/routes/to/$organization.$tournament/manage.tsx +++ b/app/routes/to/$organization.$tournament/manage.tsx @@ -26,6 +26,7 @@ import { parseRequestFormData, requireUser, Unpacked, validate } from "~/utils"; import { useUser } from "~/hooks/common"; import { tournamentFrontPage } from "~/utils/urls"; import { Navigate } from "~/components/Navigate"; +import clone from "just-clone"; const manageActionSchema = z.object({ _action: z.enum(["CHECK_OUT", "CHECK_IN", "UNREGISTER"]), @@ -82,7 +83,7 @@ export default function ManageTab() { const user = useUser(); const [, parentRoute] = useMatches(); const tournament = parentRoute.data as FindTournamentByNameForUrlI; - const teamsSorted = tournament.teams.sort((a, b) => + const teamsSorted = clone(tournament.teams).sort((a, b) => a.name.localeCompare(b.name) ); diff --git a/app/routes/to/$organization.$tournament/seeds.tsx b/app/routes/to/$organization.$tournament/seeds.tsx index 7b6f5a027..7dbefb6c4 100644 --- a/app/routes/to/$organization.$tournament/seeds.tsx +++ b/app/routes/to/$organization.$tournament/seeds.tsx @@ -27,6 +27,7 @@ import { useTransition, } from "@remix-run/react"; import clsx from "clsx"; +import clone from "just-clone"; import * as React from "react"; import invariant from "tiny-invariant"; import { z } from "zod"; @@ -35,7 +36,7 @@ import { Button } from "~/components/Button"; import { Catcher } from "~/components/Catcher"; import { Draggable } from "~/components/Draggable"; import { averageTeamMMRs } from "~/core/mmr/utils"; -import { tournamentHasStarted } from "~/core/tournament/utils"; +import { sortTeamsBySeed, tournamentHasStarted } from "~/core/tournament/utils"; import { isTournamentAdmin, tournamentHasNotStarted, @@ -91,6 +92,7 @@ export const action: ActionFunction = async ({ context, request }) => { export interface SeedsLoaderData { MMRs: Record; + order: string[]; } export const loader: LoaderFunction = async ({ params, context }) => { @@ -126,6 +128,7 @@ export const loader: LoaderFunction = async ({ params, context }) => { return json({ MMRs: averageTeamMMRs({ skills, teams: tournament.teams }), + order: tournament.seeds, }); }; @@ -136,7 +139,14 @@ export default function TournamentSeedsPage() { const [, parentRoute] = useMatches(); const { id, teams } = parentRoute.data as FindTournamentByNameForUrlI; const transition = useTransition(); - const [teamOrder, setTeamOrder] = React.useState(teams.map((t) => t.id)); + const [teamOrder, setTeamOrder] = React.useState( + clone(teams) + // probably this sorting should be redundant but + // just in case we sort it here again + // (might matter if the order switched after page load e.g.) + .sort(sortTeamsBySeed(data.order)) + .map((t) => t.id) + ); const [activeTeam, setActiveTeam] = React.useState | null>(null);