From 76c4a875ff9c4c3b6d38cd2da6b3e0f82afba8a7 Mon Sep 17 00:00:00 2001 From: Pantry Lead Agent Date: Wed, 25 Feb 2026 01:25:16 +0000 Subject: [PATCH] feat: implement search filtering in InventoryList (#66) --- app/components/inventory/InventoryList.vue | 29 +++++++++++++++------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/app/components/inventory/InventoryList.vue b/app/components/inventory/InventoryList.vue index dc451b5..98f9820 100644 --- a/app/components/inventory/InventoryList.vue +++ b/app/components/inventory/InventoryList.vue @@ -60,6 +60,7 @@ const { getInventory, deleteInventoryItem, updateQuantity } = useInventory() const props = defineProps<{ refresh?: boolean tagFilters?: string[] + searchQuery?: string }>() const emit = defineEmits<{ @@ -89,17 +90,27 @@ const loadInventory = async () => { // Computed filtered items const filteredItems = computed(() => { - if (!props.tagFilters || props.tagFilters.length === 0) { - return items.value + let result = items.value + + // Filter by search query (case-insensitive) + if (props.searchQuery && props.searchQuery.trim()) { + const query = props.searchQuery.trim().toLowerCase() + result = result.filter(item => + item.name.toLowerCase().includes(query) + ) } - // Filter items that have at least one of the selected tags - return items.value.filter(item => { - if (!item.tags || item.tags.length === 0) return false - - const itemTagIds = item.tags.map((t: any) => t.tag.id) - return props.tagFilters!.some(filterId => itemTagIds.includes(filterId)) - }) + // Filter by tags + if (props.tagFilters && props.tagFilters.length > 0) { + result = result.filter(item => { + if (!item.tags || item.tags.length === 0) return false + + const itemTagIds = item.tags.map((t: any) => t.tag.id) + return props.tagFilters!.some(filterId => itemTagIds.includes(filterId)) + }) + } + + return result }) const handleDelete = async (id: string) => {