From bd6ba375b360eeed86c1d66e8e89b423635a18c0 Mon Sep 17 00:00:00 2001 From: Padreug Date: Mon, 20 Apr 2026 08:42:10 +0200 Subject: [PATCH] Replace plain text search with Fuse.js fuzzy search Uses the existing FuzzySearch component and useFuzzySearch composable (same pattern as market module). Searches across title (50%), summary (20%), description (15%), location (10%), and tags (5%) with threshold 0.35. Fuzzy search feeds into the display list after temporal/category/ date filters are applied. Removed manual string search from filter composable. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../composables/useActivityFilters.ts | 16 ------ .../activities/views/ActivitiesPage.vue | 54 +++++++++++++++---- 2 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/modules/activities/composables/useActivityFilters.ts b/src/modules/activities/composables/useActivityFilters.ts index 0fb3742..ab3624b 100644 --- a/src/modules/activities/composables/useActivityFilters.ts +++ b/src/modules/activities/composables/useActivityFilters.ts @@ -14,13 +14,11 @@ import { DEFAULT_FILTERS } from '../types/filters' export function useActivityFilters() { const temporal = ref(DEFAULT_FILTERS.temporal) const selectedCategories = ref([]) - const searchQuery = ref('') const selectedDate = ref(undefined) const filters = computed(() => ({ temporal: temporal.value, categories: selectedCategories.value, - search: searchQuery.value || undefined, })) /** @@ -49,17 +47,6 @@ export function useActivityFilters() { ) } - // Search filter - if (searchQuery.value.trim()) { - const query = searchQuery.value.toLowerCase().trim() - result = result.filter(a => - a.title.toLowerCase().includes(query) || - a.summary?.toLowerCase().includes(query) || - a.description.toLowerCase().includes(query) || - a.location?.toLowerCase().includes(query) - ) - } - return result } @@ -93,14 +80,12 @@ export function useActivityFilters() { function resetFilters() { temporal.value = DEFAULT_FILTERS.temporal selectedCategories.value = [] - searchQuery.value = '' selectedDate.value = undefined } const hasActiveFilters = computed(() => temporal.value !== 'all' || selectedCategories.value.length > 0 || - searchQuery.value.trim().length > 0 || selectedDate.value !== undefined ) @@ -108,7 +93,6 @@ export function useActivityFilters() { // State temporal, selectedCategories, - searchQuery, selectedDate, filters, hasActiveFilters, diff --git a/src/modules/activities/views/ActivitiesPage.vue b/src/modules/activities/views/ActivitiesPage.vue index 32857ba..8cecbb3 100644 --- a/src/modules/activities/views/ActivitiesPage.vue +++ b/src/modules/activities/views/ActivitiesPage.vue @@ -1,16 +1,17 @@