From 2d1e62f15c9a23faeb342f907eddd32bbf989dfc Mon Sep 17 00:00:00 2001 From: Hanzo_dev <2002samudiojohan@gmail.com> Date: Tue, 17 Mar 2026 08:08:25 -0500 Subject: [PATCH] Refactor discover page: simplified cards and side-by-side dropdown filters --- frontend/src/views/DiscoverView.vue | 793 ++++++---------------------- 1 file changed, 160 insertions(+), 633 deletions(-) diff --git a/frontend/src/views/DiscoverView.vue b/frontend/src/views/DiscoverView.vue index 97d640f..a0aeeb7 100644 --- a/frontend/src/views/DiscoverView.vue +++ b/frontend/src/views/DiscoverView.vue @@ -37,12 +37,8 @@ function catName(cat: string) { function catEmoji(cat: string) { return CATEGORY_META[cat]?.emoji ?? 'πŸ“' } -function catIcon(cat: string) { - return CATEGORY_META[cat]?.icon ?? 'place' -} async function loadBusinesses(silent = false) { - // Modo 'silencioso': si ya tenemos datos, no mostrar spinner β€” solo refrescar en fondo if (!silent || businesses.value.length === 0) { isLoading.value = true } @@ -51,7 +47,6 @@ async function loadBusinesses(silent = false) { businesses.value = await businessService.getAllBusinesses() } catch (e) { console.error('Error loading businesses:', e) - // Solo mostrar error si no hay datos previos if (businesses.value.length === 0) { error.value = t('discover.error') } @@ -61,7 +56,6 @@ async function loadBusinesses(silent = false) { } function handleRefocus() { - // Recarga silenciosa: no congela la UI si ya hay datos visibles loadBusinesses(true) } @@ -83,7 +77,8 @@ const categories = computed(() => { const areas = computed(() => { const ars = new Set(businesses.value.map(b => b.area).filter(Boolean) as string[]) - return [...Array.from(ars)] + const sorted = Array.from(ars).sort() + return ['Todas', ...sorted] }) const filteredBusinesses = computed(() => { @@ -101,12 +96,10 @@ const filteredBusinesses = computed(() => { return list }) -// Primeros 2 para destacados cuando no hay filtro activo const featuredBusinesses = computed(() => businesses.value.slice(0, 2) ) -// Resto del listado (sin los destacados) cuando no hay filtros const gridBusinesses = computed(() => { const hasFilter = selectedCategory.value !== 'Todas' || selectedArea.value !== 'Todas' || searchQuery.value.trim() if (hasFilter) return filteredBusinesses.value @@ -127,11 +120,7 @@ function handleExplore(biz: Business) { router.push('/business/' + biz.id) } - function resetFilters() { - selectedCategory.value = 'Todas' - selectedArea.value = t('discover.allAreas') === 'All' ? 'Todas' : 'Todas' // Simplified to keep internal logic consistent - // Using strings as keys for internal logic, translating only for display selectedCategory.value = 'Todas' selectedArea.value = 'Todas' searchQuery.value = '' @@ -163,255 +152,143 @@ function resetFilters() { - -
-
- + +
+
+ +
+ category + + expand_more +
+ + +
+ location_on + + expand_more +
- +
- +
-
- error_outline -

{{ error }}

-