From 26e7d920796cb2b0bc3cbf4c564bfd357b63f421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoni=20Nu=C3=B1ez=20Romeu?= Date: Thu, 16 Jul 2026 16:32:24 +0200 Subject: [PATCH] fix: handle both array and object responses in admin search The CIMA search API returns {results: [...]} but the admin panel was treating it as an array, causing CIMA products to be lost. Now handles both formats: - Array: [...] - Object: {results: [...]} --- .gitea/workflows/test-branches.yaml | 23 +++++++++++++++++++ .../components/admin/PharmacyProductLink.jsx | 10 +++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/test-branches.yaml b/.gitea/workflows/test-branches.yaml index 877a4d4..18f3257 100644 --- a/.gitea/workflows/test-branches.yaml +++ b/.gitea/workflows/test-branches.yaml @@ -28,6 +28,9 @@ jobs: frontend-mobile: - 'apps/frontend-mobile/**' - 'packages/**' + parapharmacy-api: + - 'apps/parapharmacy-api/**' + - 'packages/**' test-backend: name: Backend Tests @@ -85,3 +88,23 @@ jobs: - name: Run Frontend Mobile Tests run: npm test --workspace=frontend-mobile -- --ci continue-on-error: true + + test-parapharmacy-api: + name: Parapharmacy API Tests + needs: detect-changes + if: needs.detect-changes.outputs.parapharmacy-api == 'true' + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'npm' + - name: Install dependencies + run: npm ci --ignore-scripts + - name: Install parapharmacy-api native deps + run: npm rebuild sqlite3 bcrypt --workspace=farma-clic-parapharmacy-api + - name: Run Parapharmacy API Tests + run: npm test --workspace=farma-clic-parapharmacy-api diff --git a/apps/frontend/src/components/admin/PharmacyProductLink.jsx b/apps/frontend/src/components/admin/PharmacyProductLink.jsx index fe6ea73..e562c35 100644 --- a/apps/frontend/src/components/admin/PharmacyProductLink.jsx +++ b/apps/frontend/src/components/admin/PharmacyProductLink.jsx @@ -72,12 +72,16 @@ function PharmacyProductLink() { }) ]); - const cimaData = cimaRes.status === 'fulfilled' ? await cimaRes.value.json() : []; + const cimaData = cimaRes.status === 'fulfilled' ? await cimaRes.value.json() : { results: [] }; const paraData = paraRes.status === 'fulfilled' ? await paraRes.value.json() : { results: [] }; + // Handle both array and object responses + const cimaResults = Array.isArray(cimaData) ? cimaData : (cimaData.results || []); + const paraResults = Array.isArray(paraData) ? paraData : (paraData.results || []); + const allResults = [ - ...(Array.isArray(cimaData) ? cimaData : []), - ...(paraData.results || []).map(p => ({ ...p, source: p.source || 'parapharmacy' })) + ...cimaResults, + ...paraResults.map(p => ({ ...p, source: p.source || 'parapharmacy' })) ]; setProductResults(allResults);