diff --git a/src/modules/market/components/MerchantStore.vue b/src/modules/market/components/MerchantStore.vue
index 1438b73..f4ea030 100644
--- a/src/modules/market/components/MerchantStore.vue
+++ b/src/modules/market/components/MerchantStore.vue
@@ -516,10 +516,25 @@ const loadStallProducts = async () => {
inkey,
activeStall.value.id!
)
- // Enrich products with stall name
+ // Enrich products with stall name and missing properties to match Product interface
const enrichedProducts = (products || []).map(product => ({
- ...product,
- stallName: activeStall.value?.name || 'Unknown Stall'
+ id: product.id || `${product.stall_id}-${Date.now()}`, // Ensure id is always string
+ stall_id: product.stall_id,
+ stallName: activeStall.value?.name || 'Unknown Stall',
+ name: product.name,
+ description: product.config?.description || '',
+ price: product.price,
+ currency: activeStall.value?.currency || 'sats', // Use stall currency
+ quantity: product.quantity,
+ images: product.images,
+ categories: product.categories,
+ createdAt: product.event_created_at || Date.now(),
+ updatedAt: Date.now(),
+ nostrEventId: product.event_id,
+ // API-specific properties that are expected by the template
+ active: product.active ?? true,
+ pending: product.pending ?? false,
+ config: product.config || { currency: activeStall.value?.currency || 'sats' }
}))
stallProducts.value = enrichedProducts
diff --git a/src/modules/market/types/market.ts b/src/modules/market/types/market.ts
index 3b038b0..253041e 100644
--- a/src/modules/market/types/market.ts
+++ b/src/modules/market/types/market.ts
@@ -40,6 +40,10 @@ export interface Product {
createdAt: number
updatedAt: number
nostrEventId?: string
+ // API-specific properties for merchant store management
+ active?: boolean
+ pending?: boolean
+ config?: { currency?: string, [key: string]: any }
}
export interface Order {
diff --git a/src/modules/market/views/MarketPage.vue b/src/modules/market/views/MarketPage.vue
index ec29a2e..fce1d4a 100644
--- a/src/modules/market/views/MarketPage.vue
+++ b/src/modules/market/views/MarketPage.vue
@@ -46,7 +46,7 @@
{
return searchResults.value.length > 0
? searchResults.value
- : marketStore.products
+ : (marketStore.products as Product[])
})
// Category filtering with optimized composable
const {
allCategories,
- filteredProducts: categoryFilteredProducts,
selectedCount: selectedCategoriesCount,
selectedCategoryNames: selectedCategories,
hasActiveFilters,
filterMode,
toggleCategory,
clearAllCategories: clearAllCategoryFilters,
- setFilterMode,
- toggleFilterMode,
- categoryStats
+ setFilterMode
} = useCategoryFilter(productsForCategoryFilter)
let unsubscribe: (() => void) | null = null
diff --git a/src/modules/market/views/StallView.vue b/src/modules/market/views/StallView.vue
index bf73c17..6a771f3 100644
--- a/src/modules/market/views/StallView.vue
+++ b/src/modules/market/views/StallView.vue
@@ -138,7 +138,7 @@
@@ -159,9 +159,8 @@
import { ref, computed, onMounted, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useMarketStore } from '@/modules/market/stores/market'
-import { Card, CardContent } from '@/components/ui/card'
+import { Card } from '@/components/ui/card'
import { Button } from '@/components/ui/button'
-import { Input } from '@/components/ui/input'
import { Badge } from '@/components/ui/badge'
import {
Select,
@@ -184,6 +183,7 @@ const marketStore = useMarketStore()
// State
const isLoading = ref(false)
const searchResults = ref([])
+const searchQuery = ref('')
const sortBy = ref('name')
const selectedCategories = ref([])
const showProductDetail = ref(false)
@@ -213,8 +213,8 @@ const searchOptions: FuzzySearchOptions = {
const stallId = computed(() => route.params.stallId as string)
// Get stall data
-const stall = computed(() => {
- return marketStore.stalls.find(s => s.id === stallId.value)
+const stall = computed(() => {
+ return marketStore.stalls.find(s => s.id === stallId.value) as Stall | undefined
})
// Get products for this stall
@@ -284,11 +284,14 @@ const toggleCategoryFilter = (category: string) => {
const clearFilters = () => {
selectedCategories.value = []
searchResults.value = []
+ searchQuery.value = ''
}
// Handle fuzzy search results
const handleSearchResults = (results: Product[]) => {
searchResults.value = results
+ // Extract search query from fuzzy search component if needed
+ // For now, we'll track it separately
}
const viewProductDetails = (product: Product) => {