"use client"; import React, { useEffect, useState, useCallback } from "react"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import classNames from "@calcom/ui/classNames"; import { Button } from "@calcom/ui/components/button"; import { Label, TextArea } from "@calcom/ui/components/form"; import { LoaderIcon, MessageCircleIcon, SendIcon } from "@coss/ui/icons"; import { Popover, PopoverContent, PopoverTrigger } from "@calcom/ui/components/popover"; import { showToast } from "@calcom/ui/components/toast"; declare global { interface Window { Support?: { open: () => void; shouldShowTriggerButton: (showTrigger: boolean) => void; }; } } export const IntercomContactForm = () => { const { t } = useLocale(); const [isSubmitting, setIsSubmitting] = useState(false); const [isSubmitted, setIsSubmitted] = useState(false); const [message, setMessage] = useState(""); const [isOpen, setIsOpen] = useState(false); const [showTrigger, setShowTrigger] = useState(false); useEffect(() => { if (typeof window !== "undefined" && !window.Support) { window.Support = { open: () => { setIsOpen(true); }, shouldShowTriggerButton: (showTrigger) => { setShowTrigger(showTrigger); }, }; window.dispatchEvent(new Event("support:ready")); } return () => { if (typeof window !== "undefined" && window.Support) { delete window.Support; } }; }, []); const onSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); try { const response = await fetch("/api/support/conversation", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ message }), }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || "Failed to send message"); } showToast(t("success"), "success"); setIsSubmitting(false); setIsSubmitted(true); } catch (error) { const message = error instanceof Error ? error.message : t("something_went_wrong"); showToast(message, "error"); } finally { setIsSubmitting(false); } }; const contentRef = useCallback( (node: HTMLDivElement | null) => { if (!node) return; const isSmall = window.innerWidth < 768; if (isSmall) { setShowTrigger(false); } const wrapper = node.parentElement; if (wrapper?.hasAttribute("data-radix-popper-content-wrapper")) { if (!showTrigger) { wrapper.style.left = "auto"; wrapper.style.right = "0px"; wrapper.style.bottom = "5rem"; wrapper.style.top = "auto"; } else { wrapper.style.left = "0px"; wrapper.style.right = "auto"; wrapper.style.bottom = "auto"; wrapper.style.top = "0px"; } } }, [showTrigger] ); const resetForm = () => { setIsSubmitted(false); setMessage(""); }; return (
{t("contact_support")}
{t("support_message_sent_description")}