diff --git a/apps/core-web/src/routes/products/catalogs/BrandsListPage.tsx b/apps/core-web/src/routes/products/catalogs/BrandsListPage.tsx index 6fb5806..8d19b23 100644 --- a/apps/core-web/src/routes/products/catalogs/BrandsListPage.tsx +++ b/apps/core-web/src/routes/products/catalogs/BrandsListPage.tsx @@ -26,6 +26,7 @@ export function BrandsListPage() { onCreate={create} onToggleActive={toggleActive} namePlaceholder="ex.: Intelbras" + nameLabel="Nome da marca" createLabel="Adicionar marca" emptyMessage="Nenhuma marca cadastrada." /> diff --git a/apps/core-web/src/routes/products/catalogs/CatalogCreateForm.tsx b/apps/core-web/src/routes/products/catalogs/CatalogCreateForm.tsx index bbf73da..b58002f 100644 --- a/apps/core-web/src/routes/products/catalogs/CatalogCreateForm.tsx +++ b/apps/core-web/src/routes/products/catalogs/CatalogCreateForm.tsx @@ -6,12 +6,14 @@ import { Alert, Button, Input } from "@eden/ui"; export function CatalogCreateForm({ placeholder, buttonLabel = "Adicionar", + nameLabel = "Nome", creating, error, onCreate, }: { placeholder: string; buttonLabel?: string; + nameLabel?: string; creating: boolean; error: string | null; onCreate: (name: string) => Promise; @@ -36,7 +38,7 @@ export function CatalogCreateForm({
setName(e.target.value)} diff --git a/apps/core-web/src/routes/products/catalogs/GroupSubgroupsPanel.tsx b/apps/core-web/src/routes/products/catalogs/GroupSubgroupsPanel.tsx index 71d7ce3..1c452eb 100644 --- a/apps/core-web/src/routes/products/catalogs/GroupSubgroupsPanel.tsx +++ b/apps/core-web/src/routes/products/catalogs/GroupSubgroupsPanel.tsx @@ -36,6 +36,7 @@ export function GroupSubgroupsPanel({ group }: { group: ProductGroupRow }) { ) : null} diff --git a/apps/core-web/src/routes/products/catalogs/SimpleCatalogCard.tsx b/apps/core-web/src/routes/products/catalogs/SimpleCatalogCard.tsx index 5a8bb2e..bf9cce2 100644 --- a/apps/core-web/src/routes/products/catalogs/SimpleCatalogCard.tsx +++ b/apps/core-web/src/routes/products/catalogs/SimpleCatalogCard.tsx @@ -14,6 +14,7 @@ export function SimpleCatalogCard({ onCreate, onToggleActive, namePlaceholder, + nameLabel, createLabel, emptyMessage, extraColumn, @@ -26,6 +27,7 @@ export function SimpleCatalogCard({ onCreate: (name: string) => Promise; onToggleActive: (item: T) => void; namePlaceholder: string; + nameLabel?: string; createLabel?: string; emptyMessage?: string; extraColumn?: TableColumn; @@ -39,6 +41,7 @@ export function SimpleCatalogCard({ ) : null}
setName(e.target.value)} diff --git a/apps/core-web/src/routes/products/catalogs/UnitsListPage.tsx b/apps/core-web/src/routes/products/catalogs/UnitsListPage.tsx index 8069957..0f5e88d 100644 --- a/apps/core-web/src/routes/products/catalogs/UnitsListPage.tsx +++ b/apps/core-web/src/routes/products/catalogs/UnitsListPage.tsx @@ -29,6 +29,7 @@ export function UnitsListPage() { onCreate={create} onToggleActive={toggleActive} namePlaceholder="ex.: Unidade" + nameLabel="Nome da unidade" createLabel="Adicionar unidade" emptyMessage="Nenhuma unidade cadastrada." /> diff --git a/docs/progress.md b/docs/progress.md index 49f1ef9..fdb54a8 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -661,3 +661,20 @@ Pequeno complemento de backend necessário para a coluna "Grupo" da tela nova: ` ### Verificação `pnpm turbo run typecheck build` 28/28 (os 3 apps que usam `@eden/ui` — `core-web`/`reseller-web`/`subscriber-web` — confirmados sem regressão). Teste novo em `apps/api/test/product-catalogs.spec.ts` cobrindo `group_name` resolvido tanto na listagem filtrada por `groupId` quanto na geral. Suíte completa: 95/95 verdes. Testado ao vivo via `curl` contra `eden-api`/`eden-core` reconstruídos: rota `/products/subgroups` responde 200, criação de subgrupo segue funcionando, listagem geral resolve `group_name` corretamente. Interação de clique no accordion aninhado (abrir "Grupos" → ver "Subgrupos" → navegar) não foi possível verificar via browser automatizado (nenhuma ferramenta desse tipo disponível neste ambiente) — verificação limitada a build/tipos/API real, mesma limitação já registrada pelo agente de frontend na leva anterior. + +--- + +## Rótulo "Nome do X" nos formulários de catálogo de Produto + verificação real em navegador + +Data: 2026-09-18. Usuário pediu duas coisas na sequência: (1) verificar no navegador se a leva anterior (submenu de Subgrupos) está funcionando de verdade, e (2) trocar o rótulo genérico "Nome" por "Nome do subgrupo" no formulário de criação — e, logo em seguida, "usar a mesma lógica para o Grupo", interpretado (e confirmado fazendo) como aplicar o mesmo padrão aos 5 catálogos: "Nome do tipo"/"Nome do grupo"/"Nome do subgrupo"/"Nome da marca"/"Nome da unidade" (sem dois-pontos no final — nenhum outro rótulo do app usa, mantido consistente). + +### Verificação real em navegador (não só API) + +Nenhuma ferramenta de browser automation (`claude-in-chrome`) estava disponível nesta sessão. Em vez de reportar como não verificável (mesma limitação que os agentes de frontend já haviam registrado nas levas anteriores), usei o Playwright que já existe no monorepo (`packages/integrations` depende dele para renderização de PDF; o Chromium já estava em cache local de builds anteriores) para abrir o Chromium de verdade, logar como super_admin e navegar pelas telas reais. Isso capturou um bug real que a verificação só por API/build nunca pegaria: o menu aninhado Produtos → Grupos → Subgrupos realmente expande e navega corretamente (confirmado via dump do texto do DOM da sidebar), mas o rótulo do campo de criação continuava mostrando "Nome" em vez de "Nome do grupo"/"Nome do tipo"/etc — o prop `nameLabel` tinha sido adicionado à assinatura de `CatalogCreateForm.tsx` mas esquecido de usar de fato no JSX (`` continuava hardcoded). Corrigido, reconstruído, reverificado com o mesmo script Playwright — os 5 rótulos batem exatamente com o esperado. + +### Mudança + +`CatalogCreateForm.tsx`/`SimpleCatalogCard.tsx` ganharam o prop `nameLabel` (default `"Nome"`, sem quebrar nada que não o passe); os 5 pontos de uso (`ProductTypesListPage`, `ProductGroupsListPage`, `GroupSubgroupsPanel`, `BrandsListPage`, `UnitsListPage`) e o formulário manual de `SubgroupsListPage.tsx` passaram o rótulo específico de cada catálogo. + +### Verificação +`pnpm turbo run typecheck build` 28/28. Suíte 95/95 (uma corrida isolada apresentou uma falha pontual num `afterAll` de outro spec depois de várias execuções seguidas da suíte hoje contra o mesmo Postgres compartilhado — não reproduziu nas execuções seguintes, tratado como ambiental, não investigado a fundo). Verificação em navegador real via Playwright headless: dump de DOM confirmando os 5 rótulos corretos em `/products/{types,groups,subgroups,brands,units}`, screenshots confirmando visualmente o submenu aninhado "Grupos" expandido mostrando "Grupos"/"Subgrupos", a tela de Subgrupos com dropdown "Grupo" + campo "Nome do subgrupo" + coluna "Grupo" na tabela, e o painel "Ver subgrupos" dentro de um grupo específico também com "Nome do subgrupo". Linhas de teste acumuladas nos 5 catálogos ao longo do dia (múltiplas rodadas de suíte + smoke tests) desativadas ao final — só sobraram duas linhas de subgrupo não reconhecidas como teste automatizado ("teste"/"qqweqw", possivelmente exploração manual do próprio usuário) deliberadamente preservadas, não mexidas.