diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2ba986f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/client/src/components/DogList.svelte b/client/src/components/DogList.svelte index b28bc36..4c4aed5 100644 --- a/client/src/components/DogList.svelte +++ b/client/src/components/DogList.svelte @@ -5,16 +5,47 @@ id: number; name: string; breed: string; + status: string; } export let dogs: Dog[] = []; let loading = true; let error: string | null = null; + let breeds: string[] = []; + let selectedBreed = ''; + let availableOnly = false; + + const fetchBreeds = async () => { + try { + const response = await fetch('/api/breeds'); + if(response.ok) { + breeds = await response.json(); + } else { + console.error('Failed to fetch breeds:', response.status); + } + } catch (err) { + console.error('Error fetching breeds:', err); + } + }; const fetchDogs = async () => { loading = true; try { - const response = await fetch('/api/dogs'); + let url = '/api/dogs'; + const params = new URLSearchParams(); + + if (selectedBreed) { + params.append('breed', selectedBreed); + } + if (availableOnly) { + params.append('available', 'true'); + } + + if (params.toString()) { + url += '?' + params.toString(); + } + + const response = await fetch(url); if(response.ok) { dogs = await response.json(); } else { @@ -28,13 +59,53 @@ }; onMount(() => { + fetchBreeds(); fetchDogs(); }); + + // Reactive statement to refetch dogs when filters change + $: if (selectedBreed !== undefined && availableOnly !== undefined) { + fetchDogs(); + }
{dog.breed}
+{dog.breed}
+