4.6 KiB
4.6 KiB
Implementação do Modal de Edição de Produtos
Problema Resolvido
O usuário relatou que ao clicar no lápis para editar um produto na gestão de catálogo de produtos:
- Aparecia um popup com detalhes do produto
- Ao fechar, ia para a tela de "editar produto" (mudando o nome de "cadastrar" para "atualizar")
- O usuário queria que a edição fosse feita diretamente no modal, sem sair da tela atual
- A parte de "cadastrar" deveria permanecer apenas para cadastro
Solução Implementada
1. Criação do Modal de Edição (EditProdutoModal.tsx)
Características:
- ✅ Modal completo para edição de produtos
- ✅ Formulário com todos os campos necessários
- ✅ Validação e tratamento de erros
- ✅ Estados de loading durante salvamento
- ✅ Integração com o serviço de produtos
- ✅ Salvamento direto no banco de dados
Campos do Formulário:
- Produto do Catálogo (obrigatório)
- 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 (select com opções)
- Observações (textarea)
2. Modificações na Página Principal (catalogo-produtos/page.tsx)
Separação Clara de Responsabilidades:
Antes:
- ❌ Botão de edição levava para aba "cadastro"
- ❌ Formulário de cadastro era reutilizado para edição
- ❌ Modal de detalhes interferia com edição
Depois:
- ✅ Botão de edição abre modal específico para edição
- ✅ Aba "cadastrar" permanece apenas para cadastro
- ✅ Modal de detalhes separado do modal de edição
Novos Estados Adicionados:
const [editModalOpen, setEditModalOpen] = useState(false);
Novas Funções:
const handleSaveEdit = async (formData: any): Promise<boolean> => {
// Salva alterações diretamente via modal
// Recarrega lista automaticamente
// Fecha modal após sucesso
};
3. Fluxo de Edição Implementado
- Usuário clica no ícone de lápis → Abre modal de edição
- Modal carrega dados do produto → Formulário preenchido automaticamente
- Usuário edita campos desejados → Validação em tempo real
- Usuário clica "Salvar Alterações" → Chamada para API
- Sucesso no salvamento → Lista recarregada + Modal fechado + Toast de sucesso
4. Benefícios da Implementação
UX Melhorada:
- ✅ Edição rápida sem trocar de tela
- ✅ Contexto preservado (usuário não perde posição na lista)
- ✅ Feedback visual claro (loading, success, error)
- ✅ Formulário responsivo
Funcionalidade:
- ✅ Separação clara entre cadastro e edição
- ✅ Todos os dados salvos no banco de dados
- ✅ Validação adequada dos campos
- ✅ Tratamento de erros robusto
Código:
- ✅ Componente reutilizável
- ✅ Props bem definidas
- ✅ TypeScript adequado
- ✅ Estados gerenciados corretamente
5. Estrutura de Arquivos
src/
├── components/
│ ├── EditProdutoModal.tsx # ✅ NOVO - Modal de edição
│ ├── DetalheProdutoModal.tsx # Mantido - Modal de detalhes
│ ├── CatalogoProdutoForm.tsx # Mantido - Formulário de cadastro
│ └── CatalogoProdutosList.tsx # Mantido - Lista de produtos
└── app/
└── catalogo-produtos/
└── page.tsx # ✅ MODIFICADO - Integração com modal
6. Integração com Backend
Serviço Utilizado:
await produtoService.atualizar(produtoId, dadosAtualizados);
Fluxo de Dados:
- Modal recebe produto via props
- FormData é construído com alterações
- Chamada para
produtoService.atualizar() - Response validado
- Lista recarregada em caso de sucesso
7. Demonstração Visual
Antes:
[Lista] → [Clique Lápis] → [Modal Detalhes] → [Fechar] → [Tela Edição]
Depois:
[Lista] → [Clique Lápis] → [Modal Edição] → [Salvar] → [Lista Atualizada]
8. Exemplo de Uso
// Componente principal
<EditProdutoModal
produto={editingCatalogo}
isOpen={editModalOpen}
onClose={() => {
setEditModalOpen(false);
setEditingCatalogo(null);
}}
onSave={handleSaveEdit}
loading={isCreating}
/>
Resultado Final
✅ Problema resolvido completamente:
- Edição rápida e intuitiva via modal
- Cadastro permanece separado e limpo
- Dados salvos corretamente no banco
- UX significativamente melhorada
- Código organizado e manutenível
O usuário agora pode editar produtos diretamente na listagem, mantendo o contexto e a eficiência do workflow.