import React, { useCallback, useEffect, useRef } from 'react'; import Sidebar from './Sidebar/Sidebar'; import ChatArea from './ChatArea/ChatArea'; import InputSection from './ChatArea/InputSection'; import MobileHeader from './Header/MobileHeader'; import LoginModal from './Modals/LoginModal'; import RateLimitModal from './Modals/RateLimitModal'; import ConfirmDeleteModal from './Modals/ConfirmDeleteModal'; import ProposeChangesModal from './Modals/ProposeChangesModal'; import ReadApprovalModal from './Modals/ReadApprovalModal'; import ProfileLogo from './Logos/ProfileLogo'; import SettingsModal from './Modals/SettingsModal'; import SeoConsentBanner from './SeoConsent/SeoConsentBanner'; import Footer from './Footer/Footer'; import { useAuth } from '../contexts/AuthContext'; import { useSetIsSettingsModalOpen, useIsMobileSidebarOpen } from '../contexts/UIContext'; import { useCloneSeoPage, useCurrentConversationId } from '../contexts/ChatContext'; import useRenderTracker from '../hooks/useRenderTracker'; import MobileSidebar from './Sidebar/MobileSidebar'; import { ASSISTANT_ENABLED, TARGET_ENV, IS_WORDPRESS, SETUP_COMPLETED } from '../constants'; import AssistantDisabledGate from './AssistantDisabledGate'; import InitialSetupGate from './InitialSetupGate'; const ATIBA_CONTACT_URL = IS_WORDPRESS ? 'https://atiba.com/get-quote' : 'https://atiba.com/get-quote?utm_source=wpassistant&utm_medium=referral&utm_campaign=wpassistant&utm_id=10219074-wpassistant'; const WPAssistant: React.FC = () => { const setIsSettingsModalOpen = useSetIsSettingsModalOpen(); const isMobileSidebarOpen = useIsMobileSidebarOpen(); const currentConversationId = useCurrentConversationId(); const { isLoggedIn, userInfo, hasDismissedBanner, } = useAuth(); const cloneSeoPage = useCloneSeoPage(); useRenderTracker('WPAssistant', { setIsSettingsModalOpen, isLoggedIn, userInfo, }); // Check for clone_seo_page parameter on load useEffect(() => { if (!ASSISTANT_ENABLED) return; const urlParams = new URLSearchParams(window.location.search); const seoPageId = urlParams.get('continue_seo_page'); if (seoPageId) { cloneSeoPage(seoPageId); } }, [cloneSeoPage, ASSISTANT_ENABLED]); // Memoized handler const handleSettingsOpen = useCallback(() => { setIsSettingsModalOpen(true); }, [setIsSettingsModalOpen]); const scrollRef = useRef(null); const scrollToBottom = useCallback((behavior: ScrollBehavior) => { const el = scrollRef.current; if (el) { el.scrollTo({ top: el.scrollHeight, behavior }); } }, []); const scrollToTop = useCallback((behavior: ScrollBehavior) => { const el = scrollRef.current; if (el) { el.scrollTo({ top: 0, behavior }); } }, []); // Calculate whether banner is showing const showBanner = !hasDismissedBanner && !IS_WORDPRESS; const openPluginSettings = useCallback(() => { const target = window.top ?? window; const targetUrl = 'admin.php?page=actionpanel-ai-settings'; try { target.location.assign(targetUrl); } catch (e) { target.location.href = targetUrl; } }, []); if (TARGET_ENV === 'wordpress' && !SETUP_COMPLETED) { return (
); } if (TARGET_ENV === 'wordpress' && !ASSISTANT_ENABLED) { return (
); } return (
{isMobileSidebarOpen && ( )}
{currentConversationId && ( )} {!IS_WORDPRESS && (
Still stuck? Atiba can help. Contact us here.
)}
); }; export default WPAssistant;