From 8175daf77384ebfeee1ec0544c201712dffb121d Mon Sep 17 00:00:00 2001 From: Sean Morley Date: Wed, 16 Oct 2024 22:23:59 -0400 Subject: [PATCH] Filter countries by visit status --- .../src/lib/components/CountryCard.svelte | 2 +- frontend/src/routes/worldtravel/+page.svelte | 68 ++++++++++++++++--- 2 files changed, 61 insertions(+), 9 deletions(-) diff --git a/frontend/src/lib/components/CountryCard.svelte b/frontend/src/lib/components/CountryCard.svelte index 78304ec..a2574cc 100644 --- a/frontend/src/lib/components/CountryCard.svelte +++ b/frontend/src/lib/components/CountryCard.svelte @@ -34,7 +34,7 @@ {/if} {#if country.num_visits > 0 && country.num_visits != country.num_regions}
- Visited {country.num_visits} time{country.num_visits > 1 ? 's' : ''} + Visited {country.num_visits} Region{country.num_visits > 1 ? 's' : ''}
{:else if country.num_visits > 0 && country.num_visits === country.num_regions}
Completed
diff --git a/frontend/src/routes/worldtravel/+page.svelte b/frontend/src/routes/worldtravel/+page.svelte index 48a1b54..874991d 100644 --- a/frontend/src/routes/worldtravel/+page.svelte +++ b/frontend/src/routes/worldtravel/+page.svelte @@ -3,25 +3,38 @@ import type { Country } from '$lib/types'; import type { PageData } from './$types'; - let searchQuery: string = ''; - - let filteredCountries: Country[] = []; - export let data: PageData; console.log(data); - const countries: Country[] = data.props?.countries || []; + let searchQuery: string = ''; + + let filteredCountries: Country[] = []; + const allCountries: Country[] = data.props?.countries || []; + + let filterOption: string = 'all'; $: { - // if query is empty, show all countries if (searchQuery === '') { - filteredCountries = countries; + filteredCountries = allCountries; } else { // otherwise, filter countries by name - filteredCountries = countries.filter((country) => + filteredCountries = allCountries.filter((country) => country.name.toLowerCase().includes(searchQuery.toLowerCase()) ); } + if (filterOption === 'partial') { + filteredCountries = filteredCountries.filter( + (country) => country.num_visits > 0 && country.num_visits < country.num_regions + ); + } else if (filterOption === 'complete') { + filteredCountries = filteredCountries.filter( + (country) => country.num_visits === country.num_regions + ); + } else if (filterOption === 'not') { + filteredCountries = filteredCountries.filter((country) => country.num_visits === 0); + } else { + filteredCountries = filteredCountries; + } } @@ -31,6 +44,38 @@ {filteredCountries.length} countries found

+
+ (filterOption = 'all')} + /> + (filterOption = 'partial')} + /> + (filterOption = 'complete')} + /> + (filterOption = 'not')} + /> +
+
+ {#if searchQuery.length > 0} + +
+ +
+ {/if}
+
{#each filteredCountries as country}