Skip to content

fix(types): ProductDetail.tsx — anota tipo do useProduct (-91 erros TS)#116

Merged
adm01-debug merged 1 commit into
mainfrom
fix/ts-product-detail-91
May 9, 2026
Merged

fix(types): ProductDetail.tsx — anota tipo do useProduct (-91 erros TS)#116
adm01-debug merged 1 commit into
mainfrom
fix/ts-product-detail-91

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 9, 2026

Plano

Conserta 91 erros TS em src/pages/ProductDetail.tsx (arquivo com mais erros do baseline — 7.5% do total). Cirúrgico: +3 linhas, -1.

Causa raiz

Bug de inferência do TanStack Query v5.17: useQuery<Product | null> perdia tipo no destructuring, devolvia NoInfer_2<TQueryFnData>.

Fix

+import type { Product } from "@/types/product-catalog";

-const { data: product, isLoading, isError } = useProduct(id || "");
+const { data, isLoading, isError } = useProduct(id || "");
+const product: Product | null | undefined = data;

Annotation explícita força tipo. Resolve 91 erros num patch.

Distribuição

TS Qtd
TS2339 85
TS2322 3
TS2740 2
TS2345 1

Risk: 🟢 muito baixo

Mudança 100% local. Sem efeito runtime. Drift positivo (1214→~1123).

Sequência Opção C (-253 erros = -21% baseline TS)

  1. ProductDetail.tsx (91) — ESTE PR
  2. ⏳ MockupGenerator (57)
  3. ⏳ usePersonalizationManager (37)
  4. ⏳ external-db/products (36)
  5. ⏳ useSalesGoals (32)

Após mergear: npm run typecheck:baseline:update em PR à parte.

Summary by CodeRabbit

Notas de Lançamento

  • Refactor
    • Melhorias internas na tipagem e estrutura do código para melhor confiabilidade.

Observação: Esta versão contém apenas otimizações internas sem mudanças visíveis na funcionalidade do aplicativo.

Review Change Stack

…S) (F1-1.x)

Conserta 91 erros TS (TS2339, TS2322, TS2345, TS2740) em ProductDetail.tsx
causados por bug de inferência do TanStack Query 5.17 — useQuery<Product | null>
estava devolvendo NoInfer_2<TQueryFnData> em vez de Product | null no
destructuring do consumidor.

**Fix cirúrgico** (+3 linhas, -1 linha):

```diff
-const { data: product, isLoading, isError } = useProduct(id || "");
+const { data, isLoading, isError } = useProduct(id || "");
+const product: Product | null | undefined = data;
```

Mais import do type Product de @/types/product-catalog.

**Risk:** 🟢 muito baixo. Mudança 100% local, não muda runtime,
apenas type annotation. TanStack Query funciona idêntico.

**Test plan:**
- [x] Diff revisado (3 linhas)
- [x] Type Product importado da fonte correta
- [ ] CI rodando typecheck completo (1620 arquivos)
- [ ] CI verde — espera-se 1123 erros TS (era 1214, -91 = drift positivo)

**Próximos passos da Opção C:**
1. ✅ ProductDetail.tsx (91 erros) — ESTE PR
2. MockupGenerator.tsx (57)
3. usePersonalizationManager.ts (37)
4. lib/external-db/products.ts (36)
5. useSalesGoals.ts (32)

Após mergear: rodar npm run typecheck:baseline:update num PR separado
pra congelar o ganho.
Copilot AI review requested due to automatic review settings May 9, 2026 17:28
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
promo-gifts Ready Ready Preview, Comment May 9, 2026 5:29pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 15641f03-1655-4f6c-8261-33398a648729

📥 Commits

Reviewing files that changed from the base of the PR and between defe1fc and 05c19ca.

📒 Files selected for processing (1)
  • src/pages/ProductDetail.tsx

Walkthrough

ProductDetail agora importa o tipo Product e refatora o hook useProduct para destructurar explicitamente { data, isLoading, isError } e atribuir product com tipagem Product | null | undefined. Sem mudanças comportamentais.

Changes

Tipagem Explícita do Product

