From 10221812a8db52246194daddbd99d5b566b7a6a7 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Wed, 17 Jul 2024 22:07:07 +0100 Subject: [PATCH] feat(#46): Merge boxes view into my dex page --- .../components/pokedex/PokedexSidebar.svelte | 13 ++ .../pokedex/PokedexViewBoxes.svelte | 2 +- src/routes/+layout.svelte | 3 - src/routes/mydex/+page.svelte | 162 +++++++++++---- src/routes/mydex/boxes/+page.svelte | 185 ------------------ 5 files changed, 142 insertions(+), 223 deletions(-) delete mode 100644 src/routes/mydex/boxes/+page.svelte diff --git a/src/lib/components/pokedex/PokedexSidebar.svelte b/src/lib/components/pokedex/PokedexSidebar.svelte index e822789..48534ae 100644 --- a/src/lib/components/pokedex/PokedexSidebar.svelte +++ b/src/lib/components/pokedex/PokedexSidebar.svelte @@ -1,4 +1,10 @@ @@ -174,21 +245,44 @@ > {drawerOpen ? 'Close Filters' : 'Open Filters'} - + + {#if viewAsBoxes} + + {:else} + + {/if}
- import { onMount, onDestroy } from 'svelte'; - import { user } from '$lib/stores/user.js'; - import { type User } from '@supabase/auth-js'; - import { type CatchRecord } from '$lib/models/CatchRecord'; - import { type CombinedData } from '$lib/models/CombinedData'; - import type { PokedexEntry } from '$lib/models/PokedexEntry'; - import PokedexSidebar from '$lib/components/pokedex/PokedexSidebar.svelte'; - import PokedexViewBoxes from '$lib/components/pokedex/PokedexViewBoxes.svelte'; - - let combinedData = null as CombinedData[] | null; - let failedToLoad = false; - - let localUser: User | null; - const unsubscribe = user.subscribe((value) => { - localUser = value; - }); - onDestroy(unsubscribe); - - let showOrigins = true; - let showForms = true; - let drawerOpen = false; - let catchRegion = ''; - let catchGame = ''; - let creatingRecords = false; - - function toggleOrigins() { - showOrigins = !showOrigins; - } - - async function toggleForms() { - showForms = !showForms; - await getData(); - } - - let showShiny = false; - let currentPlacement = 'boxPlacementForms'; - let boxNumbers = Array; - - async function toggleShiny() { - showShiny = !showShiny; - if (showShiny) { - showForms = false; - } - - await getData(); - } - - async function getData(setCombinedDataToNull = true) { - if (setCombinedDataToNull) { - combinedData = null; - } - - const response = await fetch( - `/api/combined-data/all?enableForms=${showForms}®ion=${catchRegion}&game=${catchGame}` - ); - const data = await response.json(); - - if (data.error) { - failedToLoad = true; - return; - } - - combinedData = data; - boxNumbers = [ - ...new Set(combinedData.map(({ pokedexEntry }) => pokedexEntry[currentPlacement].box)) - ].filter(Boolean); - } - - onMount(async () => { - await getData(); - }); - - $: currentPlacement = showForms ? 'boxPlacementForms' : 'boxPlacement'; - - async function updateCatchRecords( - boxNumber: number, - caught: boolean, - needsToEvolve: boolean, - inHome: boolean | null = null - ) { - let catchRecordsToUpdate = combinedData - .filter(({ pokedexEntry }) => pokedexEntry[currentPlacement].box === boxNumber) - .map(({ catchRecord }) => { - // Create the base object with existing properties - let updatedRecord = { ...catchRecord }; - - if (inHome !== null) { - updatedRecord = { - ...updatedRecord, - inHome - }; - } else { - updatedRecord = { - ...updatedRecord, - caught, - haveToEvolve: needsToEvolve - }; - } - - return updatedRecord; - }); - - await fetch('/api/catch-records', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(catchRecordsToUpdate) - }).then(async () => { - // TODO - Notify the user that data is being updated - await getData(false); - // TODO - Remove the notification - }); - } - - async function markBoxAsNotCaught(boxNumber: number) { - await updateCatchRecords(boxNumber, false, false); - } - - async function markBoxAsCaught(boxNumber: number) { - await updateCatchRecords(boxNumber, true, false); - } - - async function markBoxAsNeedsToEvolve(boxNumber: number) { - await updateCatchRecords(boxNumber, false, true); - } - - async function markBoxAsInHome(boxNumber: number) { - await updateCatchRecords(boxNumber, false, false, true); - } - - async function markBoxAsNotInHome(boxNumber: number) { - await updateCatchRecords(boxNumber, false, false, false); - } - - - - Living Dex Tracker - My Boxes - - - - -{#if !localUser} -

Please sign in

-{:else} -
- -
- - -
-
- - -
-
-{/if}