diff --git a/app/features/vods/routes/vods.$id.tsx b/app/features/vods/routes/vods.$id.tsx index c64082c97..49328e205 100644 --- a/app/features/vods/routes/vods.$id.tsx +++ b/app/features/vods/routes/vods.$id.tsx @@ -169,7 +169,9 @@ function Match({ const { t } = useTranslation(["game-misc", "weapons"]); const weapon = match.weapons.length === 1 ? match.weapons[0] : null; - const weapons = match.weapons.length === 8 ? match.weapons : null; + const weapons = match.weapons.length > 1 ? match.weapons : null; + + const teamSize = weapons ? weapons.length / 2 : 0; return (
@@ -198,7 +200,7 @@ function Match({ {weapons ? (
- {weapons.slice(0, 4).map((weapon, i) => { + {weapons.slice(0, teamSize).map((weapon, i) => { return (
- {weapons.slice(4).map((weapon, i) => { - const adjustedI = i + 4; + {weapons.slice(teamSize).map((weapon, i) => { + const adjustedI = i + teamSize; return ( - {videoType !== "CAST" ? : null} + {videoType === "CAST" ? : } ); } +function TeamSizeField() { + const { t } = useTranslation(["vods"]); + const { setValue } = useFormContext(); + const matches = useWatch({ + name: "video.matches", + }) as VodFormFields["video"]["matches"]; + + return ( + ().control} + name="video.teamSize" + render={({ field: { onChange, value } }) => { + return ( +
+ + +
+ ); + }} + /> + ); +} + function PovFormField() { const { t } = useTranslation(["vods", "calendar"]); const methods = useFormContext(); @@ -244,7 +294,12 @@ function MatchesFormfield({ })} { - append({ mode: "SZ", stageId: 1, startsAt: "", weapons: [] }); + append({ + mode: "SZ", + stageId: 1, + startsAt: "", + weapons: [], + }); }} /> {rootError && ( @@ -304,26 +359,66 @@ function MatchesFieldset({ />
- ().control} - name={`video.matches.${idx}.weapons`} - render={({ field: { onChange, value } }) => { - return ( -
- {videoType === "CAST" ? ( -
- + +
+ ); +} + +function WeaponsField({ + idx, + videoType, +}: { + idx: number; + videoType: Tables["Video"]["type"]; +}) { + const { t } = useTranslation(["vods"]); + const watchedTeamSize = useWatch({ + name: "video.teamSize", + }); + const teamSize = typeof watchedTeamSize === "number" ? watchedTeamSize : 4; + + return ( + ().control} + name={`video.matches.${idx}.weapons`} + render={({ field: { onChange, value } }) => { + return ( +
+ {videoType === "CAST" ? ( +
+ +
+ {new Array(teamSize).fill(null).map((_, i) => { + return ( + { + const weapons = [...value]; + weapons[i] = weaponId; + + onChange(weapons); + }} + /> + ); + })} +
+
+
- {new Array(4).fill(null).map((_, i) => { + {new Array(teamSize).fill(null).map((_, i) => { + const adjustedI = i + teamSize; return ( { const weapons = [...value]; - weapons[i] = weaponId; + weapons[adjustedI] = weaponId; onChange(weapons); }} @@ -331,44 +426,20 @@ function MatchesFieldset({ ); })}
-
- -
- {new Array(4).fill(null).map((_, i) => { - const adjustedI = i + 4; - return ( - { - const weapons = [...value]; - weapons[adjustedI] = weaponId; - - onChange(weapons); - }} - /> - ); - })} -
-
- ) : ( - onChange([weaponId])} - /> - )} -
- ); - }} - /> -
+
+ ) : ( + onChange([weaponId])} + /> + )} +
+ ); + }} + /> ); } diff --git a/app/features/vods/vods-schemas.ts b/app/features/vods/vods-schemas.ts index 6f109ebf6..a5d7cf001 100644 --- a/app/features/vods/vods-schemas.ts +++ b/app/features/vods/vods-schemas.ts @@ -63,24 +63,18 @@ export const videoSchema = z.preprocess( }), ]) .optional(), + teamSize: z.number().int().min(1).max(4).optional(), matches: z.array(videoMatchSchema), }) .refine((data) => { - if ( - data.type === "CAST" && - data.matches.some((match) => match.weapons.length !== 8) - ) { - return false; + if (data.type === "CAST") { + const teamSize = data.teamSize ?? 4; + return data.matches.every( + (match) => match.weapons.length === teamSize * 2, + ); } - if ( - data.type !== "CAST" && - data.matches.some((match) => match.weapons.length !== 1) - ) { - return false; - } - - return true; + return data.matches.every((match) => match.weapons.length === 1); }), ); diff --git a/locales/da/faq.json b/locales/da/faq.json index 9e2e66d4a..050381a9d 100644 --- a/locales/da/faq.json +++ b/locales/da/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "Hvordan kan jeg uploade kunst, som jeg har bestilt", "a9": "Du kan kun uploade kunst, som du selv har lavet. Det skal også være Splatoon-relateret. For bestilte kunstværker, så henvend dig til kunstneren, så De kan uploade det til hjemmesiden. De kan også knytte kunstværket til din profil, så det bliver vist på din profil", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/da/vods.json b/locales/da/vods.json index 6705a86f9..7003e7f65 100644 --- a/locales/da/vods.json +++ b/locales/da/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Våben (Hold 1)", "forms.title.weaponsTeamTwo": "Våben (Hold 2)", "forms.title.weapon": "Våben", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Tilføj kamp", "forms.action.deleteMatch": "Slet kamp", "noVods": "", diff --git a/locales/de/faq.json b/locales/de/faq.json index 733d07c5f..9f5466952 100644 --- a/locales/de/faq.json +++ b/locales/de/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "", "a9": "", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/de/vods.json b/locales/de/vods.json index 2ec2a4e7d..31e5da20b 100644 --- a/locales/de/vods.json +++ b/locales/de/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Waffen (Team 1)", "forms.title.weaponsTeamTwo": "Waffem (Team 2)", "forms.title.weapon": "Waffe", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Match hinzufügen", "forms.action.deleteMatch": "Match löschen", "noVods": "", diff --git a/locales/en/vods.json b/locales/en/vods.json index 967df2f2d..19b897115 100644 --- a/locales/en/vods.json +++ b/locales/en/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Weapons (Team 1)", "forms.title.weaponsTeamTwo": "Weapons (Team 2)", "forms.title.weapon": "Weapon", + "forms.title.teamSize": "Team Size", + "teamSize.1v1": "1v1", + "teamSize.2v2": "2v2", + "teamSize.3v3": "3v3", + "teamSize.4v4": "4v4", "forms.action.addMatch": "Add match", "forms.action.deleteMatch": "Delete match", "noVods": "No videos found matching this filter. Are we missing something? See the FAQ page on information about how to gain VoD uploading permissions.", diff --git a/locales/es-ES/faq.json b/locales/es-ES/faq.json index 9b481eac8..583b816bd 100644 --- a/locales/es-ES/faq.json +++ b/locales/es-ES/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "¿Cómo puedo subir arte que he comisionado?", "a9": "Solo puedes agregar arte que tú has creado. También tiene que tener relación con Splatoon. Para piezas comisionadas, por favor pide al artista que suba el arte. El artista puede enlazar tu perfil y así se podrá mostrar en tu perfil.", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/es-ES/vods.json b/locales/es-ES/vods.json index 852234346..690786278 100644 --- a/locales/es-ES/vods.json +++ b/locales/es-ES/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Armas (Equipo 1)", "forms.title.weaponsTeamTwo": "Armas (Equipo 2)", "forms.title.weapon": "Arma", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Agregar partido", "forms.action.deleteMatch": "Borrar partido", "noVods": "", diff --git a/locales/es-US/faq.json b/locales/es-US/faq.json index 9b481eac8..583b816bd 100644 --- a/locales/es-US/faq.json +++ b/locales/es-US/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "¿Cómo puedo subir arte que he comisionado?", "a9": "Solo puedes agregar arte que tú has creado. También tiene que tener relación con Splatoon. Para piezas comisionadas, por favor pide al artista que suba el arte. El artista puede enlazar tu perfil y así se podrá mostrar en tu perfil.", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/es-US/vods.json b/locales/es-US/vods.json index c2bdf8953..47c8f62f0 100644 --- a/locales/es-US/vods.json +++ b/locales/es-US/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Armas (Equipo 1)", "forms.title.weaponsTeamTwo": "Armas (Equipo 2)", "forms.title.weapon": "Arma", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Agregar partido", "forms.action.deleteMatch": "Borrar partido", "noVods": "", diff --git a/locales/fr-CA/faq.json b/locales/fr-CA/faq.json index 5146c448f..082786203 100644 --- a/locales/fr-CA/faq.json +++ b/locales/fr-CA/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "", "a9": "", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/fr-CA/vods.json b/locales/fr-CA/vods.json index ff7130312..473f51cd0 100644 --- a/locales/fr-CA/vods.json +++ b/locales/fr-CA/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Armes (Équipe 1)", "forms.title.weaponsTeamTwo": "Armes (Équipe 2)", "forms.title.weapon": "Arme", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Ajouter un match", "forms.action.deleteMatch": "Effacer un match", "noVods": "", diff --git a/locales/fr-EU/faq.json b/locales/fr-EU/faq.json index 8788a0a49..c89711b1e 100644 --- a/locales/fr-EU/faq.json +++ b/locales/fr-EU/faq.json @@ -17,6 +17,6 @@ "a8": "Trouvez votre page de joueur depuis la page Top 500. Postez le lien vers le channel helpdesk sur notre Discord en indiquant que vous souhaitez qu'il soit lié. Note: Le lien n'est pas possible si vous n'avez pas terminé une saison dans le Top 500.", "q9": "Comment puis-je publier une œuvre que j'ai commandé ?", "a9": "Vous pouvez seulement publier une œuvre que vous avez réalisé. Il doit également y avoir un rapport avec Splatoon. Veuillez demander à l’artiste de la télécharger lui-même sur le site pour une œuvre commandée. Ils sont capables de lier votre profil d'utilisateur à leur œuvre et cela la fera apparaître sur votre profil.", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/fr-EU/vods.json b/locales/fr-EU/vods.json index a90eb3344..ea8305917 100644 --- a/locales/fr-EU/vods.json +++ b/locales/fr-EU/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Armes (Équipe 1)", "forms.title.weaponsTeamTwo": "Armes (Équipe 2)", "forms.title.weapon": "Arme", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Ajouter un match", "forms.action.deleteMatch": "Effacer un match", "noVods": "Aucune vidéo a été trouvé. Est-ce qu'il nous manque quelque chose ? Consultez la page FAQ pour savoir comment obtenir les autorisations de téléchargement VoD.", diff --git a/locales/he/faq.json b/locales/he/faq.json index 0d6b5ea3f..407f1ef09 100644 --- a/locales/he/faq.json +++ b/locales/he/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "איך אני יכול להעלות ציור שאני ביקשתי?", "a9": "ניתן להעלות ציור שהכנת בעצמך. הוא צריך להיות קשור ל-Splatoon. בשביל עבודה שביקשת נא לבקש מהאומן להעלות את הציור בכוחות עצמם לאתר. הם יכולים לקשר את הפרופיל שלך מה שיגרום לו להופיע שם.", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/he/vods.json b/locales/he/vods.json index d6b8bb879..79fdc091d 100644 --- a/locales/he/vods.json +++ b/locales/he/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "נשקים (צוות 1)", "forms.title.weaponsTeamTwo": "נשקים (צוות 2)", "forms.title.weapon": "נשקים", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "הוספת קרב", "forms.action.deleteMatch": "מחיקת קרב", "noVods": "", diff --git a/locales/it/faq.json b/locales/it/faq.json index 3b985186d..ee674a9ec 100644 --- a/locales/it/faq.json +++ b/locales/it/faq.json @@ -17,6 +17,6 @@ "a8": "Cerca la tua pagina profilo sulla pagina Ricerca Top. Posta il link sull'helpdesk nel nostro Discord dicendo di volerla associata. L'associazione non è possibile se non hai concluso una stagione in Top 500.", "q9": "Come faccio a caricare un'opera che ho commissionato?", "a9": "Puoi caricare solo art che hai creato tu stesso/a. Deve anche essere relativa a Splatoon. Per opere commissionate, si prega di chiedere all'artista originale di caricarle. Possono collegare il tuo profilo e fare in modo che esse vengano mostrate lì.", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/it/vods.json b/locales/it/vods.json index 8c54c3f9c..cefb46976 100644 --- a/locales/it/vods.json +++ b/locales/it/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Armi (Squadra 1)", "forms.title.weaponsTeamTwo": "Armi (Squadra 2)", "forms.title.weapon": "Arma", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Aggiungi partita", "forms.action.deleteMatch": "Elimina partita", "noVods": "Nessun video trovato con questo filtro. Ci stiamo dimenticando di qualcosa? Consulta il FAQ per informazioni su come ottenere il permesso per caricare VoD", diff --git a/locales/ja/faq.json b/locales/ja/faq.json index 78f4d191a..13f96fe7b 100644 --- a/locales/ja/faq.json +++ b/locales/ja/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "依頼した作品はどうやってアップロードできますか?", "a9": "自分で作った作品のみアップロードできます(もちろんスプラトゥーン関連でないといけません)。依頼した作品の場合はその作品の作者からアップロードするように伝えてください。そうすることによって自分のプロファイルに作品が表示されます。", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/ja/vods.json b/locales/ja/vods.json index d7a5f7ae0..369abeedb 100644 --- a/locales/ja/vods.json +++ b/locales/ja/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "ブキ (チーム 1)", "forms.title.weaponsTeamTwo": "ブキ (チーム 2)", "forms.title.weapon": "ブキ", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "対戦を追加", "forms.action.deleteMatch": "対戦を削除", "noVods": "", diff --git a/locales/ko/faq.json b/locales/ko/faq.json index 7d5876821..e6dde4635 100644 --- a/locales/ko/faq.json +++ b/locales/ko/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "", "a9": "", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/ko/vods.json b/locales/ko/vods.json index fdc490c72..064934309 100644 --- a/locales/ko/vods.json +++ b/locales/ko/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "", "forms.title.weaponsTeamTwo": "", "forms.title.weapon": "", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "", "forms.action.deleteMatch": "", "noVods": "", diff --git a/locales/nl/faq.json b/locales/nl/faq.json index d5bf38ba0..61f67534b 100644 --- a/locales/nl/faq.json +++ b/locales/nl/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "", "a9": "", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/nl/vods.json b/locales/nl/vods.json index fdc490c72..064934309 100644 --- a/locales/nl/vods.json +++ b/locales/nl/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "", "forms.title.weaponsTeamTwo": "", "forms.title.weapon": "", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "", "forms.action.deleteMatch": "", "noVods": "", diff --git a/locales/pl/faq.json b/locales/pl/faq.json index 680d36cb3..14b597689 100644 --- a/locales/pl/faq.json +++ b/locales/pl/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "", "a9": "", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/pl/vods.json b/locales/pl/vods.json index fdc490c72..064934309 100644 --- a/locales/pl/vods.json +++ b/locales/pl/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "", "forms.title.weaponsTeamTwo": "", "forms.title.weapon": "", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "", "forms.action.deleteMatch": "", "noVods": "", diff --git a/locales/pt-BR/faq.json b/locales/pt-BR/faq.json index 6efeb904b..f9eef693e 100644 --- a/locales/pt-BR/faq.json +++ b/locales/pt-BR/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "Como posso fazer o upload de uma arte da qual fiz a comissão?", "a9": "Você só pode fazer upload de arte que você mesmo(a) fez. Ela também tem que ser relacionada ao Splatoon. Para trabalhos comissionados, por favor peça o artista para fazer o upload no site. Eles são capazes de conectar a arte ao seu perfil de usuário e isso fará que ela apareça no seu perfil.", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/pt-BR/vods.json b/locales/pt-BR/vods.json index c5f403d0a..7fef0b49a 100644 --- a/locales/pt-BR/vods.json +++ b/locales/pt-BR/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Armas (Time 1)", "forms.title.weaponsTeamTwo": "Armas (Time 2)", "forms.title.weapon": "Arma", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Adicionar partida", "forms.action.deleteMatch": "Excluir partida", "noVods": "", diff --git a/locales/ru/faq.json b/locales/ru/faq.json index 68574bc5c..4d0670842 100644 --- a/locales/ru/faq.json +++ b/locales/ru/faq.json @@ -17,6 +17,6 @@ "a8": "Найдите вашу пользовательскую страницу в секции Топ по режиму. Отправьте сообщение в helpdesk канал на Discord сервере sendou.ink с просьбой привязать эту ссылку к вашему профилю. Обратите внимание, что это можно сделать только если вы закончили сезон в Топ 500.", "q9": "Как разместить арт, который я заказал?", "a9": "Вы можете разместить только арт, созданный непосредственно вами. Он также должен быть по тематике Splatoon. Для артов по заказу попросите художника-автора загрузить их на свою страницу. После того, как художник загрузит работу и отметит вас в ней, арт появится на вашем профиле.", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/ru/vods.json b/locales/ru/vods.json index 67cb395ed..13bb56937 100644 --- a/locales/ru/vods.json +++ b/locales/ru/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "Оружие (Команда 1)", "forms.title.weaponsTeamTwo": "Оружие (Команда 2)", "forms.title.weapon": "Оружие", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "Добавить матч", "forms.action.deleteMatch": "Удалить матч", "noVods": "Видео, совпадающие с фильтрами, не найдены. Может, мы что-то упустили? Посмотрите страницу FAQ с информацией о получении прав на загрузку VoD.", diff --git a/locales/zh/faq.json b/locales/zh/faq.json index ef8015567..e3c20f6c3 100644 --- a/locales/zh/faq.json +++ b/locales/zh/faq.json @@ -17,6 +17,6 @@ "a8": "", "q9": "我应该如何上传委托他人创作的艺术作品?", "a9": "您只能上传您自己创作的艺术作品。并且需要与斯普拉遁相关。对于委托他人创作的作品,请联系作者亲自上传。他们可以将作品链接到您的个人信息,并展示在您的个人信息页。", - "q10:": "", + "q10": "", "a10": "" } diff --git a/locales/zh/vods.json b/locales/zh/vods.json index 9fc7be025..43fbc8eff 100644 --- a/locales/zh/vods.json +++ b/locales/zh/vods.json @@ -20,6 +20,11 @@ "forms.title.weaponsTeamOne": "武器编成(队伍1)", "forms.title.weaponsTeamTwo": "武器编成(队伍2)", "forms.title.weapon": "武器", + "forms.title.teamSize": "", + "teamSize.1v1": "", + "teamSize.2v2": "", + "teamSize.3v3": "", + "teamSize.4v4": "", "forms.action.addMatch": "添加比赛", "forms.action.deleteMatch": "删除比赛", "noVods": "",