"use client"; import { useEffect, useState } from "react"; import WhatsAppLink from "./WhatsAppLink"; import { WhatsAppMark } from "./WhatsAppMark"; /** Botão principal do hero e seção de contato: enquanto qualquer um está na tela, o botão flutuante some. */ export const HERO_CTA_ID = "hero-contact-cta"; const CONTACT_SECTION_ID = "contact"; /** * Atalho para o WhatsApp só no celular (abaixo de 768 px). Fica escondido quando já há um convite de contato * à vista e sobe a altura da barra de cookies (--cookie-bar-height, publicada por GoogleAnalytics) enquanto ela está aberta. */ export default function FloatingWhatsApp() { // null até o observador responder pela primeira vez: assim o botão não pisca na chegada, quando o hero está à vista const [inviteVisible, setInviteVisible] = useState | null>(null); useEffect(() => { const targets = [HERO_CTA_ID, CONTACT_SECTION_ID] .map((id) => document.getElementById(id)) .filter((element): element is HTMLElement => element !== null); if (targets.length === 0) { setInviteVisible({}); return; } const observer = new IntersectionObserver((entries) => { setInviteVisible((current) => { const next = { ...current }; for (const entry of entries) { next[entry.target.id] = entry.isIntersecting; } return next; }); }); for (const target of targets) observer.observe(target); return () => observer.disconnect(); }, []); if (!inviteVisible || Object.values(inviteVisible).some(Boolean)) return null; return (
Conversar no WhatsApp
); }