From e1278ef57f4f0304ce26709a7bae5faf2b44d25b Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sat, 30 May 2026 16:35:52 +0300 Subject: [PATCH] Seeds -> admin tab --- .../api-public/routes/tournament.$id.seeds.ts | 4 +- .../tournament.$id.starting-brackets.ts | 4 +- .../tournament/actions/to.$id.admin.server.ts | 68 ++++++++++++++ .../tournament/actions/to.$id.seeds.server.ts | 93 ------------------- .../tournament/components/TournamentNav.tsx | 16 ---- .../TournamentSeeds.module.css} | 0 .../TournamentSeeds.tsx} | 13 +-- .../tournament/loaders/to.$id.seeds.server.ts | 22 ----- .../tournament/routes/to.$id.admin.tsx | 18 +++- .../tournament/tournament-schemas.server.ts | 59 ++++++------ app/routes.ts | 1 - e2e/tournament-ab-divisions.spec.ts | 2 +- e2e/tournament.spec.ts | 2 +- locales/da/tournament.json | 2 +- locales/de/tournament.json | 2 +- locales/en/tournament.json | 2 +- locales/es-ES/tournament.json | 2 +- locales/es-US/tournament.json | 2 +- locales/fr-CA/tournament.json | 2 +- locales/fr-EU/tournament.json | 2 +- locales/he/tournament.json | 2 +- locales/it/tournament.json | 2 +- locales/ja/tournament.json | 2 +- locales/ko/tournament.json | 2 +- locales/nl/tournament.json | 2 +- locales/pl/tournament.json | 2 +- locales/pt-BR/tournament.json | 2 +- locales/ru/tournament.json | 2 +- locales/zh/tournament.json | 2 +- 29 files changed, 137 insertions(+), 197 deletions(-) delete mode 100644 app/features/tournament/actions/to.$id.seeds.server.ts rename app/features/tournament/{routes/to.$id.seeds.module.css => components/TournamentSeeds.module.css} (100%) rename app/features/tournament/{routes/to.$id.seeds.tsx => components/TournamentSeeds.tsx} (98%) delete mode 100644 app/features/tournament/loaders/to.$id.seeds.server.ts diff --git a/app/features/api-public/routes/tournament.$id.seeds.ts b/app/features/api-public/routes/tournament.$id.seeds.ts index 87b7a00eb..4a4354e3e 100644 --- a/app/features/api-public/routes/tournament.$id.seeds.ts +++ b/app/features/api-public/routes/tournament.$id.seeds.ts @@ -1,6 +1,6 @@ import type { ActionFunctionArgs } from "react-router"; import { z } from "zod"; -import { action as seedsAction } from "~/features/tournament/actions/to.$id.seeds.server"; +import { action as adminAction } from "~/features/tournament/actions/to.$id.admin.server"; import { parseBody, parseParams } from "~/utils/remix.server"; import { id } from "~/utils/zod"; import { wrapActionForApi } from "../api-action-wrapper.server"; @@ -32,7 +32,7 @@ export const action = async (args: ActionFunctionArgs) => { }), }); - return wrapActionForApi(seedsAction, { + return wrapActionForApi(adminAction, { ...args, params: { id: String(tournamentId) }, request: internalRequest, diff --git a/app/features/api-public/routes/tournament.$id.starting-brackets.ts b/app/features/api-public/routes/tournament.$id.starting-brackets.ts index 6931e7236..e01dd3aec 100644 --- a/app/features/api-public/routes/tournament.$id.starting-brackets.ts +++ b/app/features/api-public/routes/tournament.$id.starting-brackets.ts @@ -1,6 +1,6 @@ import type { ActionFunctionArgs } from "react-router"; import { z } from "zod"; -import { action as seedsAction } from "~/features/tournament/actions/to.$id.seeds.server"; +import { action as adminAction } from "~/features/tournament/actions/to.$id.admin.server"; import { parseBody, parseParams } from "~/utils/remix.server"; import { id } from "~/utils/zod"; import { wrapActionForApi } from "../api-action-wrapper.server"; @@ -37,7 +37,7 @@ export const action = async (args: ActionFunctionArgs) => { }), }); - return wrapActionForApi(seedsAction, { + return wrapActionForApi(adminAction, { ...args, params: { id: String(tournamentId) }, request: internalRequest, diff --git a/app/features/tournament/actions/to.$id.admin.server.ts b/app/features/tournament/actions/to.$id.admin.server.ts index 576683809..76ac9ce98 100644 --- a/app/features/tournament/actions/to.$id.admin.server.ts +++ b/app/features/tournament/actions/to.$id.admin.server.ts @@ -521,6 +521,74 @@ export const action: ActionFunction = async ({ request, params }) => { message = "Tournament reopened"; break; } + case "UPDATE_SEEDS": { + validateIsTournamentOrganizer(); + errorToastIfFalsy(!tournament.hasStarted, "Tournament has started"); + + const teamsWithMembers = tournament.ctx.teams + .filter((t) => data.seeds.includes(t.id)) + .map((team) => ({ + teamId: team.id, + members: team.members.map((m) => ({ + userId: m.userId, + username: m.username, + })), + })); + + await TournamentRepository.updateTeamSeeds({ + tournamentId, + teamIds: data.seeds, + teamsWithMembers, + }); + + message = "Seeds saved successfully"; + break; + } + case "UPDATE_STARTING_BRACKETS": { + validateIsTournamentOrganizer(); + errorToastIfFalsy(!tournament.hasStarted, "Tournament has started"); + + const validBracketIdxs = + tournament.ctx.settings.bracketProgression.flatMap( + (bracket, bracketIdx) => (!bracket.sources ? [bracketIdx] : []), + ); + + errorToastIfFalsy( + data.startingBrackets.every((t) => + validBracketIdxs.includes(t.startingBracketIdx), + ), + "Invalid starting bracket idx", + ); + + await TournamentTeamRepository.updateStartingBrackets( + data.startingBrackets, + ); + + message = "Starting brackets updated"; + break; + } + case "UPDATE_AB_DIVISIONS": { + validateIsTournamentOrganizer(); + errorToastIfFalsy(!tournament.hasStarted, "Tournament has started"); + + errorToastIfFalsy( + tournament.ctx.settings.bracketProgression.some( + (bracket) => !bracket.sources && bracket.settings?.hasAbDivisions, + ), + "No starting bracket has A/B divisions enabled", + ); + + const validTeamIds = new Set(tournament.ctx.teams.map((t) => t.id)); + errorToastIfFalsy( + data.abDivisions.every((t) => validTeamIds.has(t.tournamentTeamId)), + "Invalid tournament team id", + ); + + await TournamentTeamRepository.updateAbDivisions(data.abDivisions); + + message = "A/B divisions updated"; + break; + } default: { assertUnreachable(data); } diff --git a/app/features/tournament/actions/to.$id.seeds.server.ts b/app/features/tournament/actions/to.$id.seeds.server.ts deleted file mode 100644 index df4539e07..000000000 --- a/app/features/tournament/actions/to.$id.seeds.server.ts +++ /dev/null @@ -1,93 +0,0 @@ -import type { ActionFunction } from "react-router"; -import { requireUser } from "~/features/auth/core/user.server"; -import { - clearTournamentDataCache, - tournamentFromDB, -} from "~/features/tournament-bracket/core/Tournament.server"; -import { - errorToastIfFalsy, - parseParams, - parseRequestPayload, - successToast, -} from "~/utils/remix.server"; -import { idObject } from "~/utils/zod"; -import * as TournamentRepository from "../TournamentRepository.server"; -import * as TournamentTeamRepository from "../TournamentTeamRepository.server"; -import { seedsActionSchema } from "../tournament-schemas.server"; - -export const action: ActionFunction = async ({ request, params }) => { - const data = await parseRequestPayload({ - request, - schema: seedsActionSchema, - }); - const user = requireUser(); - const { id: tournamentId } = parseParams({ - params, - schema: idObject, - }); - const tournament = await tournamentFromDB({ tournamentId, user }); - - errorToastIfFalsy(tournament.isOrganizer(user), "Not an organizer"); - errorToastIfFalsy(!tournament.hasStarted, "Tournament has started"); - - switch (data._action) { - case "UPDATE_SEEDS": { - const teamsWithMembers = tournament.ctx.teams - .filter((t) => data.seeds.includes(t.id)) - .map((team) => ({ - teamId: team.id, - members: team.members.map((m) => ({ - userId: m.userId, - username: m.username, - })), - })); - - await TournamentRepository.updateTeamSeeds({ - tournamentId, - teamIds: data.seeds, - teamsWithMembers, - }); - clearTournamentDataCache(tournamentId); - return successToast("Seeds saved successfully"); - } - case "UPDATE_STARTING_BRACKETS": { - const validBracketIdxs = - tournament.ctx.settings.bracketProgression.flatMap( - (bracket, bracketIdx) => (!bracket.sources ? [bracketIdx] : []), - ); - - errorToastIfFalsy( - data.startingBrackets.every((t) => - validBracketIdxs.includes(t.startingBracketIdx), - ), - "Invalid starting bracket idx", - ); - - await TournamentTeamRepository.updateStartingBrackets( - data.startingBrackets, - ); - break; - } - case "UPDATE_AB_DIVISIONS": { - errorToastIfFalsy( - tournament.ctx.settings.bracketProgression.some( - (bracket) => !bracket.sources && bracket.settings?.hasAbDivisions, - ), - "No starting bracket has A/B divisions enabled", - ); - - const validTeamIds = new Set(tournament.ctx.teams.map((t) => t.id)); - errorToastIfFalsy( - data.abDivisions.every((t) => validTeamIds.has(t.tournamentTeamId)), - "Invalid tournament team id", - ); - - await TournamentTeamRepository.updateAbDivisions(data.abDivisions); - break; - } - } - - clearTournamentDataCache(tournamentId); - - return null; -}; diff --git a/app/features/tournament/components/TournamentNav.tsx b/app/features/tournament/components/TournamentNav.tsx index 07df1fa09..926dcbb04 100644 --- a/app/features/tournament/components/TournamentNav.tsx +++ b/app/features/tournament/components/TournamentNav.tsx @@ -2,7 +2,6 @@ import clsx from "clsx"; import { ClipboardCheck, LayoutGrid, - ListOrdered, Medal, Menu, ScrollText, @@ -39,7 +38,6 @@ type NavItemKey = | "results" | "rules" | "lfg" - | "seeds" | "admin"; interface NavItem { @@ -60,7 +58,6 @@ const PRIORITY_ORDER: NavItemKey[] = [ "divisions", "streams", "rules", - "seeds", "admin", ]; @@ -253,19 +250,6 @@ function useNavItems({ }; } - const showSeeds = - tournament.isOrganizer(user) && - !tournament.hasStarted && - !tournament.isLeagueSignup; - if (showSeeds) { - items.seeds = { - key: "seeds", - label: t("tournament:nav.seeds"), - to: "seeds", - icon: , - }; - } - const showAdmin = tournament.isOrganizer(user) && (!tournament.ctx.isFinalized || DANGEROUS_CAN_ACCESS_DEV_CONTROLS); diff --git a/app/features/tournament/routes/to.$id.seeds.module.css b/app/features/tournament/components/TournamentSeeds.module.css similarity index 100% rename from app/features/tournament/routes/to.$id.seeds.module.css rename to app/features/tournament/components/TournamentSeeds.module.css diff --git a/app/features/tournament/routes/to.$id.seeds.tsx b/app/features/tournament/components/TournamentSeeds.tsx similarity index 98% rename from app/features/tournament/routes/to.$id.seeds.tsx rename to app/features/tournament/components/TournamentSeeds.tsx index b74416eca..45bda6926 100644 --- a/app/features/tournament/routes/to.$id.seeds.tsx +++ b/app/features/tournament/components/TournamentSeeds.tsx @@ -21,7 +21,6 @@ import * as React from "react"; import { Link, useFetcher, useNavigation } from "react-router"; import { Alert } from "~/components/Alert"; import { Avatar } from "~/components/Avatar"; -import { Catcher } from "~/components/Catcher"; import { SendouButton } from "~/components/elements/Button"; import { SendouChipRadio, @@ -39,13 +38,9 @@ import type { TournamentDataTeam } from "~/features/tournament-bracket/core/Tour import invariant from "~/utils/invariant"; import { navIconUrl, userResultsPage } from "~/utils/urls"; import { ordinalToRoundedSp } from "../../mmr/mmr-utils"; -import { action } from "../actions/to.$id.seeds.server"; -import { loader } from "../loaders/to.$id.seeds.server"; +import { useTournament } from "../routes/to.$id"; import { TOURNAMENT } from "../tournament-constants"; -import { useTournament } from "./to.$id"; -import styles from "./to.$id.seeds.module.css"; - -export { action, loader }; +import styles from "./TournamentSeeds.module.css"; const AB_DIVISION_RADIO_OPTIONS = [ { value: "unassigned", label: "Unassigned" }, @@ -53,7 +48,7 @@ const AB_DIVISION_RADIO_OPTIONS = [ { value: "1", label: "B" }, ] as const; -export default function TournamentSeedsPage() { +export function TournamentSeeds() { const tournament = useTournament(); const navigation = useNavigation(); const [teamOrder, setTeamOrder] = React.useState( @@ -849,5 +844,3 @@ function computeRemovedPlayers( } return result; } - -export const ErrorBoundary = Catcher; diff --git a/app/features/tournament/loaders/to.$id.seeds.server.ts b/app/features/tournament/loaders/to.$id.seeds.server.ts deleted file mode 100644 index f7f02c372..000000000 --- a/app/features/tournament/loaders/to.$id.seeds.server.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { LoaderFunctionArgs } from "react-router"; -import { redirect } from "react-router"; -import { requireUser } from "~/features/auth/core/user.server"; -import { tournamentFromDB } from "~/features/tournament-bracket/core/Tournament.server"; -import { parseParams } from "~/utils/remix.server"; -import { tournamentBracketsPage } from "~/utils/urls"; -import { idObject } from "~/utils/zod"; - -export const loader = async ({ params }: LoaderFunctionArgs) => { - const user = requireUser(); - const { id: tournamentId } = parseParams({ - params, - schema: idObject, - }); - const tournament = await tournamentFromDB({ tournamentId, user }); - - if (!tournament.isOrganizer(user) || tournament.hasStarted) { - throw redirect(tournamentBracketsPage({ tournamentId })); - } - - return null; -}; diff --git a/app/features/tournament/routes/to.$id.admin.tsx b/app/features/tournament/routes/to.$id.admin.tsx index a0710e029..b3b24dacc 100644 --- a/app/features/tournament/routes/to.$id.admin.tsx +++ b/app/features/tournament/routes/to.$id.admin.tsx @@ -1,5 +1,5 @@ import clsx from "clsx"; -import { Trash, Trophy, Tv, UserCog, Users } from "lucide-react"; +import { ListOrdered, Trash, Trophy, Tv, UserCog, Users } from "lucide-react"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { useFetcher } from "react-router"; @@ -37,12 +37,13 @@ import { tournamentPage, } from "~/utils/urls"; import { BracketProgressionSelector } from "../../calendar/components/BracketProgressionSelector"; +import { TournamentSeeds } from "../components/TournamentSeeds"; import { useTournament } from "./to.$id"; import adminStyles from "./to.$id.admin.module.css"; export { action } from "../actions/to.$id.admin.server"; -type AdminTab = "teams" | "staff" | "stream" | "brackets"; +type AdminTab = "teams" | "seeds" | "staff" | "stream" | "brackets"; export default function TournamentAdminPage() { const { t } = useTranslation(["tournament", "calendar"]); @@ -68,12 +69,15 @@ export default function TournamentAdminPage() { const showStaffTab = tournament.isAdmin(user); const showBracketsTab = !tournament.isLeagueSignup || showEditBrackets || showReopen; + const showSeedsTab = !tournament.hasStarted && !tournament.isLeagueSignup; const isVisibleTab = (tab: string): tab is AdminTab => { switch (tab) { case "teams": case "stream": return true; + case "seeds": + return showSeedsTab; case "staff": return showStaffTab; case "brackets": @@ -138,6 +142,11 @@ export default function TournamentAdminPage() { }> {t("tournament:admin.tab.teams")} + {showSeedsTab ? ( + }> + {t("tournament:admin.tab.seeds")} + + ) : null} {showStaffTab ? ( }> {t("tournament:admin.tab.staff")} @@ -157,6 +166,11 @@ export default function TournamentAdminPage() { Participant list download + {showSeedsTab ? ( + + + + ) : null} {showStaffTab ? ( diff --git a/app/features/tournament/tournament-schemas.server.ts b/app/features/tournament/tournament-schemas.server.ts index 92abdff25..a50f1c2e6 100644 --- a/app/features/tournament/tournament-schemas.server.ts +++ b/app/features/tournament/tournament-schemas.server.ts @@ -60,37 +60,6 @@ export const registerSchema = z.union([ }), ]); -export const seedsActionSchema = z.union([ - z.object({ - _action: _action("UPDATE_SEEDS"), - seeds: z.preprocess(safeJSONParse, z.array(id)), - }), - z.object({ - _action: _action("UPDATE_STARTING_BRACKETS"), - startingBrackets: z.preprocess( - safeJSONParse, - z.array( - z.object({ - tournamentTeamId: id, - startingBracketIdx: bracketIdx, - }), - ), - ), - }), - z.object({ - _action: _action("UPDATE_AB_DIVISIONS"), - abDivisions: z.preprocess( - safeJSONParse, - z.array( - z.object({ - tournamentTeamId: id, - abDivision: z.union([z.literal(0), z.literal(1), z.null()]), - }), - ), - ), - }), -]); - export const tournamentSearchSearchParamsSchema = z.object({ q: z.string().max(100), limit: z.coerce.number().int().min(1).max(25).catch(25), @@ -192,4 +161,32 @@ export const adminActionSchema = z.union([ z.object({ _action: _action("REOPEN_TOURNAMENT"), }), + z.object({ + _action: _action("UPDATE_SEEDS"), + seeds: z.preprocess(safeJSONParse, z.array(id)), + }), + z.object({ + _action: _action("UPDATE_STARTING_BRACKETS"), + startingBrackets: z.preprocess( + safeJSONParse, + z.array( + z.object({ + tournamentTeamId: id, + startingBracketIdx: bracketIdx, + }), + ), + ), + }), + z.object({ + _action: _action("UPDATE_AB_DIVISIONS"), + abDivisions: z.preprocess( + safeJSONParse, + z.array( + z.object({ + tournamentTeamId: id, + abDivision: z.union([z.literal(0), z.literal(1), z.null()]), + }), + ), + ), + }), ]); diff --git a/app/routes.ts b/app/routes.ts index 61d999608..9f184287c 100644 --- a/app/routes.ts +++ b/app/routes.ts @@ -127,7 +127,6 @@ export default [ route("teams/:tid", "features/tournament/routes/to.$id.teams.$tid.tsx"), route("join", "features/tournament/routes/to.$id.join.tsx"), route("admin", "features/tournament/routes/to.$id.admin.tsx"), - route("seeds", "features/tournament/routes/to.$id.seeds.tsx"), route("results", "features/tournament/routes/to.$id.results.tsx"), route("streams", "features/tournament/routes/to.$id.streams.tsx"), diff --git a/e2e/tournament-ab-divisions.spec.ts b/e2e/tournament-ab-divisions.spec.ts index ba8f4eda1..e67d256db 100644 --- a/e2e/tournament-ab-divisions.spec.ts +++ b/e2e/tournament-ab-divisions.spec.ts @@ -22,7 +22,7 @@ test.describe("Tournament A/B divisions", () => { await navigate({ page, - url: `/to/${AB_RR_TOURNAMENT_ID}/seeds`, + url: `/to/${AB_RR_TOURNAMENT_ID}/admin?tab=seeds`, }); await page.getByTestId("set-ab-divisions").click(); diff --git a/e2e/tournament.spec.ts b/e2e/tournament.spec.ts index 2ef435d77..bd2d139a6 100644 --- a/e2e/tournament.spec.ts +++ b/e2e/tournament.spec.ts @@ -256,7 +256,7 @@ test.describe("Tournament", () => { await navigate({ page, - url: `${tournamentPage(1)}/seeds`, + url: `${tournamentPage(1)}/admin?tab=seeds`, }); await page.getByTestId("seed-team-1-handle").hover(); diff --git a/locales/da/tournament.json b/locales/da/tournament.json index 8c4b7161e..c68e942a8 100644 --- a/locales/da/tournament.json +++ b/locales/da/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Suppleanter", "nav.divisions": "", - "nav.seeds": "Seedninger", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -77,6 +76,7 @@ "teams.mapsPickedStatus": "Status for banevalg", "admin.download": "Hent liste over deltagere", "admin.tab.teams": "", + "admin.tab.seeds": "Seedninger", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/de/tournament.json b/locales/de/tournament.json index 1cae8380d..9c52de71c 100644 --- a/locales/de/tournament.json +++ b/locales/de/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Ersatzspieler", "nav.divisions": "", - "nav.seeds": "Seeds", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -77,6 +76,7 @@ "teams.mapsPickedStatus": "Status ausgewählter Arenen", "admin.download": "Teilnehmerliste herunterladen", "admin.tab.teams": "", + "admin.tab.seeds": "Seeds", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/en/tournament.json b/locales/en/tournament.json index 83d57d179..f524bf4f6 100644 --- a/locales/en/tournament.json +++ b/locales/en/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "LFG", "nav.subs": "Subs", "nav.divisions": "Divisions", - "nav.seeds": "Seeds", "nav.admin": "Admin", "findTeam": "Find team", "registerNow": "Register now", @@ -77,6 +76,7 @@ "teams.mapsPickedStatus": "Maps picked status", "admin.download": "Download participants", "admin.tab.teams": "Teams", + "admin.tab.seeds": "Seeds", "admin.tab.staff": "Staff", "admin.tab.stream": "Stream", "admin.tab.brackets": "Brackets", diff --git a/locales/es-ES/tournament.json b/locales/es-ES/tournament.json index dd4da6c16..53b4199e3 100644 --- a/locales/es-ES/tournament.json +++ b/locales/es-ES/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Subs", "nav.divisions": "", - "nav.seeds": "Listas de Equipos", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -78,6 +77,7 @@ "teams.mapsPickedStatus": "Estado de mapas elegidos", "admin.download": "Descarga participantes", "admin.tab.teams": "", + "admin.tab.seeds": "Listas de Equipos", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/es-US/tournament.json b/locales/es-US/tournament.json index ce7ca09ec..35e3f14d8 100644 --- a/locales/es-US/tournament.json +++ b/locales/es-US/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Subs", "nav.divisions": "", - "nav.seeds": "Listas de Equipos", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -78,6 +77,7 @@ "teams.mapsPickedStatus": "Estado de escenarios elegidos", "admin.download": "Descarga participantes", "admin.tab.teams": "", + "admin.tab.seeds": "Listas de Equipos", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/fr-CA/tournament.json b/locales/fr-CA/tournament.json index 780fa3ede..257c759e6 100644 --- a/locales/fr-CA/tournament.json +++ b/locales/fr-CA/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Remplaçants", "nav.divisions": "", - "nav.seeds": "Seeds", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -78,6 +77,7 @@ "teams.mapsPickedStatus": "Statut des stages sélectionnés", "admin.download": "Télécharger les participants", "admin.tab.teams": "", + "admin.tab.seeds": "Seeds", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/fr-EU/tournament.json b/locales/fr-EU/tournament.json index c8f6566f4..0f6064dfb 100644 --- a/locales/fr-EU/tournament.json +++ b/locales/fr-EU/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Remplaçants", "nav.divisions": "", - "nav.seeds": "Seeds", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -78,6 +77,7 @@ "teams.mapsPickedStatus": "Statut des stages sélectionnés", "admin.download": "Télécharger les participants", "admin.tab.teams": "", + "admin.tab.seeds": "Seeds", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/he/tournament.json b/locales/he/tournament.json index 0ae0d9415..d56648e3a 100644 --- a/locales/he/tournament.json +++ b/locales/he/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "מחליפים", "nav.divisions": "", - "nav.seeds": "דירוג", "nav.admin": "מנהל", "findTeam": "", "registerNow": "", @@ -78,6 +77,7 @@ "teams.mapsPickedStatus": "סטטוס בחירת המפות", "admin.download": "הורדת משתתפים", "admin.tab.teams": "", + "admin.tab.seeds": "דירוג", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/it/tournament.json b/locales/it/tournament.json index ab19cbfba..cf0ccecf2 100644 --- a/locales/it/tournament.json +++ b/locales/it/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Sub", "nav.divisions": "", - "nav.seeds": "Seed", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -78,6 +77,7 @@ "teams.mapsPickedStatus": "Stato scenari selezionati", "admin.download": "Download partecipanti", "admin.tab.teams": "", + "admin.tab.seeds": "Seed", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/ja/tournament.json b/locales/ja/tournament.json index 9494b4de9..428712df1 100644 --- a/locales/ja/tournament.json +++ b/locales/ja/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "サブ", "nav.divisions": "", - "nav.seeds": "シード", "nav.admin": "管理", "findTeam": "", "registerNow": "", @@ -75,6 +74,7 @@ "teams.mapsPickedStatus": "マップの選択状況", "admin.download": "参加者リストをダウンロード", "admin.tab.teams": "", + "admin.tab.seeds": "シード", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/ko/tournament.json b/locales/ko/tournament.json index b135b8ef8..c75df3382 100644 --- a/locales/ko/tournament.json +++ b/locales/ko/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "", "nav.divisions": "", - "nav.seeds": "", "nav.admin": "", "findTeam": "", "registerNow": "", @@ -75,6 +74,7 @@ "teams.mapsPickedStatus": "", "admin.download": "", "admin.tab.teams": "", + "admin.tab.seeds": "", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/nl/tournament.json b/locales/nl/tournament.json index 59da297ad..00370fae1 100644 --- a/locales/nl/tournament.json +++ b/locales/nl/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "", "nav.divisions": "", - "nav.seeds": "", "nav.admin": "", "findTeam": "", "registerNow": "", @@ -77,6 +76,7 @@ "teams.mapsPickedStatus": "", "admin.download": "", "admin.tab.teams": "", + "admin.tab.seeds": "", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/pl/tournament.json b/locales/pl/tournament.json index 860b59cdf..707b5fb52 100644 --- a/locales/pl/tournament.json +++ b/locales/pl/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "", "nav.divisions": "", - "nav.seeds": "", "nav.admin": "Admin", "findTeam": "", "registerNow": "", @@ -79,6 +78,7 @@ "teams.mapsPickedStatus": "Status wybranych map", "admin.download": "Zapisz uczestników", "admin.tab.teams": "", + "admin.tab.seeds": "", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/pt-BR/tournament.json b/locales/pt-BR/tournament.json index aa79f4980..05f7f3cf7 100644 --- a/locales/pt-BR/tournament.json +++ b/locales/pt-BR/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Inscritos", "nav.divisions": "", - "nav.seeds": "Sementes", "nav.admin": "Administrador", "findTeam": "", "registerNow": "", @@ -78,6 +77,7 @@ "teams.mapsPickedStatus": "Status dos mapas escolhidos", "admin.download": "Download dos participantes", "admin.tab.teams": "", + "admin.tab.seeds": "Sementes", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/ru/tournament.json b/locales/ru/tournament.json index 136539f99..ec304d7f2 100644 --- a/locales/ru/tournament.json +++ b/locales/ru/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "Запасные", "nav.divisions": "", - "nav.seeds": "Семена", "nav.admin": "Администратор", "findTeam": "", "registerNow": "", @@ -79,6 +78,7 @@ "teams.mapsPickedStatus": "Статус выбранных карт", "admin.download": "Скачать участников", "admin.tab.teams": "", + "admin.tab.seeds": "Семена", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "", diff --git a/locales/zh/tournament.json b/locales/zh/tournament.json index 2dc34acb3..4fe48653c 100644 --- a/locales/zh/tournament.json +++ b/locales/zh/tournament.json @@ -10,7 +10,6 @@ "nav.looking": "", "nav.subs": "替补", "nav.divisions": "", - "nav.seeds": "种子", "nav.admin": "管理", "findTeam": "", "registerNow": "", @@ -75,6 +74,7 @@ "teams.mapsPickedStatus": "地图的选择情况", "admin.download": "下载参赛者", "admin.tab.teams": "", + "admin.tab.seeds": "种子", "admin.tab.staff": "", "admin.tab.stream": "", "admin.tab.brackets": "",