+
+ {{ $t("pages.settings.application.sanctions.ladder.clamp_hint") }} +
+{{ thresholdHint }}
+{{ windowHint }}
++ {{ scopeDescription }} +
+
+
+ {{ $t("tournament.check_in.register_hint") }} +
++ {{ pendingHint }} +
++ {{ openHint }} +
++ {{ doneHint }} +
++ {{ missedHint }} +
++ {{ $t("tournament.check_in_review.subheading") }} +
+{{ $t("tournament.prizes.manage_hint") }}
@@ -310,6 +321,12 @@ import { useForm } from "vee-validate"; import { generateMutation } from "~/graphql/graphqlGen"; import { $ } from "~/generated/zeus"; import matchOptionsValidator from "~/utilities/match-options-validator"; +import { EXPECTED_PLAYERS } from "~/utilities/matchmakingPartySize"; +import { + REGISTRATION_FIELD, + registrationColumns, + registrationSchemaShape, +} from "~/utilities/tournamentRegistration"; import { effectivePlace, normalizePrize } from "~/utilities/prizes"; import { toTypedSchema } from "~/utilities/vee-validate-zod"; import { toast } from "@/components/ui/toast"; @@ -348,6 +365,7 @@ export default { categories: z.string().array().default([]), auto_start: z.boolean().default(true), negotiated_scheduling: z.boolean().default(false), + ...registrationSchemaShape(this), }, useApplicationSettingsStore().settings, ), @@ -360,6 +378,10 @@ export default { return [ { key: "information", label: this.$t("tournament.wizard.information") }, { key: "location", label: this.$t("tournament.wizard.location") }, + { + key: "registration", + label: this.$t("tournament.wizard.registration"), + }, { key: "match_options", label: this.$t("tournament.wizard.match_options"), @@ -367,6 +389,15 @@ export default { { key: "prizes", label: this.$t("tournament.wizard.prizes") }, ]; }, + // There is no tournament row yet, so the lineup minimum comes from the + // match type the organizer picked (EXPECTED_PLAYERS counts both lineups). + minPlayersPerLineup(): number | null { + const expected = + EXPECTED_PLAYERS[ + this.form.values.type as keyof typeof EXPECTED_PLAYERS + ]; + return expected ? expected / 2 : null; + }, }, methods: { addPrizeRow(prize: string, place: string) { @@ -435,14 +466,23 @@ export default { }); }, async validateStep(step: number): Promise+ {{ + needsInvite + ? $t("tournament.entry.invite_hint") + : $t("tournament.entry.requirements_hint") + }} +
++ {{ + lobbyFitsTeam + ? $t("tournament.free_agents.lobby_hint", { + count: lobbyMembers.length, + size: teamSize, + }) + : $t("tournament.free_agents.lobby_too_big", { + count: lobbyMembers.length, + size: teamSize, + }) + }} +
+ ++ {{ + $t("tournament.free_agents.lobby_not_captain", { + name: lobbyCaptain.player?.name, + }) + }} +
+ ++ {{ + $t("tournament.free_agents.lobby_already_signed_up", { + count: lobbyMembersAlreadyInPool, + }) + }} +
+ +
+
+ {{ + me + ? $t("tournament.invite_accept.hint") + : $t("tournament.invite_accept.guest_hint") + }} +
++ {{ failureMessage }} +
++ {{ $t("tournament.invite_links.hint") }} +
+ ++ {{ + inviteOnly + ? $t("tournament.invites.description") + : $t("tournament.invites.hint_open") + }} +
+ ++ {{ $t("tournament.registration.rank.description") }} +
++ {{ eloRangeError }} +
++ {{ $t("tournament.check_in.lock_note") }} +
++ {{ $t("tournament.check_in.late_registration_note") }} +
++ {{ $t("tournament.check_in.no_show_note") }} +
+