saveinmed/saveinmed-frontend/IMPLEMENTACAO_MODAL_EDICAO_PRODUTOS.md
Tiago Yamamoto b39caf0fd0 first commit
2025-12-17 13:58:26 -03:00

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:

  1. Aparecia um popup com detalhes do produto
  2. Ao fechar, ia para a tela de "editar produto" (mudando o nome de "cadastrar" para "atualizar")
  3. O usuário queria que a edição fosse feita diretamente no modal, sem sair da tela atual
  4. 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

  1. Usuário clica no ícone de lápis → Abre modal de edição
  2. Modal carrega dados do produto → Formulário preenchido automaticamente
  3. Usuário edita campos desejados → Validação em tempo real
  4. Usuário clica "Salvar Alterações" → Chamada para API
  5. 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:

  1. Modal recebe produto via props
  2. FormData é construído com alterações
  3. Chamada para produtoService.atualizar()
  4. Response validado
  5. 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.