From 6d6734c17d4fc2425a2deb110ff9bdb9342c0745 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Tue, 20 May 2025 20:15:21 +0000 Subject: [PATCH] Refactor: Split GruposWhatsApp.tsx into smaller components Split the large GruposWhatsApp.tsx file into smaller, more manageable components to improve readability and maintainability. This refactoring aims to improve code organization without altering existing functionality. --- .../whatsappGroups/CreateGroupForm.tsx | 171 +++++++++++++ src/components/whatsappGroups/DebugInfo.tsx | 35 +++ src/components/whatsappGroups/GroupsList.tsx | 81 ++++++ src/pages/GruposWhatsApp.tsx | 241 +----------------- 4 files changed, 295 insertions(+), 233 deletions(-) create mode 100644 src/components/whatsappGroups/CreateGroupForm.tsx create mode 100644 src/components/whatsappGroups/DebugInfo.tsx create mode 100644 src/components/whatsappGroups/GroupsList.tsx diff --git a/src/components/whatsappGroups/CreateGroupForm.tsx b/src/components/whatsappGroups/CreateGroupForm.tsx new file mode 100644 index 0000000..912e298 --- /dev/null +++ b/src/components/whatsappGroups/CreateGroupForm.tsx @@ -0,0 +1,171 @@ + +import { useState } from 'react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; +import { Loader2, Plus } from 'lucide-react'; +import { cadastrarGrupoWhatsApp } from '@/services/gruposWhatsAppService'; +import { useToast } from '@/hooks/use-toast'; + +interface CreateGroupFormProps { + userEmail: string; + onSuccess: () => void; +} + +const CreateGroupForm = ({ userEmail, onSuccess }: CreateGroupFormProps) => { + const { toast } = useToast(); + const [cadastrando, setCadastrando] = useState(false); + const [nomeGrupo, setNomeGrupo] = useState(''); + const [errorMessage, setErrorMessage] = useState(null); + const [debugInfo, setDebugInfo] = useState(null); + + // Cadastrar novo grupo ou atualizar workflow se necessário + const handleCadastrarGrupo = async () => { + setErrorMessage(null); + setDebugInfo(null); + + if (!userEmail) { + toast({ + title: 'Erro', + description: 'Você precisa estar logado para cadastrar um grupo', + variant: 'destructive', + }); + return; + } + + if (!nomeGrupo.trim()) { + toast({ + title: 'Atenção', + description: 'Digite um nome para o grupo', + variant: 'destructive', + }); + return; + } + + setCadastrando(true); + try { + console.log("Iniciando processo de cadastro de grupo..."); + const grupo = await cadastrarGrupoWhatsApp(nomeGrupo.trim()); + + if (grupo) { + let successMessage = 'Grupo registrado com sucesso'; + let variant: 'default' | 'destructive' = 'default'; + + if (grupo.workflow_id) { + successMessage = 'Grupo cadastrado e workflow criado com sucesso!'; + } else { + successMessage = 'Grupo cadastrado, mas falha ao criar workflow de automação.'; + setDebugInfo('O grupo foi criado no Supabase, mas houve um problema ao criar o workflow no n8n. Verifique os logs do console para mais detalhes.'); + variant = 'destructive'; + } + + toast({ + title: grupo.workflow_id ? 'Sucesso' : 'Atenção', + description: successMessage, + variant: variant, + }); + + // Resetar o campo de nome + setNomeGrupo(''); + + // Atualizar a lista de grupos + onSuccess(); + } else { + setErrorMessage('Não foi possível registrar o grupo. Verifique a conexão com o Supabase.'); + toast({ + title: 'Erro', + description: 'Não foi possível registrar o grupo', + variant: 'destructive', + }); + } + } catch (error) { + console.error('Erro ao cadastrar grupo:', error); + let errorMsg = 'Erro desconhecido'; + if (error instanceof Error) { + errorMsg = error.message; + + // Tentar extrair detalhes específicos do erro se existirem + if (errorMsg.includes('Status')) { + const statusMatch = errorMsg.match(/Status (\d+)/); + if (statusMatch && statusMatch[1]) { + setDebugInfo(`Código de status HTTP da API: ${statusMatch[1]}`); + } + } + } + + setErrorMessage('Erro ao cadastrar grupo: ' + errorMsg); + toast({ + title: 'Erro', + description: 'Não foi possível registrar o grupo', + variant: 'destructive', + }); + } finally { + setCadastrando(false); + } + }; + + return ( + + + Cadastrar novo grupo + + Preencha as informações abaixo para cadastrar um novo grupo do WhatsApp + + + +
+ + setNomeGrupo(e.target.value)} + /> +

