diff --git a/frontend/src/v2/components/GameDetails/SaveDataTab.vue b/frontend/src/v2/components/GameDetails/SaveDataTab.vue index 79b860e56..a6c1d2447 100644 --- a/frontend/src/v2/components/GameDetails/SaveDataTab.vue +++ b/frontend/src/v2/components/GameDetails/SaveDataTab.vue @@ -9,7 +9,7 @@ // URL-persistent subtab selection via `?subtab=` so deep-linking // into a specific list works and stale state doesn't leak when the // user navigates to a sibling tab. -import { RBtn, RCollapsible, REmptyState, RIcon } from "@v2/lib"; +import { RBtn, RCollapsible, RDropzone, RIcon } from "@v2/lib"; import axios from "axios"; import { computed, ref, watch } from "vue"; import { useI18n } from "vue-i18n"; @@ -92,8 +92,11 @@ function hasSubtabActions(id: Subtab): boolean { } // ---------- Upload / refresh plumbing ---------- -const saveUploadInput = ref(null); -const stateUploadInput = ref(null); +// Overlay-mode dropzone refs so the action-panel "Upload" buttons can open +// the native picker via `.open()`; the empty-state CTA dropzones are +// self-contained (click-to-browse + drag-and-drop). +const saveDz = ref | null>(null); +const stateDz = ref | null>(null); const uploadingSaves = ref(false); const uploadingStates = ref(false); @@ -120,17 +123,7 @@ async function refreshRom() { } } -function triggerSaveUpload() { - saveUploadInput.value?.click(); -} -function triggerStateUpload() { - stateUploadInput.value?.click(); -} - -async function onSaveUpload(event: Event) { - const input = event.target as HTMLInputElement; - const files = input.files ? Array.from(input.files) : []; - input.value = ""; +async function onSaveUpload(files: File[]) { if (files.length === 0 || uploadingSaves.value) return; uploadingSaves.value = true; @@ -164,10 +157,7 @@ async function onSaveUpload(event: Event) { } } -async function onStateUpload(event: Event) { - const input = event.target as HTMLInputElement; - const files = input.files ? Array.from(input.files) : []; - input.value = ""; +async function onStateUpload(files: File[]) { if (files.length === 0 || uploadingStates.value) return; uploadingStates.value = true; @@ -259,24 +249,6 @@ function fmtDate(iso: string | null) {