Forráskód Böngészése

fix: add null safety for Qdrant embeddings and errors arrays

Fixed "Cannot read properties of undefined (reading 'filter')" error in ShopDetailPage. The issue occurred when Qdrant API responses returned data objects without embeddings/errors properties, causing undefined values to be assigned.

Root cause:
- API response structure: {data: {...}, success: true}
- But data.embeddings and data.errors could be undefined
- renderShopDetail() calls this.qdrantEmbeddings.filter() expecting an array
- When undefined, .filter() throws TypeError

Solution:
- Added || [] fallback to ensure arrays are never undefined
- this.qdrantEmbeddings = response.data.embeddings || []
- this.qdrantErrors = response.data.errors || []

This ensures the filter() calls in renderShopDetail() always have valid arrays to work with, even when the API returns incomplete data.

Fixes the shop details page loading error reported in production.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Fszontagh 8 hónapja
szülő
commit
f749f03a91
1 módosított fájl, 2 hozzáadás és 2 törlés
  1. 2 2
      web/src/components/pages/ShopDetailPage.ts

+ 2 - 2
web/src/components/pages/ShopDetailPage.ts

@@ -53,14 +53,14 @@ export class ShopDetailPage {
 
 
         // Handle embeddings response (won't break if it fails)
         // Handle embeddings response (won't break if it fails)
         if (embeddingsResponse.status === 'fulfilled' && embeddingsResponse.value.success && embeddingsResponse.value.data) {
         if (embeddingsResponse.status === 'fulfilled' && embeddingsResponse.value.success && embeddingsResponse.value.data) {
-          this.qdrantEmbeddings = embeddingsResponse.value.data.embeddings;
+          this.qdrantEmbeddings = embeddingsResponse.value.data.embeddings || [];
         } else if (embeddingsResponse.status === 'rejected') {
         } else if (embeddingsResponse.status === 'rejected') {
           console.warn('[ShopDetailPage] Embeddings failed:', embeddingsResponse.reason);
           console.warn('[ShopDetailPage] Embeddings failed:', embeddingsResponse.reason);
         }
         }
 
 
         // Handle errors response (won't break if it fails)
         // Handle errors response (won't break if it fails)
         if (errorsResponse.status === 'fulfilled' && errorsResponse.value.success && errorsResponse.value.data) {
         if (errorsResponse.status === 'fulfilled' && errorsResponse.value.success && errorsResponse.value.data) {
-          this.qdrantErrors = errorsResponse.value.data.errors;
+          this.qdrantErrors = errorsResponse.value.data.errors || [];
         } else if (errorsResponse.status === 'rejected') {
         } else if (errorsResponse.status === 'rejected') {
           console.warn('[ShopDetailPage] Errors fetch failed:', errorsResponse.reason);
           console.warn('[ShopDetailPage] Errors fetch failed:', errorsResponse.reason);
         }
         }