+ Digite um nome descritivo para o grupo que você irá criar +

+
+ + + +
+

Após cadastrar:

+
    +
  1. Adicione o número (61)99244-4275 ao grupo do WhatsApp que deseja automatizar
  2. +
  3. Envie uma mensagem neste grupo com o seguinte texto:
  4. +
+ +
+ {userEmail} +
+ +

+ Copie e cole o email exatamente como aparece acima +

+
+ + {errorMessage &&

{errorMessage}

} + {debugInfo &&

{debugInfo}

} +
+
+ ); +}; + +export default CreateGroupForm; diff --git a/src/components/whatsappGroups/DebugInfo.tsx b/src/components/whatsappGroups/DebugInfo.tsx new file mode 100644 index 0000000..59cb378 --- /dev/null +++ b/src/components/whatsappGroups/DebugInfo.tsx @@ -0,0 +1,35 @@ + +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; + +interface DebugInfoProps { + errorMessage: string | null; + debugInfo: string | null; +} + +const DebugInfo = ({ errorMessage, debugInfo }: DebugInfoProps) => { + if (!errorMessage && !debugInfo) return null; + + return ( + <> + {errorMessage && ( + + Erro ao cadastrar grupo + + {errorMessage} + + + )} + + {debugInfo && ( + + Informações de depuração + + {debugInfo} + + + )} + + ); +}; + +export default DebugInfo; diff --git a/src/components/whatsappGroups/GroupsList.tsx b/src/components/whatsappGroups/GroupsList.tsx new file mode 100644 index 0000000..207a8bf --- /dev/null +++ b/src/components/whatsappGroups/GroupsList.tsx @@ -0,0 +1,81 @@ + +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; +import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { Loader2, MessageSquare } from 'lucide-react'; +import { WhatsAppGroup } from '@/types/financialTypes'; + +interface GroupsListProps { + grupos: WhatsAppGroup[]; + carregando: boolean; +} + +const GroupsList = ({ grupos, carregando }: GroupsListProps) => { + return ( + + + Seus grupos cadastrados + + Lista de grupos do WhatsApp que você cadastrou + + + + {carregando ? ( +
+ +
+ ) : grupos.length > 0 ? ( + + + + ID + Nome do grupo + Status + Workflow + Cadastro + + + + {grupos.map((grupo) => ( + + {grupo.id} + + {grupo.nome_grupo || ( + + {grupo.remote_jid ? 'Sem nome definido' : 'Aguardando vínculo...'} + + )} + + + + {grupo.remote_jid ? 'Ativo' : 'Pendente'} + + + + {grupo.workflow_id ? ( + + Configurado + + ) : ( + + Não configurado + + )} + + {new Date(grupo.created_at).toLocaleDateString()} + + ))} + +
+ ) : ( +
+ +

Você ainda não cadastrou nenhum grupo

+
+ )} +
+
+ ); +}; + +export default GroupsList; diff --git a/src/pages/GruposWhatsApp.tsx b/src/pages/GruposWhatsApp.tsx index 51b4287..d1ee560 100644 --- a/src/pages/GruposWhatsApp.tsx +++ b/src/pages/GruposWhatsApp.tsx @@ -2,26 +2,21 @@ import { useState, useEffect } from 'react'; import Layout from '@/components/layout/Layout'; import { Button } from '@/components/ui/button'; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; -import { Badge } from '@/components/ui/badge'; -import { Loader2, Plus, RefreshCw, MessageSquare, Edit } from 'lucide-react'; -import { cadastrarGrupoWhatsApp, listarGruposWhatsApp } from '@/services/gruposWhatsAppService'; +import { RefreshCw } from 'lucide-react'; +import { listarGruposWhatsApp } from '@/services/gruposWhatsAppService'; import { WhatsAppGroup } from '@/types/financialTypes'; import { useToast } from '@/hooks/use-toast'; -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; -import { Input } from '@/components/ui/input'; -import { Label } from '@/components/ui/label'; +import CreateGroupForm from '@/components/whatsappGroups/CreateGroupForm'; +import GroupsList from '@/components/whatsappGroups/GroupsList'; +import DebugInfo from '@/components/whatsappGroups/DebugInfo'; const GruposWhatsApp = () => { const { toast } = useToast(); const [grupos, setGrupos] = useState([]); const [carregando, setCarregando] = useState(true); - const [cadastrando, setCadastrando] = useState(false); const [userEmail, setUserEmail] = useState(''); const [errorMessage, setErrorMessage] = useState(null); const [debugInfo, setDebugInfo] = useState(null); - const [nomeGrupo, setNomeGrupo] = useState(''); // Buscar os grupos do usuário ao carregar a página const buscarGrupos = async () => { @@ -53,91 +48,6 @@ const GruposWhatsApp = () => { buscarGrupos(); }, []); - // Cadastrar novo grupo ou atualizar workflow se necessário - const handleCadastrarGrupo = async () => { - setErrorMessage(null); - setDebugInfo(null); - - if (!userEmail) { - toast({ - title: 'Erro', - description: 'Você precisa estar logado para cadastrar um grupo', - variant: 'destructive', - }); - return; - } - - if (!nomeGrupo.trim()) { - toast({ - title: 'Atenção', - description: 'Digite um nome para o grupo', - variant: 'destructive', - }); - return; - } - - setCadastrando(true); - try { - console.log("Iniciando processo de cadastro de grupo..."); - const grupo = await cadastrarGrupoWhatsApp(nomeGrupo.trim()); - - if (grupo) { - let successMessage = 'Grupo registrado com sucesso'; - let variant: 'default' | 'destructive' = 'default'; - - if (grupo.workflow_id) { - successMessage = 'Grupo cadastrado e workflow criado com sucesso!'; - } else { - successMessage = 'Grupo cadastrado, mas falha ao criar workflow de automação.'; - setDebugInfo('O grupo foi criado no Supabase, mas houve um problema ao criar o workflow no n8n. Verifique os logs do console para mais detalhes.'); - variant = 'destructive'; - } - - toast({ - title: grupo.workflow_id ? 'Sucesso' : 'Atenção', - description: successMessage, - variant: variant, - }); - - // Resetar o campo de nome - setNomeGrupo(''); - - // Atualizar a lista de grupos - buscarGrupos(); - } else { - setErrorMessage('Não foi possível registrar o grupo. Verifique a conexão com o Supabase.'); - toast({ - title: 'Erro', - description: 'Não foi possível registrar o grupo', - variant: 'destructive', - }); - } - } catch (error) { - console.error('Erro ao cadastrar grupo:', error); - let errorMsg = 'Erro desconhecido'; - if (error instanceof Error) { - errorMsg = error.message; - - // Tentar extrair detalhes específicos do erro se existirem - if (errorMsg.includes('Status')) { - const statusMatch = errorMsg.match(/Status (\d+)/); - if (statusMatch && statusMatch[1]) { - setDebugInfo(`Código de status HTTP da API: ${statusMatch[1]}`); - } - } - } - - setErrorMessage('Erro ao cadastrar grupo: ' + errorMsg); - toast({ - title: 'Erro', - description: 'Não foi possível registrar o grupo', - variant: 'destructive', - }); - } finally { - setCadastrando(false); - } - }; - return (
@@ -156,144 +66,9 @@ const GruposWhatsApp = () => {
- {errorMessage && ( - - Erro ao cadastrar grupo - - {errorMessage} - - - )} - - {debugInfo && ( - - Informações de depuração - - {debugInfo} - - - )} - - - - Cadastrar novo grupo - - Preencha as informações abaixo para cadastrar um novo grupo do WhatsApp - - - -
- - setNomeGrupo(e.target.value)} - /> -

- Digite um nome descritivo para o grupo que você irá criar -

-
- - - -
-

Após cadastrar:

-
    -
  1. Adicione o número (61)99244-4275 ao grupo do WhatsApp que deseja automatizar
  2. -
  3. Envie uma mensagem neste grupo com o seguinte texto:
  4. -
- -
- {userEmail} -
- -

- Copie e cole o email exatamente como aparece acima -

-
-
-
- - - - Seus grupos cadastrados - - Lista de grupos do WhatsApp que você cadastrou - - - - {carregando ? ( -
- -
- ) : grupos.length > 0 ? ( - - - - ID - Nome do grupo - Status - Workflow - Cadastro - - - - {grupos.map((grupo) => ( - - {grupo.id} - - {grupo.nome_grupo || ( - - {grupo.remote_jid ? 'Sem nome definido' : 'Aguardando vínculo...'} - - )} - - - - {grupo.remote_jid ? 'Ativo' : 'Pendente'} - - - - {grupo.workflow_id ? ( - - Configurado - - ) : ( - - Não configurado - - )} - - {new Date(grupo.created_at).toLocaleDateString()} - - ))} - -
- ) : ( -
- -

Você ainda não cadastrou nenhum grupo

-
- )} -
-
+ + +
);