diff --git a/frontend/src/lib/components/AdventureCard.svelte b/frontend/src/lib/components/AdventureCard.svelte index 4afacb7..b230b28 100644 --- a/frontend/src/lib/components/AdventureCard.svelte +++ b/frontend/src/lib/components/AdventureCard.svelte @@ -83,6 +83,7 @@ }); if (res.ok) { console.log('Adventure type changed'); + dispatch('typeChange', adventure.id); addToast('info', 'Adventure type changed successfully!'); adventure.type = newType; } else { diff --git a/frontend/src/routes/collections/[id]/+page.svelte b/frontend/src/routes/collections/[id]/+page.svelte index 498c38c..cc8500d 100644 --- a/frontend/src/routes/collections/[id]/+page.svelte +++ b/frontend/src/routes/collections/[id]/+page.svelte @@ -9,13 +9,18 @@ import AdventureCard from '$lib/components/AdventureCard.svelte'; import AdventureLink from '$lib/components/AdventureLink.svelte'; import EditAdventure from '$lib/components/EditAdventure.svelte'; + import NotFound from '$lib/components/NotFound.svelte'; export let data: PageData; let collection: Collection; let adventures: Adventure[] = []; - let numVisited: number = adventures.filter((a) => a.type == 'visited').length; + let numVisited: number = 0; + + $: { + numVisited = adventures.filter((a) => a.type === 'visited').length; + } let notFound: boolean = false; let isShowingCreateModal: boolean = false; @@ -56,6 +61,19 @@ } } + function changeType(event: CustomEvent) { + adventures = adventures.map((adventure) => { + if (adventure.id == event.detail) { + if (adventure.type == 'visited') { + adventure.type = 'planned'; + } else { + adventure.type = 'visited'; + } + } + return adventure; + }); + } + let adventureToEdit: Adventure; let isEditModalOpen: boolean = false; @@ -157,7 +175,7 @@
-
Region Stats
+
Collection Stats
{numVisited}/{adventures.length} Visited
{#if numVisited === adventures.length}
You've completed this collection! 🎉!
@@ -169,6 +187,9 @@
{/if}

Linked Adventures

+ {#if adventures.length == 0} + + {/if}
{#each adventures as adventure} {/each}
diff --git a/frontend/src/routes/map/+page.server.ts b/frontend/src/routes/map/+page.server.ts index 2465952..48a1625 100644 --- a/frontend/src/routes/map/+page.server.ts +++ b/frontend/src/routes/map/+page.server.ts @@ -25,7 +25,8 @@ export const load = (async (event) => { .map((adventure) => { return { lngLat: [adventure.longitude, adventure.latitude] as [number, number], - name: adventure.name + name: adventure.name, + type: adventure.type }; }); return { diff --git a/frontend/src/routes/map/+page.svelte b/frontend/src/routes/map/+page.svelte index 73dda48..7052fb8 100644 --- a/frontend/src/routes/map/+page.svelte +++ b/frontend/src/routes/map/+page.svelte @@ -1,9 +1,11 @@ @@ -13,14 +15,50 @@ class="relative aspect-[9/16] max-h-[70vh] w-full sm:aspect-video sm:max-h-full" standardControls > - {#each data.props.markers as { lngLat, name }} - - - -
{name}
-
-
+ {#each data.props.markers as { lngLat, name, type }} + {#if type == 'visited'} + (clickedName = name)} + class="grid h-8 w-8 place-items-center rounded-full border border-gray-200 bg-red-300 text-black shadow-2xl focus:outline-2 focus:outline-black" + > + + + + +
{name}
+

Visited

+
+
+ {/if} + + {#if type == 'planned'} + (clickedName = name)} + class="grid h-8 w-8 place-items-center rounded-full border border-gray-200 bg-blue-300 text-black shadow-2xl focus:outline-2 focus:outline-black" + > + + + + +
{name}
+

Planned

+
+
+ {/if} {/each}