From 7e3604ed4ae2b6b07c9108bbe5add35131087b60 Mon Sep 17 00:00:00 2001 From: Tiago Yamamoto Date: Sat, 7 Mar 2026 08:17:12 -0600 Subject: [PATCH] refactor(frontend): type legacy cart management flow --- frontend/src/app/carrinhos/page.tsx | 52 ++++------ frontend/src/components/CarrinhoForm.tsx | 56 +++++------ frontend/src/components/CarrinhoList.tsx | 31 +++--- frontend/src/hooks/useCarrinhos.ts | 115 +++++++++++------------ frontend/src/services/carrinhoService.ts | 37 ++++++-- frontend/src/types/legacyEntities.ts | 11 +++ 6 files changed, 158 insertions(+), 144 deletions(-) diff --git a/frontend/src/app/carrinhos/page.tsx b/frontend/src/app/carrinhos/page.tsx index 1d99566..e9e9095 100644 --- a/frontend/src/app/carrinhos/page.tsx +++ b/frontend/src/app/carrinhos/page.tsx @@ -1,24 +1,24 @@ -'use client'; +'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; -import { getCurrentUserWithRetry } from '@/lib/appwrite'; // Usar a função com retry +import { getCurrentUserWithRetry } from '@/lib/appwrite'; import { Models } from '@/lib/appwrite'; import { List, Plus } from 'lucide-react'; import Header from '@/components/Header'; import CarrinhoForm from '@/components/CarrinhoForm'; import CarrinhoList from '@/components/CarrinhoList'; import { useCarrinhos, CarrinhoFormData } from '@/hooks/useCarrinhos'; +import { CarrinhoDocument } from '@/types/legacyEntities'; const GestaoCarrinhos = () => { const router = useRouter(); const [user, setUser] = useState | null>(null); - const [editing, setEditing] = useState(null); + const [editing, setEditing] = useState(null); const [activeTab, setActiveTab] = useState<'lista' | 'cadastro'>('lista'); const [searchTerm, setSearchTerm] = useState(''); const [checkingAuth, setCheckingAuth] = useState(true); - // Mover o hook useCarrinhos para antes da renderização condicional const { carrinhos, loading, @@ -44,10 +44,9 @@ const GestaoCarrinhos = () => { return; } setUser(currentUser); - // Carregar carrinhos apenas após autenticação bem-sucedida await listarCarrinhos(); } catch (error) { - console.error('❌ Usuário não autenticado:', error); + console.error('Usurio no autenticado:', error); router.push('/'); } finally { setCheckingAuth(false); @@ -55,7 +54,7 @@ const GestaoCarrinhos = () => { }; initializeUser(); - }, [router]); // Remover listarCarrinhos das dependências + }, [router, listarCarrinhos]); const handleFormSubmit = async (formData: CarrinhoFormData): Promise => { if (editing) { @@ -65,17 +64,17 @@ const GestaoCarrinhos = () => { setActiveTab('lista'); } return success; - } else { - const success = await cadastrarCarrinho(formData); - if (success) { - setTimeout(() => setActiveTab('lista'), 2000); - } - return success; } + + const success = await cadastrarCarrinho(formData); + if (success) { + setTimeout(() => setActiveTab('lista'), 2000); + } + return success; }; - const handleEdit = (car: Models.Document) => { - setEditing(car); + const handleEdit = (carrinho: CarrinhoDocument) => { + setEditing(carrinho); setActiveTab('cadastro'); }; @@ -94,9 +93,10 @@ const GestaoCarrinhos = () => { setSearchTerm(term); if (term.trim()) { await buscarCarrinhos(term, 1); - } else { - await listarCarrinhos(1); + return; } + + await listarCarrinhos(1); }; const handleNextPage = () => { @@ -106,24 +106,12 @@ const GestaoCarrinhos = () => { } }; - // Tela de carregamento durante verificação de autenticação - if (checkingAuth) { + if (checkingAuth || !user) { return (
-

