From 4fb0d657103eca570e523f8938dd078b032426ed Mon Sep 17 00:00:00 2001 From: mariosemes Date: Thu, 26 Mar 2026 21:49:55 +0100 Subject: [PATCH] Replace store dropdown with checkbox toggle chips Each store appears as a clickable chip with a checkmark. Click to exclude a store from results (greys out with strikethrough). Click again to re-include. Multiple stores can be toggled independently. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/client/src/routes/results/+page.svelte | 42 +++++++++++++++++----- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/client/src/routes/results/+page.svelte b/src/client/src/routes/results/+page.svelte index 62c2064..2166c8f 100644 --- a/src/client/src/routes/results/+page.svelte +++ b/src/client/src/routes/results/+page.svelte @@ -11,7 +11,7 @@ let sortBy = $state('price'); let sortAsc = $state(true); let filterText = $state(''); - let filterStore = $state(''); + let excludedStores = $state(new Set()); onMount(async () => { const params = $page.url.searchParams; @@ -72,8 +72,8 @@ } // Store filter - if (filterStore) { - items = items.filter(r => r.storeName === filterStore); + if (excludedStores.size > 0) { + items = items.filter(r => !excludedStores.has(r.storeName)); } // Sort @@ -102,6 +102,13 @@ catch { return `${currency} ${price.toFixed(2)}`; } } + function toggleStore(name) { + const next = new Set(excludedStores); + if (next.has(name)) next.delete(name); + else next.add(name); + excludedStores = next; + } + function sortIcon(column) { if (sortBy !== column) return ''; return sortAsc ? '\u2191' : '\u2193'; @@ -154,15 +161,32 @@ text-text-primary placeholder-text-tertiary focus:border-accent/50 focus:outline-none transition-colors" /> - + - - {filteredAndSorted().length} of {results.length} shown + + {filteredAndSorted().length} of {results.length} {/if}