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

-
- )} -
-
+ + +
);