Verificando autenticação...

-
-
- ); - } - - if (!user) { - return ( -
-
-
-

Verificando autenticação...

+

Verificando autenticao...

); @@ -133,7 +121,7 @@ const GestaoCarrinhos = () => {
diff --git a/frontend/src/components/CarrinhoForm.tsx b/frontend/src/components/CarrinhoForm.tsx index e2b75d2..5fb39ee 100644 --- a/frontend/src/components/CarrinhoForm.tsx +++ b/frontend/src/components/CarrinhoForm.tsx @@ -1,22 +1,27 @@ -import React, { useState, useEffect } from 'react'; -import { Models } from '@/lib/appwrite'; +import React, { useState, useEffect } from 'react'; import { CarrinhoFormData } from '@/hooks/useCarrinhos'; import { usuarioService } from '@/services/usuarioService'; +import { CarrinhoDocument } from '@/types/legacyEntities'; interface CarrinhoFormProps { onSubmit: (data: CarrinhoFormData) => Promise; onCancel?: () => void; - initialData?: Models.Document | null; + initialData?: CarrinhoDocument | null; loading?: boolean; } +interface UsuarioOption { + $id: string; + 'nome-civil'?: string; + 'nome-social'?: string; +} + const CarrinhoForm: React.FC = ({ onSubmit, onCancel, initialData, loading = false }) => { - // Inicializar com valores padrão para evitar problemas de input controlado/não controlado const [formData, setFormData] = useState({ usuarios: '', itens: [], @@ -24,24 +29,21 @@ const CarrinhoForm: React.FC = ({ }); const [itemsText, setItemsText] = useState(''); const [quantText, setQuantText] = useState(''); - const [usuariosList, setUsuariosList] = useState([]); + const [usuariosList, setUsuariosList] = useState([]); const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null); useEffect(() => { if (initialData) { - const usuarios = (initialData as any).usuarios || ''; - const itens = (initialData as any).itens || []; - const quantidade = (initialData as any).quantidade || []; - - setFormData({ - usuarios, - itens, - quantidade - }); + const usuarios = typeof initialData.usuarios === 'string' + ? initialData.usuarios + : initialData.usuarios?.$id || ''; + const itens = initialData.itens || []; + const quantidade = Array.isArray(initialData.quantidade) ? initialData.quantidade : []; + + setFormData({ usuarios, itens, quantidade }); setItemsText(itens.join('\n')); setQuantText(quantidade.join('\n')); } else { - // Resetar para valores padrão setFormData({ usuarios: '', itens: [], quantidade: [] }); setItemsText(''); setQuantText(''); @@ -53,10 +55,10 @@ const CarrinhoForm: React.FC = ({ try { const res = await usuarioService.listar(1, 50); if (res.success) { - setUsuariosList(res.documents); + setUsuariosList((res.documents || []) as UsuarioOption[]); } } catch (error) { - console.error('Erro ao carregar usuários:', error); + console.error('Erro ao carregar usurios:', error); } }; loadUsuarios(); @@ -76,7 +78,7 @@ const CarrinhoForm: React.FC = ({ if (success) { setMessage({ type: 'success', - text: initialData ? '🔄 Carrinho atualizado com sucesso!' : '🎉 Carrinho cadastrado com sucesso!' + text: initialData ? 'Carrinho atualizado com sucesso!' : 'Carrinho cadastrado com sucesso!' }); if (!initialData) { @@ -111,12 +113,12 @@ const CarrinhoForm: React.FC = ({ return (

- {initialData ? '✏️ Editar Carrinho' : 'Cadastrar Novo Carrinho'} + {initialData ? 'Editar Carrinho' : 'Cadastrar Novo Carrinho'}

{message && (
@@ -127,20 +129,20 @@ const CarrinhoForm: React.FC = ({
@@ -153,7 +155,7 @@ const CarrinhoForm: React.FC = ({