O que é
O Carousel de Grupos de Produtos é a faixa horizontal de grupos usada para filtrar produtos com clique.
Ao selecionar um grupo:
- O filtro de grupo é aplicado.
- Os produtos são buscados no backend já filtrados.
- A lista da tela é atualizada.
Ao clicar de novo no mesmo grupo, a seleção é removida.
Onde é usado
-
Nova Venda:
src/screens/nova-venda/components/Products/NewSaleProducts.tsx
-
Catálogo:
src/screens/catalogo/components/Content/CatalogContent.tsx
-
Componente compartilhado:
src/components/ProductGroupCarousel/index.tsx
Comportamento principal
Seleção e filtro
- Clique em um grupo seleciona.
- Clique no mesmo grupo desmarca.
- O componente dispara busca de produtos por grupo.
Loading visual
- Enquanto busca produtos, o grupo clicado mostra spinner.
- Se o grupo tiver imagem, o spinner aparece sobre a imagem.
- Se não tiver imagem, aparece placeholder com ícone
Cubee spinner quando aplicável. - Enquanto carrega, os botões de grupo ficam desabilitados.
Carregamento da imagem do grupo
- Enquanto a imagem do grupo é carregada, aparece
Skeletoncircular. - Erros de retorno da API de imagem são tratados no serviço (
blobinválido/json de erro).
Cache
Foi aplicado cache com React Query no fetch por grupo para evitar chamadas repetidas ao voltar para filtros já consultados.
Chave de cache (resumida): empresa + grupo + texto de busca.
Configuração atual:
staleTime: 10 minutosgcTime: 30 minutos
Arquivo: src/components/ProductGroupCarousel/index.tsx
Endpoints envolvidos
Grupos (lista do carousel)
POST /products/productListGroup/
Imagem do grupo
GET /products/imagemGrupo/{groupId}
Produtos filtrados por grupo (principal)
GET /products/getDetails- Parâmetros usados no fluxo:
codVendcodEmpcodGruProdcodProds(quando aplicável)
Fallback (quando necessário)
GET /ppid/getPricesGET /products/estoqueGET /products/listou/products/listPesquisa
Integração com ERP Sankhya
Esta funcionalidade depende do cadastro de grupos no Sankhya, na tela:
"Grupos de Produtos/Serviços"
Nessa tela do ERP é possível:
- Cadastrar novos grupos de produtos.
- Editar grupos existentes.
- Cadastrar/atualizar as imagens dos grupos.
Impacto direto no web:
- Novos grupos passam a aparecer no carousel.
- Imagens cadastradas passam a ser exibidas no grupo correspondente.
Arquivos-chave
src/components/ProductGroupCarousel/index.tsxsrc/store/catalog.slice.tssrc/service/catalog/catalog.service.tssrc/hooks/usePrivateImage.tssrc/service/get-private-image-url.ts