mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-10-27 04:54:25 -05:00
Progress
This commit is contained in:
@@ -7106,7 +7106,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "260999523806085120",
|
||||
discordAvatar: "4f15f20946fbd992ee9d694a539e6317",
|
||||
customUrl: "elemental",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7116,7 +7115,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "176095582534762496",
|
||||
discordAvatar: "89e15b6e74f5abdef1183c9416434dde",
|
||||
customUrl: "pock",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7126,7 +7124,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "87494390724964352",
|
||||
discordAvatar: "3b82ee3101ba39120b6a65c042a04a37",
|
||||
customUrl: "inkfarer",
|
||||
|
||||
role: "STREAMER",
|
||||
},
|
||||
{
|
||||
@@ -7136,7 +7133,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "334504066405367808",
|
||||
discordAvatar: "0d31f0d52ebfeaa0216fcacb86eb140a",
|
||||
customUrl: "shads",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7146,7 +7142,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "112254088992792576",
|
||||
discordAvatar: "711e8d48f316687faa4fdb41ab9298f0",
|
||||
customUrl: "kitsunekeira",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7156,7 +7151,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "412316772637736981",
|
||||
discordAvatar: "1408d204fa8a128efd2d2625476468c2",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7166,7 +7160,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "578038263433134080",
|
||||
discordAvatar: "f552df977e0165e7fb93d1ce2a7512d4",
|
||||
customUrl: "bars",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7176,7 +7169,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "230161540299489280",
|
||||
discordAvatar: "a_3ca2a0737b2c1e2b5e82ddc98fe79c8b",
|
||||
customUrl: "bowen",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7186,7 +7178,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "678892046534311936",
|
||||
discordAvatar: "11490e6c0ace327ebc32a117b9e0510c",
|
||||
customUrl: "toes",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7196,7 +7187,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "512418782933811221",
|
||||
discordAvatar: "c3afd465b53dedbb97fb9dd504d01305",
|
||||
customUrl: "neato",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7206,7 +7196,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "182994907907096585",
|
||||
discordAvatar: "31da63dcb6dd1dbe4c3f135c105f07e7",
|
||||
customUrl: "strings",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7216,7 +7205,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "725416982681223259",
|
||||
discordAvatar: "cb9bf51b05f22c763a2b4812bdd574cc",
|
||||
customUrl: "michi",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7226,7 +7214,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "367803257717784599",
|
||||
discordAvatar: "b8ad30de9487a9699093b728098e01d0",
|
||||
customUrl: "glumbaron",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7236,7 +7223,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "1058063829973618698",
|
||||
discordAvatar: "dc110c2d77ea84e470c87a18ac0b7e5d",
|
||||
customUrl: "lemon7890",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7246,7 +7232,6 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "1132918323697418310",
|
||||
discordAvatar: "48089383c5d666ae7ef8417d205bfa1f",
|
||||
customUrl: "eemeee",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -7256,11 +7241,9 @@ export const LOW_INK_DECEMBER_2024 = (): TournamentData => ({
|
||||
discordId: "689577992430944281",
|
||||
discordAvatar: "911c0ac66f9489406ea4ae970e7ed5b0",
|
||||
customUrl: "pin-eye",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
],
|
||||
subCounts: [],
|
||||
bracketProgressionOverrides: [],
|
||||
isFinalized: 0,
|
||||
teams: [
|
||||
|
||||
@@ -2209,7 +2209,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "333766288969302018",
|
||||
discordAvatar: "42d40d5ae6ff7081ae57bc02b6e2f717",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2219,7 +2218,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "260999523806085120",
|
||||
discordAvatar: "a_71a6a4b4f76bd79bc9d7743e322a879d",
|
||||
customUrl: "elemental",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2229,7 +2227,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "468596581357060097",
|
||||
discordAvatar: "940589e5c6793a5cbbab2adebd84fe0b",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2239,7 +2236,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "418176537561661441",
|
||||
discordAvatar: "bab3e7a9cdb2071de7f2ae29256fc83b",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2249,7 +2245,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "302160815132246016",
|
||||
discordAvatar: "da7cfcd1a5b8bee37cfa5d308b0898eb",
|
||||
customUrl: "mashimashi",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2259,7 +2254,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "183025242266927104",
|
||||
discordAvatar: "a9475b488962953152c60f4f138b1618",
|
||||
customUrl: "tux",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2269,7 +2263,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "343219263655510021",
|
||||
discordAvatar: "f30c675fc07203ca112d93fd03b5cc96",
|
||||
customUrl: "tbob408",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2279,7 +2272,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "390444783425945602",
|
||||
discordAvatar: "e821ac7a457033d6c990bcaf518287e5",
|
||||
customUrl: null,
|
||||
|
||||
role: "STREAMER",
|
||||
},
|
||||
{
|
||||
@@ -2289,7 +2281,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "422790410566500352",
|
||||
discordAvatar: "77b479e49ec0d09edb8f9b975bff04ce",
|
||||
customUrl: "reefsixes",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2299,7 +2290,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "360259023389327361",
|
||||
discordAvatar: "c5a2506e46e135b2568ef48242f669e8",
|
||||
customUrl: "kloud",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2309,7 +2299,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "247504664378081280",
|
||||
discordAvatar: "a_a60bcc9c76d4baa9814287fdc5c28fe9",
|
||||
customUrl: "pipedreamdx",
|
||||
|
||||
role: "STREAMER",
|
||||
},
|
||||
{
|
||||
@@ -2319,7 +2308,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "184478601171828737",
|
||||
discordAvatar: "75dedb3527b73d9571151f0a00d1c365",
|
||||
customUrl: "scepidilionz",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2329,7 +2317,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "565712290020589569",
|
||||
discordAvatar: "498b21d6f64dcd56d06e61c2ec39e571",
|
||||
customUrl: "rooster",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2339,7 +2326,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "103988435785650176",
|
||||
discordAvatar: "5fef4bf0c1b8a6a76fe2f43b956bfc3d",
|
||||
customUrl: "tulip",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2349,7 +2335,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "221418644297482250",
|
||||
discordAvatar: "6b7156dcd0582ee160564bfa0c5cdc0e",
|
||||
customUrl: "fusionboltzgx",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2359,7 +2344,6 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "458714559855722497",
|
||||
discordAvatar: "b815bb6090c2b32fec23f1336fae5663",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -2369,20 +2353,9 @@ export const SWIM_OR_SINK_167 = (
|
||||
discordId: "599633578648928307",
|
||||
discordAvatar: "f5139304fb364bca35634a8e5cd11c0f",
|
||||
customUrl: "phantom_spl",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
],
|
||||
subCounts: [
|
||||
{
|
||||
visibility: "+3",
|
||||
count: 1,
|
||||
},
|
||||
{
|
||||
visibility: "ALL",
|
||||
count: 17,
|
||||
},
|
||||
],
|
||||
bracketProgressionOverrides: overrides ?? [],
|
||||
isFinalized: 0,
|
||||
teams: [
|
||||
|
||||
@@ -347,7 +347,6 @@ export const ZONES_WEEKLY_38 = (): TournamentData => ({
|
||||
discordId: "395757059922198548",
|
||||
discordAvatar: "2a569302e9545c6a07f8f8aa337d139d",
|
||||
customUrl: "penis",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -357,7 +356,6 @@ export const ZONES_WEEKLY_38 = (): TournamentData => ({
|
||||
discordId: "267963609924108288",
|
||||
discordAvatar: "85090cfe2e0da693355bcec9740c1eaa",
|
||||
customUrl: "cookie",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -367,7 +365,6 @@ export const ZONES_WEEKLY_38 = (): TournamentData => ({
|
||||
discordId: "507102073427460098",
|
||||
discordAvatar: "bd634c91f7d0475f3671956fa9a2110a",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -377,16 +374,9 @@ export const ZONES_WEEKLY_38 = (): TournamentData => ({
|
||||
discordId: "111682034056835072",
|
||||
discordAvatar: "f1191c94b1da5396a06b620408017c1f",
|
||||
customUrl: "weizihao",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
],
|
||||
subCounts: [
|
||||
{
|
||||
visibility: "ALL",
|
||||
count: 4,
|
||||
},
|
||||
],
|
||||
bracketProgressionOverrides: [],
|
||||
teams: [
|
||||
{
|
||||
|
||||
@@ -1460,7 +1460,6 @@ export const PADDLING_POOL_257 = () =>
|
||||
"Hosted by Dapple Productions.\n\nThe longest tournament series in Splatoon!\nEvery week a tournament!\n\n✓ DE or Groups into SE\n✓ All Modes (Picnic system)\n✓ Badge prize\n✓ A well-ran tournament experience\n\nCome join!",
|
||||
rules: null,
|
||||
logoUrl: "/test.png",
|
||||
subCounts: [],
|
||||
startTime: 1709748000,
|
||||
author: {
|
||||
id: 860,
|
||||
@@ -1478,7 +1477,6 @@ export const PADDLING_POOL_257 = () =>
|
||||
discordId: "178489224192851969",
|
||||
discordAvatar: "8b8c1d85cc525ea366f3ce2a6a594c05",
|
||||
customUrl: "pinky",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -1488,7 +1486,6 @@ export const PADDLING_POOL_257 = () =>
|
||||
discordId: "275213752025088000",
|
||||
discordAvatar: "25bf68c5aa4e622ceb5a241c34841c6d",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -1498,7 +1495,6 @@ export const PADDLING_POOL_257 = () =>
|
||||
discordId: "195618756800675841",
|
||||
discordAvatar: "a_03ec4bbcb2a4ab000237c9f3e9e71508",
|
||||
customUrl: "sdomi19",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -1508,7 +1504,6 @@ export const PADDLING_POOL_257 = () =>
|
||||
discordId: "413759870333091884",
|
||||
discordAvatar: "a_b55f70ada809a600e73c5088b910e659",
|
||||
customUrl: "brufnie",
|
||||
|
||||
role: "STREAMER",
|
||||
},
|
||||
],
|
||||
@@ -8058,7 +8053,6 @@ export const PADDLING_POOL_255 = () =>
|
||||
description: null,
|
||||
rules: null,
|
||||
logoUrl: "/test.png",
|
||||
subCounts: [],
|
||||
startTime: 1708538400,
|
||||
author: {
|
||||
id: 860,
|
||||
@@ -8076,7 +8070,6 @@ export const PADDLING_POOL_255 = () =>
|
||||
discordId: "178489224192851969",
|
||||
discordAvatar: "8b8c1d85cc525ea366f3ce2a6a594c05",
|
||||
customUrl: "pinky",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -8086,7 +8079,6 @@ export const PADDLING_POOL_255 = () =>
|
||||
discordId: "275213752025088000",
|
||||
discordAvatar: "25bf68c5aa4e622ceb5a241c34841c6d",
|
||||
customUrl: null,
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -8096,7 +8088,6 @@ export const PADDLING_POOL_255 = () =>
|
||||
discordId: "195618756800675841",
|
||||
discordAvatar: "a_03ec4bbcb2a4ab000237c9f3e9e71508",
|
||||
customUrl: "sdomi19",
|
||||
|
||||
role: "ORGANIZER",
|
||||
},
|
||||
{
|
||||
@@ -8106,7 +8097,6 @@ export const PADDLING_POOL_255 = () =>
|
||||
discordId: "413759870333091884",
|
||||
discordAvatar: "a_b55f70ada809a600e73c5088b910e659",
|
||||
customUrl: "brufnie",
|
||||
|
||||
role: "STREAMER",
|
||||
},
|
||||
],
|
||||
@@ -14982,7 +14972,6 @@ export const IN_THE_ZONE_32 = ({
|
||||
description: "Part of sendou.ink ranked season 2",
|
||||
rules: null,
|
||||
logoUrl: "/test.png",
|
||||
subCounts: [],
|
||||
startTime: 1707588000,
|
||||
author: {
|
||||
id: 274,
|
||||
@@ -15000,7 +14989,6 @@ export const IN_THE_ZONE_32 = ({
|
||||
discordId: "163771047068303360",
|
||||
discordAvatar: "b33d8f230218d6a92705a63fdf803851",
|
||||
customUrl: "alicetheto",
|
||||
|
||||
role: "STREAMER",
|
||||
},
|
||||
{
|
||||
@@ -15010,7 +14998,6 @@ export const IN_THE_ZONE_32 = ({
|
||||
discordId: "413759870333091884",
|
||||
discordAvatar: "a_b55f70ada809a600e73c5088b910e659",
|
||||
customUrl: "brufnie",
|
||||
|
||||
role: "STREAMER",
|
||||
},
|
||||
],
|
||||
|
||||
@@ -74,7 +74,6 @@ export const testTournament = ({
|
||||
name: "test",
|
||||
castTwitchAccounts: [],
|
||||
bracketProgressionOverrides: [],
|
||||
subCounts: [],
|
||||
staff: [],
|
||||
tieBreakerMapPool: [],
|
||||
toSetMapPool: [],
|
||||
|
||||
@@ -63,7 +63,6 @@ type TournamentLFGMemberObject = {
|
||||
languages: Tables["User"]["languages"];
|
||||
vc: Tables["User"]["vc"];
|
||||
pronouns: Tables["User"]["pronouns"];
|
||||
country: Tables["User"]["country"];
|
||||
role: Tables["TournamentTeamMember"]["role"];
|
||||
isStayAsSub: Tables["TournamentTeamMember"]["isStayAsSub"];
|
||||
weapons: Tables["User"]["qWeaponPool"];
|
||||
@@ -105,8 +104,6 @@ export async function findLookingTeamsByTournamentId(tournamentId: number) {
|
||||
languages: eb.ref("User.languages"),
|
||||
vc: eb.ref("User.vc"),
|
||||
pronouns: eb.ref("User.pronouns"),
|
||||
// xxx: is it better to show country rather than languages?
|
||||
country: eb.ref("User.country"),
|
||||
role: eb.ref("TournamentTeamMember.role"),
|
||||
isStayAsSub: eb.ref("TournamentTeamMember.isStayAsSub"),
|
||||
weapons: eb.ref("User.qWeaponPool"),
|
||||
@@ -146,7 +143,6 @@ export async function findSubGroups(tournamentId: number) {
|
||||
languages: eb.ref("User.languages"),
|
||||
vc: eb.ref("User.vc"),
|
||||
pronouns: eb.ref("User.pronouns"),
|
||||
country: eb.ref("User.country"),
|
||||
role: eb.ref("TournamentTeamMember.role"),
|
||||
isStayAsSub: eb.ref("TournamentTeamMember.isStayAsSub"),
|
||||
weapons: eb.ref("User.qWeaponPool"),
|
||||
@@ -349,7 +345,6 @@ export function leaveLfg({
|
||||
)
|
||||
.select([
|
||||
"TournamentTeamMember.tournamentTeamId",
|
||||
"TournamentTeamMember.role",
|
||||
"TournamentTeam.isPlaceholder",
|
||||
])
|
||||
.where("TournamentTeamMember.userId", "=", userId)
|
||||
@@ -373,40 +368,10 @@ export function leaveLfg({
|
||||
return;
|
||||
}
|
||||
|
||||
// xxx: or just call TournamentTeam.unregister?
|
||||
// xxx: also leaving team should not be possible via this so remove that code
|
||||
await trx
|
||||
.deleteFrom("TournamentTeamMember")
|
||||
.where("userId", "=", userId)
|
||||
.where("tournamentTeamId", "=", userTeam.tournamentTeamId)
|
||||
.deleteFrom("TournamentTeam")
|
||||
.where("id", "=", userTeam.tournamentTeamId)
|
||||
.execute();
|
||||
|
||||
const remainingMembers = await trx
|
||||
.selectFrom("TournamentTeamMember")
|
||||
.select(["userId", "role"])
|
||||
.where("tournamentTeamId", "=", userTeam.tournamentTeamId)
|
||||
.execute();
|
||||
|
||||
if (remainingMembers.length === 0) {
|
||||
await trx
|
||||
.deleteFrom("TournamentTeam")
|
||||
.where("id", "=", userTeam.tournamentTeamId)
|
||||
.execute();
|
||||
return;
|
||||
}
|
||||
|
||||
if (userTeam.role === "OWNER") {
|
||||
const newOwner =
|
||||
remainingMembers.find((m) => m.role === "MANAGER") ??
|
||||
remainingMembers[0];
|
||||
|
||||
await trx
|
||||
.updateTable("TournamentTeamMember")
|
||||
.set({ role: "OWNER" })
|
||||
.where("userId", "=", newOwner.userId)
|
||||
.where("tournamentTeamId", "=", userTeam.tournamentTeamId)
|
||||
.execute();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import type { ActionFunctionArgs } from "react-router";
|
||||
import { requireUser } from "~/features/auth/core/user.server";
|
||||
import { tournamentFromDBCached } from "~/features/tournament-bracket/core/Tournament.server";
|
||||
import {
|
||||
clearTournamentDataCache,
|
||||
tournamentFromDBCached,
|
||||
} from "~/features/tournament-bracket/core/Tournament.server";
|
||||
import {
|
||||
errorToastIfFalsy,
|
||||
parseParams,
|
||||
@@ -14,7 +17,6 @@ import { survivingTeamId } from "../tournament-lfg-utils";
|
||||
|
||||
// xxx: prevent actions in certain cases? like when tournament has started
|
||||
// xxx: add `requireNotBannedByOrganization` & other checks from deleted to.$id.subs.new.tsx route
|
||||
// xxx: add `clearTournamentDataCache`
|
||||
|
||||
export const action = async ({ request, params }: ActionFunctionArgs) => {
|
||||
const user = requireUser();
|
||||
@@ -54,6 +56,12 @@ export const action = async ({ request, params }: ActionFunctionArgs) => {
|
||||
const team = tournament.teamMemberOfByUser(user);
|
||||
|
||||
if (team) {
|
||||
// xxx: or isManager, also just show errorToast no return null
|
||||
const isTeamOwner = team.members.some(
|
||||
(m) => m.userId === user.id && m.isOwner,
|
||||
);
|
||||
if (!isTeamOwner) return null;
|
||||
|
||||
errorToastIfFalsy(
|
||||
team.members.length < tournament.maxMembersPerTeam,
|
||||
"Team is already at max capacity",
|
||||
@@ -248,5 +256,7 @@ export const action = async ({ request, params }: ActionFunctionArgs) => {
|
||||
}
|
||||
}
|
||||
|
||||
clearTournamentDataCache(tournamentId);
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
.group {
|
||||
background-color: var(--bg-lighter-solid);
|
||||
background-color: var(--color-bg-high);
|
||||
width: 100%;
|
||||
border-radius: var(--rounded);
|
||||
padding: var(--s-2-5);
|
||||
border-radius: var(--radius-box);
|
||||
padding: var(--s-3);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--s-4);
|
||||
position: relative;
|
||||
color: var(--text);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.member {
|
||||
display: flex;
|
||||
gap: var(--s-2);
|
||||
align-items: center;
|
||||
background-color: var(--bg-darker);
|
||||
border-radius: var(--rounded);
|
||||
font-size: var(--fonts-xsm);
|
||||
font-weight: var(--semi-bold);
|
||||
padding-inline-end: var(--s-2-5);
|
||||
background-color: var(--color-bg);
|
||||
border-radius: var(--radius-box);
|
||||
font-size: var(--font-sm);
|
||||
font-weight: var(--weight-semi);
|
||||
padding-inline-end: var(--s-3);
|
||||
}
|
||||
|
||||
.name {
|
||||
@@ -26,20 +26,20 @@
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
max-width: 7.5rem;
|
||||
font-size: var(--fonts-xs);
|
||||
color: var(--text);
|
||||
font-size: var(--font-xs);
|
||||
color: var(--color-text);
|
||||
}
|
||||
|
||||
.extraInfo {
|
||||
font-size: var(--fonts-xs);
|
||||
background-color: var(--bg-darker);
|
||||
border-radius: var(--rounded);
|
||||
font-size: var(--font-xs);
|
||||
background-color: var(--color-bg);
|
||||
border-radius: var(--radius-box);
|
||||
padding: var(--s-0-5) var(--s-1-5);
|
||||
width: max-content;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--s-1);
|
||||
font-weight: var(--semi-bold);
|
||||
font-weight: var(--weight-semi);
|
||||
min-height: 24px;
|
||||
}
|
||||
|
||||
@@ -51,12 +51,12 @@
|
||||
.star {
|
||||
min-width: 18px;
|
||||
max-width: 18px;
|
||||
color: var(--theme-secondary);
|
||||
color: var(--color-text-second);
|
||||
stroke-width: 2;
|
||||
}
|
||||
|
||||
.starInactive {
|
||||
color: var(--text-lighter);
|
||||
color: var(--color-text-high);
|
||||
}
|
||||
|
||||
.teamHeader {
|
||||
@@ -66,6 +66,6 @@
|
||||
}
|
||||
|
||||
.teamName {
|
||||
font-size: var(--fonts-xxs);
|
||||
font-weight: var(--semi-bold);
|
||||
font-size: var(--font-2xs);
|
||||
font-weight: var(--weight-semi);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
display: grid;
|
||||
justify-content: center;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: var(--s-7);
|
||||
gap: var(--s-6);
|
||||
}
|
||||
|
||||
.containerMobile {
|
||||
@@ -17,10 +17,10 @@
|
||||
|
||||
.header {
|
||||
text-align: center;
|
||||
font-size: var(--fonts-xxs);
|
||||
font-weight: var(--semi-bold);
|
||||
font-size: var(--font-2xs);
|
||||
font-weight: var(--weight-semi);
|
||||
text-transform: uppercase;
|
||||
color: var(--theme);
|
||||
color: var(--color-text-accent);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
@@ -30,9 +30,9 @@
|
||||
flex: 1;
|
||||
content: "";
|
||||
padding: 2px;
|
||||
background-color: var(--theme-transparent);
|
||||
background-color: var(--color-bg-high);
|
||||
margin: 5px;
|
||||
border-radius: var(--rounded);
|
||||
border-radius: var(--radius-box);
|
||||
}
|
||||
|
||||
.subsContainer {
|
||||
@@ -49,13 +49,12 @@
|
||||
grid-template-areas:
|
||||
"avatar name"
|
||||
"avatar info"
|
||||
"spacer spacer"
|
||||
"weapon-top-text weapon-top-images"
|
||||
"weapons weapons"
|
||||
"message message";
|
||||
border-radius: var(--radius-box);
|
||||
background-color: var(--color-bg-high);
|
||||
padding: var(--s-4);
|
||||
column-gap: var(--s-2-5);
|
||||
column-gap: var(--s-3);
|
||||
border: var(--border-style);
|
||||
}
|
||||
|
||||
@@ -67,6 +66,7 @@
|
||||
.subsSectionName {
|
||||
grid-area: name;
|
||||
align-self: flex-end;
|
||||
font-weight: var(--weight-semi);
|
||||
}
|
||||
|
||||
.subsSectionInfo {
|
||||
@@ -98,41 +98,22 @@
|
||||
}
|
||||
|
||||
.subsSectionWeaponText {
|
||||
font-weight: var(--semi-bold);
|
||||
font-size: var(--fonts-xs);
|
||||
font-weight: var(--weight-semi);
|
||||
font-size: var(--font-xs);
|
||||
color: var(--color-text-high);
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.subsSectionWeaponTopText {
|
||||
grid-area: weapon-top-text;
|
||||
.subsSectionWeapons {
|
||||
grid-area: weapons;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--s-2);
|
||||
padding-block-start: var(--s-2);
|
||||
}
|
||||
|
||||
.subsSectionWeaponImages {
|
||||
display: flex;
|
||||
gap: var(--s-1);
|
||||
width: 11rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.subsSectionWeaponTopImages {
|
||||
grid-area: weapon-top-images;
|
||||
}
|
||||
|
||||
.subsSectionSpacer {
|
||||
grid-area: spacer;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
@container (width >= 640px) {
|
||||
.section {
|
||||
grid-template-columns: max-content 1fr max-content max-content;
|
||||
grid-template-areas:
|
||||
"avatar name weapon-top-text weapon-top-images"
|
||||
"avatar info . ."
|
||||
"message message message message";
|
||||
}
|
||||
|
||||
.subsSectionSpacer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import { Link, useFetcher, useLoaderData } from "react-router";
|
||||
import { Avatar } from "~/components/Avatar";
|
||||
import { SendouButton } from "~/components/elements/Button";
|
||||
import { SendouDialog } from "~/components/elements/Dialog";
|
||||
import { SendouPopover } from "~/components/elements/Popover";
|
||||
import {
|
||||
SendouTab,
|
||||
SendouTabList,
|
||||
@@ -52,7 +53,6 @@ export default function TournamentLFGShell() {
|
||||
return <TournamentLFGPage />;
|
||||
}
|
||||
|
||||
// xxx: show one button to join at the top with dialog opening? instead of two inline
|
||||
// xxx: no button if already in the tournament
|
||||
// xxx: can we reuse the column layout with sendouq?
|
||||
function TournamentLFGPage() {
|
||||
@@ -324,24 +324,13 @@ function SubCard({ sub }: { sub: SubEntry }) {
|
||||
<Link to={userPage(sub)} className={styles.subsSectionName}>
|
||||
{sub.username}
|
||||
</Link>
|
||||
<div className={styles.subsSectionSpacer} />
|
||||
<div className={styles.subsSectionInfo}>{infos}</div>
|
||||
{sub.weapons ? (
|
||||
<>
|
||||
<div
|
||||
className={clsx(
|
||||
styles.subsSectionWeaponTopText,
|
||||
styles.subsSectionWeaponText,
|
||||
)}
|
||||
>
|
||||
<div className={styles.subsSectionWeapons}>
|
||||
<div className={styles.subsSectionWeaponText}>
|
||||
{t("tournament:subs.prefersToPlay")}
|
||||
</div>
|
||||
<div
|
||||
className={clsx(
|
||||
styles.subsSectionWeaponTopImages,
|
||||
styles.subsSectionWeaponImages,
|
||||
)}
|
||||
>
|
||||
<div className={styles.subsSectionWeaponImages}>
|
||||
{sub.weapons.map((wpn) => (
|
||||
<WeaponImage
|
||||
key={wpn.weaponSplId}
|
||||
@@ -351,7 +340,7 @@ function SubCard({ sub }: { sub: SubEntry }) {
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
) : null}
|
||||
{sub.message ? (
|
||||
<div className={styles.subsSectionMessage}>{sub.message}</div>
|
||||
@@ -414,7 +403,7 @@ function JoinQueueForm() {
|
||||
}
|
||||
|
||||
function TeamQueueSection() {
|
||||
const { t } = useTranslation(["q"]);
|
||||
const { t } = useTranslation(["q", "tournament"]);
|
||||
const data = useLoaderData<typeof loader>() as Extract<
|
||||
LookingLoaderData,
|
||||
{ mode: "looking" }
|
||||
@@ -426,20 +415,36 @@ function TeamQueueSection() {
|
||||
|
||||
const isAtMaxMembers =
|
||||
data.ownTeam.members.length >= tournament.maxMembersPerTeam;
|
||||
const canJoinQueue =
|
||||
data.ownTeam.usersRole === "OWNER" || data.ownTeam.usersRole === "MANAGER";
|
||||
|
||||
return (
|
||||
<div className="stack md">
|
||||
<LFGGroupCard group={data.ownTeam} />
|
||||
{!isAtMaxMembers ? (
|
||||
<fetcher.Form method="post" className="stack items-center">
|
||||
<SubmitButton
|
||||
_action="JOIN_QUEUE"
|
||||
state={fetcher.state}
|
||||
variant="outlined"
|
||||
>
|
||||
{t("q:looking.joinQPromptMembers")}
|
||||
</SubmitButton>
|
||||
</fetcher.Form>
|
||||
canJoinQueue ? (
|
||||
<fetcher.Form method="post" className="stack items-center">
|
||||
<SubmitButton
|
||||
_action="JOIN_QUEUE"
|
||||
state={fetcher.state}
|
||||
variant="outlined"
|
||||
>
|
||||
{t("q:looking.joinQPromptMembers")}
|
||||
</SubmitButton>
|
||||
</fetcher.Form>
|
||||
) : (
|
||||
<div className="stack items-center">
|
||||
<SendouPopover
|
||||
trigger={
|
||||
<SendouButton variant="outlined">
|
||||
{t("q:looking.joinQPromptMembers")}
|
||||
</SendouButton>
|
||||
}
|
||||
>
|
||||
{t("tournament:lfg.askCaptainToJoinQueue")}
|
||||
</SendouPopover>
|
||||
</div>
|
||||
)
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -8,7 +8,6 @@ import type {
|
||||
PreparedMaps,
|
||||
Tables,
|
||||
TournamentSettings,
|
||||
TournamentSub,
|
||||
} from "~/db/tables";
|
||||
import * as Progression from "~/features/tournament-bracket/core/Progression";
|
||||
import { Status } from "~/modules/brackets-model";
|
||||
@@ -85,7 +84,6 @@ export async function findById(id: number) {
|
||||
"TournamentOrganizationMember.userId",
|
||||
"TournamentOrganizationMember.role",
|
||||
...COMMON_USER_FIELDS,
|
||||
|
||||
"User.pronouns",
|
||||
])
|
||||
.whereRef(
|
||||
@@ -114,29 +112,11 @@ export async function findById(id: number) {
|
||||
.innerJoin("User", "TournamentStaff.userId", "User.id")
|
||||
.select([
|
||||
...COMMON_USER_FIELDS,
|
||||
|
||||
"User.pronouns",
|
||||
"TournamentStaff.role",
|
||||
])
|
||||
.where("TournamentStaff.tournamentId", "=", id),
|
||||
).as("staff"),
|
||||
jsonArrayFrom(
|
||||
eb
|
||||
.selectFrom("TournamentTeamMember")
|
||||
.innerJoin(
|
||||
"TournamentTeam",
|
||||
"TournamentTeam.id",
|
||||
"TournamentTeamMember.tournamentTeamId",
|
||||
)
|
||||
.select(({ fn }) => [
|
||||
sql<string>`'ALL'`.as("visibility"),
|
||||
fn.countAll<number>().as("count"),
|
||||
])
|
||||
.where("TournamentTeam.tournamentId", "=", id)
|
||||
// xxx: this is not correct
|
||||
.where("TournamentTeam.isPlaceholder", "=", 1)
|
||||
.where("TournamentTeamMember.isStayAsSub", "=", 1),
|
||||
).as("subCounts"),
|
||||
jsonArrayFrom(
|
||||
eb
|
||||
.selectFrom("TournamentBracketProgressionOverride")
|
||||
@@ -322,11 +302,6 @@ export async function findById(id: number) {
|
||||
|
||||
return {
|
||||
...result,
|
||||
// TODO: types broke with dependency update somehow
|
||||
subCounts: result.subCounts as Array<{
|
||||
visibility: TournamentSub["visibility"];
|
||||
count: number;
|
||||
}>,
|
||||
teams: result.teams.map((team) => ({
|
||||
...team,
|
||||
members: team.members.map(({ ordinal, ...member }) => member),
|
||||
|
||||
@@ -74,7 +74,6 @@ import {
|
||||
import { useTournament } from "./to.$id";
|
||||
export { loader, action };
|
||||
|
||||
// xxx: handle placeholder team made
|
||||
// xxx: allow promoting members to managers
|
||||
export default function TournamentRegisterPage() {
|
||||
const isMounted = useIsMounted();
|
||||
|
||||
@@ -16,7 +16,6 @@ import { Tournament } from "~/features/tournament-bracket/core/Tournament";
|
||||
import { useIsMounted } from "~/hooks/useIsMounted";
|
||||
import type { SendouRouteHandle } from "~/utils/remix.server";
|
||||
import { removeMarkdown } from "~/utils/strings";
|
||||
import { assertUnreachable } from "~/utils/types";
|
||||
import {
|
||||
tournamentDivisionsPage,
|
||||
tournamentPage,
|
||||
@@ -116,29 +115,6 @@ export function TournamentLayout() {
|
||||
window.tourney = tournament;
|
||||
}, [tournament]);
|
||||
}
|
||||
const subsCount = () =>
|
||||
// biome-ignore lint/suspicious/useIterableCallbackReturn: Biome 2.3.1 upgrade
|
||||
tournament.ctx.subCounts.reduce((acc, cur) => {
|
||||
if (cur.visibility === "ALL") return acc + cur.count;
|
||||
|
||||
const userPlusTier = user?.plusTier ?? 4;
|
||||
|
||||
switch (cur.visibility) {
|
||||
case "+1": {
|
||||
return userPlusTier === 1 ? acc + cur.count : acc;
|
||||
}
|
||||
case "+2": {
|
||||
return userPlusTier <= 2 ? acc + cur.count : acc;
|
||||
}
|
||||
case "+3": {
|
||||
return userPlusTier <= 3 ? acc + cur.count : acc;
|
||||
}
|
||||
default: {
|
||||
assertUnreachable(cur.visibility);
|
||||
}
|
||||
}
|
||||
}, 0);
|
||||
|
||||
return (
|
||||
<Main bigger>
|
||||
<SubNav>
|
||||
@@ -185,7 +161,7 @@ export function TournamentLayout() {
|
||||
<SubNavLink to="looking">
|
||||
{tournament.registrationOpen
|
||||
? t("tournament:tabs.looking")
|
||||
: t("tournament:tabs.subs", { count: subsCount() })}
|
||||
: t("tournament:tabs.subs")}
|
||||
</SubNavLink>
|
||||
) : null}
|
||||
{tournament.hasStarted && !tournament.everyBracketOver ? (
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Seedninger",
|
||||
"tabs.results": "",
|
||||
"tabs.streams": "Streams ({{count}})",
|
||||
"tabs.subs": "Suppleanter ({{count}})",
|
||||
"tabs.subs": "Suppleanter",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Fuldfør disse trin for at spille",
|
||||
"pre.steps.name": "Holdnavn",
|
||||
@@ -150,5 +150,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Seeds",
|
||||
"tabs.results": "Ergebnisse",
|
||||
"tabs.streams": "Streams ({{count}})",
|
||||
"tabs.subs": "Ersatzspieler ({{count}})",
|
||||
"tabs.subs": "Ersatzspieler",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Folge diesen Schritten, um zu spielen",
|
||||
"pre.steps.name": "Teamname",
|
||||
@@ -150,5 +150,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Seeds",
|
||||
"tabs.results": "Results",
|
||||
"tabs.streams": "Streams ({{count}})",
|
||||
"tabs.subs": "Subs ({{count}})",
|
||||
"tabs.subs": "Subs",
|
||||
"tabs.looking": "LFG",
|
||||
"pre.steps.header": "Complete these steps to play",
|
||||
"pre.steps.name": "Team name",
|
||||
@@ -150,5 +150,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "Negative progression only possible for double elimination",
|
||||
"progression.error.NO_SE_SOURCE": "Single elimination is not a valid source bracket",
|
||||
"progression.error.NO_DE_POSITIVE": "Double elimination is not valid for positive progression",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "Swiss bracket with early advance/elimination must lead to another bracket"
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "Swiss bracket with early advance/elimination must lead to another bracket",
|
||||
"lfg.askCaptainToJoinQueue": "Ask your team's captain or a manager to join the queue"
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Listas de Equipos",
|
||||
"tabs.results": "Resultados",
|
||||
"tabs.streams": "Streams ({{count}})",
|
||||
"tabs.subs": "Subs ({{count}})",
|
||||
"tabs.subs": "Subs",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Completa estos pasos para jugar",
|
||||
"pre.steps.name": "Nombre de equipo",
|
||||
@@ -152,5 +152,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "La progresión negativa solo es posible en eliminación doble",
|
||||
"progression.error.NO_SE_SOURCE": "La eliminación simple no es un cuadro de origen válido",
|
||||
"progression.error.NO_DE_POSITIVE": "La eliminación doble no es válida para progresión positiva",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "El cuadro suizo con avance/eliminación anticipada debe llevar a otro cuadro"
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "El cuadro suizo con avance/eliminación anticipada debe llevar a otro cuadro",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Listas de Equipos",
|
||||
"tabs.results": "",
|
||||
"tabs.streams": "Streams ({{count}})",
|
||||
"tabs.subs": "Subs ({{count}})",
|
||||
"tabs.subs": "Subs",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Completa estos pasos para jugar",
|
||||
"pre.steps.name": "Nombre de equipo",
|
||||
@@ -152,5 +152,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Seeds",
|
||||
"tabs.results": "",
|
||||
"tabs.streams": "Diffusions ({{count}})",
|
||||
"tabs.subs": "Remplaçants ({{count}})",
|
||||
"tabs.subs": "Remplaçants",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Complétez ces étapes pour jouer",
|
||||
"pre.steps.name": "Nom de l'équipe",
|
||||
@@ -152,5 +152,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Seeds",
|
||||
"tabs.results": "Resultats",
|
||||
"tabs.streams": "Diffusions ({{count}})",
|
||||
"tabs.subs": "Remplaçants ({{count}})",
|
||||
"tabs.subs": "Remplaçants",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Complétez ces étapes pour jouer",
|
||||
"pre.steps.name": "Nom de l'équipe",
|
||||
@@ -152,5 +152,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "Negative progression only possible for double elimination",
|
||||
"progression.error.NO_SE_SOURCE": "Single elimination is not a valid source bracket",
|
||||
"progression.error.NO_DE_POSITIVE": "Double elimination is not valid for positive progression",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "דירוג",
|
||||
"tabs.results": "",
|
||||
"tabs.streams": "שידורים חיים ({{count}})",
|
||||
"tabs.subs": "מחליפים ({{count}})",
|
||||
"tabs.subs": "מחליפים",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "השלימו את השלבים הבאים כדי לשחק",
|
||||
"pre.steps.name": "שם קבוצה",
|
||||
@@ -152,5 +152,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Seed",
|
||||
"tabs.results": "Resultati",
|
||||
"tabs.streams": "Stream ({{count}})",
|
||||
"tabs.subs": "Sub ({{count}})",
|
||||
"tabs.subs": "Sub",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Completa questi passaggi per giocare",
|
||||
"pre.steps.name": "Nome team",
|
||||
@@ -152,5 +152,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "La progressione negativa è disponibile solo in doppia eliminazione",
|
||||
"progression.error.NO_SE_SOURCE": "Eliminazione singola non è un bracket sorgente valido",
|
||||
"progression.error.NO_DE_POSITIVE": "Doppia eliminazione non è valida per progressione positiva",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "シード",
|
||||
"tabs.results": "結果",
|
||||
"tabs.streams": "配信 ({{count}})",
|
||||
"tabs.subs": "サブ ({{count}})",
|
||||
"tabs.subs": "サブ",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "トーナメント参加のために下記を入力してください",
|
||||
"pre.steps.name": "チーム名",
|
||||
@@ -146,5 +146,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "逆の進行はダブルエリ三ネーションの時のみ可能です",
|
||||
"progression.error.NO_SE_SOURCE": "シングルエリ三ネーションは妥当なブラケットではないです",
|
||||
"progression.error.NO_DE_POSITIVE": "ダブルエリミネーションは普通の進行(前向き)では妥当ではないです",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -146,5 +146,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -150,5 +150,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -154,5 +154,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Sementes",
|
||||
"tabs.results": "",
|
||||
"tabs.streams": "Transmissões ({{count}})",
|
||||
"tabs.subs": "Inscritos ({{count}})",
|
||||
"tabs.subs": "Inscritos",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Complete esses passos para jogar",
|
||||
"pre.steps.name": "Nome do time",
|
||||
@@ -152,5 +152,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "Семена",
|
||||
"tabs.results": "Результаты",
|
||||
"tabs.streams": "Трансляции: ({{count}})",
|
||||
"tabs.subs": "Запасные: ({{count}})",
|
||||
"tabs.subs": "Запасные",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "Завершите следующие шаги, чтобы закончить регистрацию",
|
||||
"pre.steps.name": "Имя команды",
|
||||
@@ -154,5 +154,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "Отрицательная прогрессия возможна только в Double Elimination турнирах",
|
||||
"progression.error.NO_SE_SOURCE": "Single elimination не валидная сетка-исток",
|
||||
"progression.error.NO_DE_POSITIVE": "Double elimination не валидно для позитивной прогрессии",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"tabs.seeds": "种子",
|
||||
"tabs.results": "",
|
||||
"tabs.streams": "直播 ({{count}})",
|
||||
"tabs.subs": "替补 ({{count}})",
|
||||
"tabs.subs": "替补",
|
||||
"tabs.looking": "",
|
||||
"pre.steps.header": "参加比赛需完成以下步骤",
|
||||
"pre.steps.name": "队伍名称",
|
||||
@@ -146,5 +146,6 @@
|
||||
"progression.error.NEGATIVE_PROGRESSION": "",
|
||||
"progression.error.NO_SE_SOURCE": "",
|
||||
"progression.error.NO_DE_POSITIVE": "",
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": ""
|
||||
"progression.error.SWISS_EARLY_ADVANCE_NO_DESTINATION": "",
|
||||
"lfg.askCaptainToJoinQueue": ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user