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}