4.5 KiB
Melhorias no Modal de Edição de Produtos
Status (pronto x faltando)
Pronto
- Conteúdo descrito neste documento.
Faltando
- Confirmar no código o estado real das funcionalidades e atualizar esta seção conforme necessário.
Resumo das Implementações
Este documento descreve as melhorias implementadas no modal de edição de produtos conforme solicitado pelo usuário.
Implementações Realizadas
1. ✅ Correção do "[object Object]" no Campo Produto do Catálogo
Problema: O campo "Produto do Catálogo" exibia "[object Object]" em vez do nome do produto.
Solução: Implementada lógica para extrair corretamente o nome do produto:
// Extrair o nome do produto do catálogo
let catalogoNome = "";
if (produtoData.catalogoDescricao) {
catalogoNome = produtoData.catalogoDescricao;
} else if (produtoData["catalogo-produtos"]) {
if (
typeof produtoData["catalogo-produtos"] === "object" &&
produtoData["catalogo-produtos"].nome
) {
catalogoNome = produtoData["catalogo-produtos"].nome;
} else if (typeof produtoData["catalogo-produtos"] === "string") {
catalogoNome = produtoData["catalogo-produtos"];
}
}
Resultado: Agora o campo exibe corretamente o nome do produto (ex: "*SAB CETAPHIL DERMOPE ESPUM 250ML").
2. ✅ Campos Obrigatórios
Implementação: Todos os campos do formulário foram marcados como obrigatórios:
- Indicador Visual: Asterisco vermelho (*) em todos os labels
- Validação HTML: Atributo
requiredem todos os inputs - Campos Afetados:
- Produto do Catálogo
- Preço Original
- Preço Atual
- Quantidade em Estoque
- Código EAN
- Laboratório/Fabricante
- Categoria
- Data de Vencimento
- Número do Lote
- Princípio Ativo
- Concentração
- Forma Farmacêutica
- Registro ANVISA
- Prescrição
- Observações
3. ✅ Validação de Data de Vencimento
Regra de Negócio: Produtos não podem ter data de vencimento anterior à data atual.
Implementações:
- Validação no Frontend:
const dataVencimento = formData["data-vencimento"];
if (dataVencimento) {
const hoje = new Date();
hoje.setHours(0, 0, 0, 0);
const dataVenc = new Date(dataVencimento);
if (dataVenc < hoje) {
toast.error("A data de vencimento não pode ser anterior à data atual");
return;
}
}
- Restrição no Input:
<input
type="date"
min={dataMinima} // Data mínima = hoje
// ... outros atributos
/>
Comportamento:
- O calendário não permite selecionar datas anteriores a hoje
- Se o usuário tentar submeter com data inválida, exibe erro: "A data de vencimento não pode ser anterior à data atual"
4. ✅ Melhoria Visual - Blur de Fundo
Antes:
<div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
Depois:
<div className="fixed inset-0 backdrop-blur-sm bg-gray-900/20 flex items-center justify-center z-50">
Resultado: Fundo com efeito blur elegante em vez do fundo preto sólido.
5. ✅ Atualização do Texto do Botão
Mudança: Botão alterado de "Salvar Alterações" para "Atualizar Produto" (mais específico).
Estados do Botão:
- Normal: "Atualizar Produto"
- Loading: "Atualizando..." (com spinner)
Experiência do Usuário Melhorada
Antes das Melhorias:
- ❌ Campo mostrando "[object Object]"
- ❌ Campos opcionais (sem validação)
- ❌ Possibilidade de produtos vencidos
- ❌ Fundo preto simples
- ❌ Texto genérico no botão
Após as Melhorias:
- ✅ Nome do produto exibido corretamente
- ✅ Todos os campos obrigatórios com indicação visual
- ✅ Validação de data impedindo produtos vencidos
- ✅ Fundo elegante com blur
- ✅ Texto específico "Atualizar Produto"
Validações Implementadas
- Obrigatoriedade: Todos os campos devem ser preenchidos
- Data de Vencimento: Não pode ser anterior à data atual
- Tipos de Dados:
- Números para preços e quantidade
- Texto para campos descritivos
- Data para vencimento
- Select para prescrição
Impacto
- UX: Experiência muito mais intuitiva e profissional
- Consistência: Dados sempre completos no banco
- Segurança: Produtos vencidos não podem ser cadastrados
- Visual: Interface moderna com blur de fundo
Data da Implementação
8 de setembro de 2025
Arquivos Modificados
src/components/EditProdutoModal.tsx- Todas as melhorias implementadasMELHORIAS_MODAL_EDICAO_PRODUTOS.md- Esta documentação