+ );
+};
+
+export default WhatsAppHeader;
diff --git a/src/components/whatsapp/WhatsAppManager.tsx b/src/components/whatsapp/WhatsAppManager.tsx
new file mode 100644
index 0000000..a6f54ae
--- /dev/null
+++ b/src/components/whatsapp/WhatsAppManager.tsx
@@ -0,0 +1,84 @@
+
+import { WhatsAppInstance } from '@/types/whatsAppTypes';
+import CreateInstanceForm from '@/components/whatsapp/CreateInstanceForm';
+import InstanceList from '@/components/whatsapp/InstanceList';
+import InstanceStats from '@/components/whatsapp/InstanceStats';
+import QrCodeDialog from '@/components/whatsapp/QrCodeDialog';
+import ConnectedInstanceMessage from './ConnectedInstanceMessage';
+
+interface WhatsAppManagerProps {
+ hasExistingInstance: boolean;
+ existingInstanceData: any;
+ instances: WhatsAppInstance[];
+ isRefreshing: boolean;
+ activeInstance: WhatsAppInstance | null;
+ qrDialogOpen: boolean;
+ onInstanceCreated: (instance: WhatsAppInstance) => void;
+ onViewQrCode: (instance: WhatsAppInstance) => void;
+ onDelete: (instanceId: string) => void;
+ onRestart: (instance: WhatsAppInstance) => Promise;
+ onLogout: (instance: WhatsAppInstance) => Promise;
+ onDisconnect: (instance: WhatsAppInstance) => Promise;
+ onSetPresence: (instance: WhatsAppInstance, presence: 'online' | 'offline') => Promise;
+ onRefreshInstances: () => void;
+ onStatusCheck: () => Promise;
+ setQrDialogOpen: (open: boolean) => void;
+}
+
+const WhatsAppManager = ({
+ hasExistingInstance,
+ existingInstanceData,
+ instances,
+ isRefreshing,
+ activeInstance,
+ qrDialogOpen,
+ onInstanceCreated,
+ onViewQrCode,
+ onDelete,
+ onRestart,
+ onLogout,
+ onDisconnect,
+ onSetPresence,
+ onRefreshInstances,
+ onStatusCheck,
+ setQrDialogOpen
+}: WhatsAppManagerProps) => {
+ const hasInstances = Array.isArray(instances) && instances.length > 0;
+
+ return (
+ <>
+ {/* Formulário de criação - APENAS se NÃO tiver instância conectada */}
+ {!hasExistingInstance && (
+
+ )}
+
+ {/* Mensagem quando já tem instância conectada */}
+ {hasExistingInstance && existingInstanceData && (
+
+ )}
+
+ {hasInstances && }
+
+
+
+
+ >
+ );
+};
+
+export default WhatsAppManager;
diff --git a/src/hooks/whatsappGroups/useWhatsAppInstanceVerification.ts b/src/hooks/whatsappGroups/useWhatsAppInstanceVerification.ts
deleted file mode 100644
index 4299bbe..0000000
--- a/src/hooks/whatsappGroups/useWhatsAppInstanceVerification.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-
-import { useState, useEffect } from 'react';
-import { getUserWhatsAppInstance } from '@/services/whatsAppInstanceService';
-
-interface WhatsAppInstanceData {
- instancia_zap: string | null;
- status_instancia: string | null;
- whatsapp: string | null;
-}
-
-export const useWhatsAppInstanceVerification = (userEmail: string) => {
- const [hasWhatsAppInstance, setHasWhatsAppInstance] = useState(false);
- const [checkingInstance, setCheckingInstance] = useState(true);
- const [userInstance, setUserInstance] = useState(null);
-
- const checkUserInstance = async () => {
- if (!userEmail) {
- console.log('❌ Email do usuário não fornecido');
- setCheckingInstance(false);
- return;
- }
-
- setCheckingInstance(true);
- try {
- console.log('🔍 [GRUPO] Verificando instância para criação de grupo:', userEmail);
-
- const instanceData = await getUserWhatsAppInstance(userEmail);
- console.log('📋 [GRUPO] Dados da instância encontrados:', instanceData);
-
- if (instanceData) {
- // Verificação correta: deve ter instancia_zap igual ao email E status conectado
- const hasValidInstance = !!(
- instanceData &&
- instanceData.instancia_zap &&
- instanceData.instancia_zap.trim() !== '' &&
- instanceData.instancia_zap !== 'null' &&
- instanceData.instancia_zap !== null &&
- instanceData.instancia_zap.toLowerCase() === userEmail.toLowerCase() &&
- instanceData.status_instancia === 'conectado'
- );
-
- console.log('✅ [GRUPO] Instância válida para criar grupos:', hasValidInstance, {
- instancia_zap: instanceData.instancia_zap,
- status_instancia: instanceData.status_instancia,
- userEmail: userEmail,
- instanceMatchesEmail: instanceData.instancia_zap?.toLowerCase() === userEmail.toLowerCase(),
- isConnected: instanceData.status_instancia === 'conectado',
- hasValidInstance
- });
-
- setHasWhatsAppInstance(hasValidInstance);
- setUserInstance(instanceData);
- } else {
- console.log('❌ [GRUPO] Nenhuma instância encontrada');
- setHasWhatsAppInstance(false);
- setUserInstance(null);
- }
- } catch (error) {
- console.error('❌ [GRUPO] Erro ao verificar instância do usuário:', error);
- setHasWhatsAppInstance(false);
- setUserInstance(null);
- } finally {
- setCheckingInstance(false);
- }
- };
-
- useEffect(() => {
- checkUserInstance();
- }, [userEmail]);
-
- // Função para forçar re-verificação (útil quando o status da instância muda)
- const recheckInstance = () => {
- console.log('🔄 [GRUPO] Forçando re-verificação da instância');
- checkUserInstance();
- };
-
- return {
- hasWhatsAppInstance,
- checkingInstance,
- userInstance,
- recheckInstance
- };
-};
diff --git a/src/pages/WhatsApp.tsx b/src/pages/WhatsApp.tsx
index 751d162..6daa525 100644
--- a/src/pages/WhatsApp.tsx
+++ b/src/pages/WhatsApp.tsx
@@ -1,18 +1,14 @@
import { WhatsAppInstance } from '@/types/whatsAppTypes';
import Layout from '@/components/layout/Layout';
-import CreateInstanceForm from '@/components/whatsapp/CreateInstanceForm';
-import InstanceList from '@/components/whatsapp/InstanceList';
-import InstanceStats from '@/components/whatsapp/InstanceStats';
-import QrCodeDialog from '@/components/whatsapp/QrCodeDialog';
import LoadingState from '@/components/whatsapp/LoadingState';
+import WhatsAppHeader from '@/components/whatsapp/WhatsAppHeader';
+import WhatsAppManager from '@/components/whatsapp/WhatsAppManager';
import { useWhatsAppInstances } from '@/hooks/useWhatsAppInstances';
import { useWhatsAppActions } from '@/hooks/useWhatsAppActions';
import { useWhatsAppInstance, WHATSAPP_INSTANCE_KEY } from '@/hooks/whatsApp/useWhatsAppInstance';
import { usePeriodicStatusCheck } from '@/hooks/whatsApp/usePeriodicStatusCheck';
import { useExistingInstanceCheck } from '@/hooks/whatsapp/useExistingInstanceCheck';
-import { Button } from '@/components/ui/button';
-import { RefreshCw } from 'lucide-react';
const WhatsApp = () => {
const {
@@ -50,13 +46,10 @@ const WhatsApp = () => {
const userEmail = (localStorage.getItem('userEmail') || '').toLowerCase();
- // Hook UNIFICADO para verificação de instância existente
const {
hasExistingInstance,
- checkingExistingInstance,
- existingInstanceData,
- setHasExistingInstance,
- setExistingInstanceData,
+ checkingInstance,
+ instanceData,
recheckInstance
} = useExistingInstanceCheck(userEmail);
@@ -72,12 +65,10 @@ const WhatsApp = () => {
handleViewQrCode(newInstance);
}
- // O mais importante: após criar, chame a função para re-verificar do banco de dados!
- // Isso garante que o estado seja baseado em dados reais, não em uma suposição.
setTimeout(() => {
recheckInstance();
checkAllInstancesStatus();
- }, 2000); // Um pequeno delay para dar tempo ao backend de atualizar
+ }, 2000);
};
const handleDeleteInstanceWrapper = (instanceId: string) => {
@@ -88,16 +79,11 @@ const WhatsApp = () => {
if (instanceToDelete.instanceName === instanceName) {
clearInstanceName();
- setHasExistingInstance(false);
- setExistingInstanceData(null);
}
}
};
- const hasInstances = Array.isArray(instances) && instances.length > 0;
-
- // Loading enquanto verifica instância
- if (checkingExistingInstance || isLoading) {
+ if (checkingInstance || isLoading) {
return (
@@ -108,77 +94,29 @@ const WhatsApp = () => {
return (
-
-
-
Conectar WhatsApp
- {userEmail && (
-
- Mostrando instâncias para: {userEmail}
-
- )}
-
-
-
-
+
- {/* Formulário de criação - APENAS se NÃO tiver instância conectada */}
- {!hasExistingInstance && (
-
- )}
-
- {/* Mensagem quando já tem instância conectada */}
- {hasExistingInstance && existingInstanceData && (
-
-
-
-
-
-
-
- WhatsApp Conectado ✅
-
-
-
Você já possui uma instância do WhatsApp conectada: {existingInstanceData.instancia_zap}