diff --git a/web/frontend/src/views/Articles.vue b/web/frontend/src/views/Articles.vue index 378657a..3a6829d 100644 --- a/web/frontend/src/views/Articles.vue +++ b/web/frontend/src/views/Articles.vue @@ -10,60 +10,163 @@ ({{ currentUser }})

-
- - - - +
+ + +
+ +
+ +
+ + + +
+
+ +
+
+ + +
+
+

+ + Filtros + + {{ activeFiltersCount }} + +

+ +
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
- -
- - -
+ +
+ + + {{ selectedPlatform === 'wallapop' ? 'Wallapop' : 'Vinted' }} + - - ✕ + + + {{ selectedUsername }} + + + + + {{ selectedWorker }} +
@@ -124,6 +227,15 @@ import { ref, computed, watch, onMounted, onUnmounted } from 'vue'; import api from '../services/api'; import authService from '../services/auth'; import ArticleCard from '../components/ArticleCard.vue'; +import { + FunnelIcon, + XMarkIcon, + ServerIcon, + UserIcon, + BriefcaseIcon, + ArrowPathIcon, + MagnifyingGlassIcon +} from '@heroicons/vue/24/outline'; const currentUser = ref(authService.getUsername() || null); const isAdmin = ref(false); @@ -183,6 +295,26 @@ const filteredArticles = computed(() => { return allArticles.value; }); +// Computed para filtros activos +const hasActiveFilters = computed(() => { + return !!(selectedPlatform.value || selectedUsername.value || selectedWorker.value); +}); + +const activeFiltersCount = computed(() => { + let count = 0; + if (selectedPlatform.value) count++; + if (selectedUsername.value) count++; + if (selectedWorker.value) count++; + return count; +}); + +function clearAllFilters() { + selectedPlatform.value = ''; + selectedUsername.value = ''; + selectedWorker.value = ''; + loadArticles(); +} + async function loadArticles(reset = true, silent = false) {