Camada / Arquivo(s) Resumo
Importação de Tipos
src/pages/ProductDetail.tsx
Adiciona import do tipo Product para suportar tipagem explícita da variável.
Refatoração do Hook
src/pages/ProductDetail.tsx
Refatora destructuring de useProduct para extrair dados e atribuir product com tipo explícito Product | null | undefined.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutos

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed O título descreve com precisão a mudança principal: correção de tipos TypeScript com anotação explícita do hook useProduct, reduzindo 91 erros TS específicos do arquivo ProductDetail.tsx.
Description check ✅ Passed A descrição é detalhada e completa: explica o problema (bug de inferência do TanStack Query), a solução (anotação explícita com import), impacto, risco, distribuição de erros e contexto operacional. Segue os princípios esperados.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ts-product-detail-91

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Reduz o baseline de erros de TypeScript ao corrigir a tipagem do product consumido em ProductDetail.tsx, evitando a perda de tipo no destructuring do resultado do useProduct (TanStack Query).

Changes:

  • Ajusta o destructuring do useProduct para capturar data separadamente.
  • Adiciona anotação explícita Product | null | undefined para product, destravando tipagem no restante do componente.
  • Inclui import de tipo Product para suportar a anotação.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 20 to +21
import { useProduct } from "@/hooks/useProducts";
import type { Product } from "@/types/product-catalog";
@adm01-debug adm01-debug merged commit bbd83a7 into main May 9, 2026
18 of 19 checks passed
@adm01-debug adm01-debug deleted the fix/ts-product-detail-91 branch May 9, 2026 17:31
adm01-debug added a commit that referenced this pull request May 9, 2026
## Problema 1: CI quebrado em main desde PR #113

Após auditoria pós-#117 descobri que **"Lint, Typecheck & Test"** tem falhado em **5 runs consecutivos em main** (desde PR #113). Causa raiz: 2 entries do .tsc-baseline.json desalinhadas com a realidade pós-#113 e #116:

1. **PR #113** moveu `src/components/quote/QuickQuoteFAB.tsx` → `quotes/`. Baseline ficou no path antigo. Gate vê isso como "+2 TS2322 novos no path `quotes/`".
2. **PR #116** consertou ProductDetail.tsx (-91 erros líquidos), mas introduziu 6 novos TS2322. Baseline fica preso em TS2322=3, vê regressão de +6.

Patch cirúrgico (sem rodar tsc):
- `del .counts["src/components/quote/QuickQuoteFAB.tsx"]` (path antigo)
- `.counts["src/components/quotes/QuickQuoteFAB.tsx"] = {TS2322: 2}` (path novo)
- `.counts["src/pages/ProductDetail.tsx"] = {TS2322: 9}` (atualiza pra realidade pós-#116)
- Recalcula totalErrors via `jq`

**Resultado: baseline 1214 → 1132 erros** (alinhado com o tsc real que reporta 1130, +2 de drift positivo aceito).

## Problema 2: gen-edges-readme.mjs não roda standalone

PR #117 prometeu reproduzibilidade via `node scripts/gen-edges-readme.mjs > supabase/functions/README.md`, mas o script tinha 2 `readFileSync('/tmp/edge-*.txt')` deixados da geração inicial — quebrava se /tmp não tivesse os arquivos.

Reescrito standalone:
- `readdirSync(supabase/functions)` em vez de `/tmp/edge-dirs.txt`
- `execSync(grep -rE ...)` em vez de `/tmp/edge-callers.txt`
- Validado: `node scripts/gen-edges-readme.mjs` produz 196 linhas idênticas ao README atual

## Risk

🟢 Zero. Baseline mais rigoroso (gate fica menor, não maior). Script mais portável.

## Test plan

- [x] `jq '.totalErrors' .tsc-baseline.json` = 1132 (era 1214)
- [x] `jq '.counts | has("src/components/quote/QuickQuoteFAB.tsx")'` = false
- [x] `node scripts/gen-edges-readme.mjs` roda standalone (sem /tmp)
- [ ] CI verde (este é o teste real)
- [ ] CodeRabbit OK
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants