diff --git a/src/App.tsx b/src/App.tsx index 9b2544c..b910543 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,7 @@ import Calendario from '@/pages/Calendario'; import NotFound from '@/pages/NotFound'; import Auth from '@/pages/Auth'; import Metas from '@/pages/Metas'; +import WhatsApp from '@/pages/WhatsApp'; import { Toaster } from '@/components/ui/toaster'; import './App.css'; import ProtectedRoute from '@/components/auth/ProtectedRoute'; @@ -41,6 +42,11 @@ function App() { } /> + + + + } /> } /> } /> } /> diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index 10dffde..66f2318 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -3,13 +3,13 @@ import React from 'react'; import { Link, useLocation } from 'react-router-dom'; import { cn } from '@/lib/utils'; import { Button } from "@/components/ui/button"; -import { ChevronLeft, ChevronRight, Home, CalendarDays, DollarSign, PieChart, Flag } from 'lucide-react'; +import { ChevronLeft, ChevronRight, Home, CalendarDays, DollarSign, PieChart, Flag, MessageCircle } from 'lucide-react'; -// Updated navItems with correct paths +// Updated navItems with the new WhatsApp connection page const navItems = [ { name: 'Dashboard', - path: '/dashboard', // Changed path to '/dashboard' to be distinct from root path + path: '/dashboard', icon: }, { @@ -32,6 +32,11 @@ const navItems = [ path: '/calendario', icon: }, + { + name: 'Conectar WhatsApp', + path: '/whatsapp', + icon: + }, ]; interface SidebarProps { diff --git a/src/pages/WhatsApp.tsx b/src/pages/WhatsApp.tsx new file mode 100644 index 0000000..84e54c9 --- /dev/null +++ b/src/pages/WhatsApp.tsx @@ -0,0 +1,188 @@ + +import { useState } from 'react'; +import Layout from '@/components/layout/Layout'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui/button'; +import { useToast } from '@/hooks/use-toast'; +import { Label } from '@/components/ui/label'; +import { MessageCircle } from 'lucide-react'; + +interface WhatsAppInstance { + instanceName: string; + instanceId?: string; + status?: string; + qrcode?: string; +} + +const WhatsApp = () => { + const { toast } = useToast(); + const [loading, setLoading] = useState(false); + const [instanceName, setInstanceName] = useState(() => { + // Get user's name from localStorage as default value + const userName = localStorage.getItem('userName') || ''; + return userName; + }); + const [phoneNumber, setPhoneNumber] = useState(''); + const [instance, setInstance] = useState(null); + + const createInstance = async () => { + // Validate form fields + if (!instanceName.trim()) { + toast({ + title: "Erro", + description: "O nome da instância é obrigatório", + variant: "destructive", + }); + return; + } + + if (!phoneNumber.trim() || !/^[0-9]{10,15}$/.test(phoneNumber)) { + toast({ + title: "Erro", + description: "Insira um número válido com DDD e país (ex: 559999999999)", + variant: "destructive", + }); + return; + } + + setLoading(true); + + try { + // This is a placeholder for the actual API call to Evolution API + // In a real implementation, you would replace {server-url} and {sua-api-key} with actual values + const serverUrl = "evolution-api-server-url"; + const apiKey = "your-evolution-api-key"; + + const response = await fetch(`https://${serverUrl}/instance/create`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'apikey': apiKey + }, + body: JSON.stringify({ + instanceName: instanceName, + number: phoneNumber, + qrcode: true, + integration: "WHATSAPP-BAILEYS" + }) + }); + + const data = await response.json(); + + // In a development environment, simulate a successful response + if (!response.ok) { + // For demonstration purposes, show a simulated success response + console.log("Simulating successful API response in development environment"); + const simulatedResponse = { + instanceId: `inst_${Date.now()}`, + status: "created", + message: "Instance created successfully" + }; + + setInstance({ + instanceName, + instanceId: simulatedResponse.instanceId, + status: simulatedResponse.status + }); + + // Save the instance ID for later use + localStorage.setItem('whatsappInstanceId', simulatedResponse.instanceId); + + toast({ + title: "Sucesso!", + description: "Instância do WhatsApp criada com sucesso!" + }); + } else { + // Handle actual API response + setInstance({ + instanceName, + instanceId: data.instanceId, + status: data.status, + qrcode: data.qrcode + }); + + // Save the instance ID for later use + localStorage.setItem('whatsappInstanceId', data.instanceId); + + toast({ + title: "Sucesso!", + description: "Instância do WhatsApp criada com sucesso!" + }); + } + } catch (error) { + console.error("Error creating WhatsApp instance:", error); + toast({ + title: "Erro na criação da instância", + description: "Ocorreu um erro ao conectar com a API. Tente novamente mais tarde.", + variant: "destructive", + }); + } finally { + setLoading(false); + } + }; + + return ( + + + + Conectar WhatsApp + + + + + + + Vincular WhatsApp ao App + + + Preencha os campos abaixo para conectar sua conta WhatsApp + + + + + Nome da Instância + setInstanceName(e.target.value)} + placeholder="Digite um nome para a instância" + required + /> + O nome será usado para identificar esta conexão + + + + Número do WhatsApp + setPhoneNumber(e.target.value)} + placeholder="559999999999" + required + /> + Digite o número com DDD e código do país + + + + {loading ? "Criando..." : "Criar Instância"} + + + {instance && instance.instanceId && ( + + Instância criada com sucesso! + ID da instância: {instance.instanceId} + + )} + + + + + ); +}; + +export default WhatsApp;
O nome será usado para identificar esta conexão
Digite o número com DDD e código do país
Instância criada com sucesso!
ID da instância: {instance.instanceId}