From eda3f7b7b9dda229e79d4efba8ef18043c70fa8a Mon Sep 17 00:00:00 2001 From: Pandipipas <62224708+Pandipipas@users.noreply.github.com> Date: Mon, 16 Feb 2026 01:24:32 +0100 Subject: [PATCH] Make start.gg imports always temporary and switch to tournament select --- src/dashboard/scoreko-dev/views/Players.vue | 127 ++++++++++++++------ 1 file changed, 91 insertions(+), 36 deletions(-) diff --git a/src/dashboard/scoreko-dev/views/Players.vue b/src/dashboard/scoreko-dev/views/Players.vue index b04c50f..3ed16ed 100644 --- a/src/dashboard/scoreko-dev/views/Players.vue +++ b/src/dashboard/scoreko-dev/views/Players.vue @@ -106,7 +106,8 @@ const loadingTournamentPlayers = ref(false); const selectedTournament = ref(null); const startGGPlayers = ref([]); const selectedStartGGPlayerIds = ref([]); -const importAsTemporary = ref(true); +const selectedTournamentSlug = ref(''); +const tournamentInput = ref(''); const temporaryStartGGPlayers = ref({}); let temporaryCleanupTimer: ReturnType | null = null; @@ -169,6 +170,41 @@ const loadTemporaryStartGGPlayers = (): TemporaryStartGGPlayersMap => { } }; +const tournamentOptions = computed(() => + recentTournaments.value.map((tournament) => ({ + label: tournament.name, + value: tournament.slug, + caption: tournament.slug, + })), +); +const filteredTournamentOptions = ref(tournamentOptions.value); + +watch(tournamentOptions, (value) => { + filteredTournamentOptions.value = value; + if (selectedTournamentSlug.value && !recentTournaments.value.some((item) => item.slug === selectedTournamentSlug.value)) { + selectedTournamentSlug.value = ''; + tournamentInput.value = ''; + } +}); + +const selectedTournamentOption = computed(() => + recentTournaments.value.find((item) => item.slug === selectedTournamentSlug.value) ?? null, +); + +const filterTournaments = (value: string, update: (callback: () => void) => void) => { + update(() => { + const needle = value.toLowerCase().trim(); + if (!needle) { + filteredTournamentOptions.value = tournamentOptions.value; + return; + } + + filteredTournamentOptions.value = tournamentOptions.value.filter((option) => + option.label.toLowerCase().includes(needle) || option.caption.toLowerCase().includes(needle), + ); + }); +}; + const sendNodeCGMessage = (messageName: string, payload: unknown): Promise => new Promise((resolve, reject) => { nodecg.sendMessage(messageName, payload, (error, response) => { @@ -298,7 +334,8 @@ const openStartGGImportDialog = async (tournament: StartGGTournament) => { isImportDialogOpen.value = true; loadingTournamentPlayers.value = true; selectedStartGGPlayerIds.value = []; - importAsTemporary.value = true; + selectedTournamentSlug.value = tournament.slug; + tournamentInput.value = tournament.name; startGGPlayers.value = []; try { @@ -317,6 +354,14 @@ const openStartGGImportDialog = async (tournament: StartGGTournament) => { } }; + +const openSelectedTournamentImportDialog = () => { + if (!selectedTournamentOption.value) { + return; + } + void openStartGGImportDialog(selectedTournamentOption.value); +}; + const importSelectedStartGGPlayers = () => { const selectedPlayers = startGGPlayers.value.filter((player) => selectedStartGGPlayerIds.value.includes(player.id), @@ -336,14 +381,12 @@ const importSelectedStartGGPlayers = () => { twitter: player.twitter, }); - if (importAsTemporary.value && tournament) { + if (tournament) { nextMeta[player.id] = { expiresAt, tournamentSlug: tournament.slug, tournamentName: tournament.name, }; - } else { - delete nextMeta[player.id]; } }); @@ -566,33 +609,50 @@ onBeforeUnmount(() => { > {{ tournamentsError }} - - +
+ + + +
+
- - {{ tournament.name }} - - {{ tournament.slug }} - - - - - - - + +
+ @@ -614,11 +674,6 @@ onBeforeUnmount(() => { Cargando inscritos...
-