diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 16d35b7..9cef609 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -9,6 +9,7 @@ let gameId = $state(null); let filterGenre = $state(""); let filterYear = $state(""); + let uploadTriggered = $state(0); function parseHash() { const hash = window.location.hash.slice(1) || "/"; @@ -42,11 +43,11 @@ }); -
+
uploadTriggered++} />
{#if route === "/"} - + {:else if route === "/game" && gameId} {:else if route === "/play" && gameId} diff --git a/frontend/src/lib/Header.svelte b/frontend/src/lib/Header.svelte index cc333d2..a6840c3 100644 --- a/frontend/src/lib/Header.svelte +++ b/frontend/src/lib/Header.svelte @@ -1,10 +1,10 @@
diff --git a/frontend/src/pages/Library.svelte b/frontend/src/pages/Library.svelte index 6fe488e..372232b 100644 --- a/frontend/src/pages/Library.svelte +++ b/frontend/src/pages/Library.svelte @@ -2,7 +2,7 @@ import { listGames, uploadGame, searchIGDB } from "../lib/api.js"; import GameCard from "../lib/GameCard.svelte"; - let { genreFilter = "", yearFilter = "" } = $props(); + let { genreFilter = "", yearFilter = "", uploadTriggered = 0 } = $props(); let games = $state([]); let loading = $state(true); @@ -28,6 +28,11 @@ let fileInput; + // When header upload button is clicked, trigger the hidden file input + $effect(() => { + if (uploadTriggered > 0) fileInput?.click(); + }); + // Derive filter options from the loaded games let filterOptions = $derived.by(() => { const years = {}; @@ -47,7 +52,7 @@ .sort((a, b) => Number(b.label) - Number(a.label)), genres: Object.entries(genres) .map(([label, count]) => ({ label, count })) - .sort((a, b) => a.label.localeCompare(b.label)), + .sort((a, b) => b.count - a.count), }; }); @@ -201,12 +206,21 @@