From 26a9766f9c163552b9403879ee43d9acd18674e2 Mon Sep 17 00:00:00 2001 From: Jay George Date: Wed, 11 Mar 2026 15:27:23 +0000 Subject: [PATCH 1/5] Limit filter delete action to the "x" to prevent accidental destructive action --- .../js/components/ui/Listing/Filters.vue | 151 +++++++++++------- 1 file changed, 94 insertions(+), 57 deletions(-) diff --git a/resources/js/components/ui/Listing/Filters.vue b/resources/js/components/ui/Listing/Filters.vue index 79d342a19a..7ace415814 100644 --- a/resources/js/components/ui/Listing/Filters.vue +++ b/resources/js/components/ui/Listing/Filters.vue @@ -33,12 +33,66 @@ const fieldFilterBadges = computed(() => Object.entries(activeFilterBadges.value .flatMap(([filter, badges]) => Object.entries(badges).map(([handle, badge]) => ({ filter, handle, badge }))) ); +const filterPanels = computed(() => [ + ...fieldFilters.value.map((filter) => ({ + handle: filter.handle, + title: filter.title, + component: FieldFilter, + componentProps: { + config: filter, + values: activeFilters.value[filter.handle] || {}, + }, + })), + ...standardFilters.value.map((filter) => ({ + handle: filter.handle, + title: filter.title, + component: DataListFilter, + componentProps: { + filter, + values: activeFilters.value[filter.handle], + }, + })), +]); + +const badgeChipClasses = 'group last:me-12 inline-flex h-10 items-center gap-1 rounded-lg bg-gray-950/5 ps-4 pe-2 text-sm font-medium text-gray-900 dark:bg-white/4 dark:text-gray-200'; +const badgeChipClearButtonClasses = 'opacity-100 [&_svg]:size-4'; + +const badgeChips = computed(() => [ + ...fieldFilterBadges.value.map(({ filter, handle, badge }) => ({ + key: `${filter}-${handle}`, + filter, + handle, + badge, + isFieldBadge: true, + })), + ...Object.entries(standardBadges.value).map(([handle, badge]) => ({ + key: handle, + handle, + badge, + isFieldBadge: false, + })), +]); + function removeFieldFilter(filterHandle, fieldHandle) { const fields = { ...activeFilters.value[filterHandle] }; delete fields[fieldHandle]; setFilter(filterHandle, fields); } +function clearBadgeChip(chip) { + if (chip.isFieldBadge) { + removeFieldFilter(chip.filter, chip.handle); + + return; + } + + setFilter(chip.handle, null); +} + +function isDateBadge(chip) { + return chip.isFieldBadge && chip.handle === 'date'; +} + function isActive(handle) { return activeFilters.value.hasOwnProperty(handle); } @@ -134,35 +188,18 @@ function handleStackClosed() {
- - -
-