fix: harden dashboard product runtime guards#168
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
Caution Review failedPull request was closed or merged during review WalkthroughPR refatora amplamente componentes React e hooks para melhorar segurança de tipos, removendo non-null assertions ( ChangesNormalização de dados opcionais e remoção de non-null assertions
Controle de autenticação e queries condicionadas por userId
Refatorações técnicas menores
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
Este PR fortalece guardas de runtime (principalmente em widgets de dashboard e componentes de BI/intelligence) para evitar crashes enquanto dados assíncronos/auth ainda não estão disponíveis, além de remover as any/non-null assertions em alguns pontos.
Changes:
- Introduz
userIdguards em queries (React Query / Supabase) e normaliza listas (data ?? []) antes de map/reduce para evitar acessos!.. - Refatora widgets do dashboard para não depender de
user!/non-null assertions (incluindo queryKey comuserId). - Ajusta teste de
useStockAlertspara usarvi.mockedno mock da bridge, removendoas any.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/pages/mockups/MockupHistoryPage.tsx | Adiciona userId guard em queryKey/queryFn e evita mockup_url! no download. |
| src/hooks/products/useStockAlerts.integration.test.tsx | Remove as any usando vi.mocked para inspecionar/mocar invokeExternalDb. |
| src/hooks/kit-builder/useKitBuilderQueries.ts | Remove non-null assertions em filtros dimensionais e melhora legibilidade. |
| src/components/quotes/MarginInsightBadge.tsx | Evita non-null assertions e introduz valores “effective” para modo dual. |
| src/components/products/SalesHistoryChart.tsx | Normaliza daily/kpis antes de render e melhora guardas contra dados ausentes. |
| src/components/intelligence/TrendingProducts.tsx | Normaliza products ?? [] e remove dependência de products!. |
| src/components/intelligence/SupplierSales.tsx | Normaliza suppliers ?? [] e evita suppliers! em agregações. |
| src/components/intelligence/ProductRankingSearch.tsx | Normaliza products ?? [], melhora legibilidade do debounce/filters. |
| src/components/dashboard/MyRecentQuotesWidget.tsx | Usa userId guard no infinite query e remove user!/non-null. |
| src/components/dashboard/MyDiscountRequestsWidget.tsx | Usa userId guard no infinite query e remove user!/non-null. |
| src/components/dashboard/MyClientsWidget.tsx | Usa userId guard no infinite query e remove user!/non-null. |
| src/components/compare/ComparisonScoreCard.tsx | Remove non-null assertions ao derivar winner e renderizar score. |
| src/components/cart/BundleSuggestionCard.tsx | Evita data! ao mapear sugestões e melhora guardas de render. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const data = payload[0]?.payload; | ||
| if (!data) return null; | ||
|
|
||
| const hasAnyActivity = (data.quotedQty > 0) || (data.orderedQty > 0) || (data.quoteCount > 0) || (data.orderCount > 0); | ||
| const hasAnyActivity = | ||
| data.quotedQty > 0 || data.orderedQty > 0 || data.quoteCount > 0 || data.orderCount > 0; |
| setCategoryName(null); | ||
| setSearchTerm(''); | ||
| setDebouncedSearch(''); | ||
| }; |
Resumo
as anydo teste deuseStockAlertsusandovi.mockedpara o mock da bridge.Validação
npx.cmd eslint src/hooks/products/useStockAlerts.integration.test.tsx src/components/dashboard/MyRecentQuotesWidget.tsx src/components/dashboard/MyDiscountRequestsWidget.tsx src/components/dashboard/MyClientsWidget.tsx src/components/quotes/MarginInsightBadge.tsx src/pages/mockups/MockupHistoryPage.tsx src/components/cart/BundleSuggestionCard.tsx src/components/compare/ComparisonScoreCard.tsx src/components/intelligence/TrendingProducts.tsx src/components/intelligence/ProductRankingSearch.tsx src/components/intelligence/SupplierSales.tsx src/components/products/SalesHistoryChart.tsx src/hooks/kit-builder/useKitBuilderQueries.tsnpx.cmd vitest run src/hooks/products/useStockAlerts.integration.test.tsx- 1 arquivo / 2 testes passandogit diff --check HEAD~1..HEADnpm.cmd run buildcomVITE_SUPABASE_URLeVITE_SUPABASE_PUBLISHABLE_KEYObservação
git pushnormal ainda falha no hook locallint:baselinecomeslint falhou com status null; a branch foi publicada comHUSKY=0após validação manual focada.Summary by cubic
Hardened dashboard and BI widgets with runtime guards and safe defaults to prevent crashes when data is still loading or the user is missing. Removed unsafe assertions and normalized async data across widgets, charts, and tests to improve stability.
@tanstack/react-querycalls byuserIdand return empty results when absent in My Recent Quotes, My Clients, My Discount Requests, and Mockup History.?? [],?? 0) and added early null checks (e.g., comparison winner, bundle suggestions) to avoid undefined access.(bridge.invokeExternalDb as any)withvi.mocked, removed non-null assertions in filters, and tightened typings.Written for commit 75e84d8. Summary will update on new commits. Review in cubic
Summary by CodeRabbit
Release Notes
Bug Fixes
Style
Tests