From a55d56f260de3657420f11a0f2cb4842a0c262bc Mon Sep 17 00:00:00 2001 From: Amit Sharma <74371312+Amit91848@users.noreply.github.com> Date: Thu, 11 Sep 2025 18:11:42 +0530 Subject: [PATCH] fix: Intercom not opening with openSupport param (#23755) * fix: Intercom not opening with openSupport param * remove logs * remove unused --- .../components/IntercomContactForm.tsx | 1 + .../ee/support/lib/intercom/provider.tsx | 36 ++++++++++++++++--- .../ee/support/lib/intercom/useIntercom.ts | 1 + 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/packages/features/ee/support/components/IntercomContactForm.tsx b/packages/features/ee/support/components/IntercomContactForm.tsx index fdc4b6bd5f..92a86145ad 100644 --- a/packages/features/ee/support/components/IntercomContactForm.tsx +++ b/packages/features/ee/support/components/IntercomContactForm.tsx @@ -37,6 +37,7 @@ export const IntercomContactForm = () => { setShowTrigger(showTrigger); }, }; + window.dispatchEvent(new Event("support:ready")); } return () => { diff --git a/packages/features/ee/support/lib/intercom/provider.tsx b/packages/features/ee/support/lib/intercom/provider.tsx index 9f17fb7c4c..be2bec0c66 100644 --- a/packages/features/ee/support/lib/intercom/provider.tsx +++ b/packages/features/ee/support/lib/intercom/provider.tsx @@ -1,7 +1,7 @@ "use client"; -import { usePathname } from "next/navigation"; -import { useEffect, type FC } from "react"; +import { usePathname, useRouter, useSearchParams } from "next/navigation"; +import { useEffect, useState, type FC } from "react"; import { IntercomProvider } from "react-use-intercom"; import { useBootIntercom } from "@calcom/ee/support/lib/intercom/useIntercom"; @@ -28,14 +28,40 @@ const Provider: FC<{ children: React.ReactNode }> = ({ children }) => { const { hasPaidPlan } = useHasPaidPlan(); const isMobile = useMediaQuery("(max-width: 768px)"); const flagMap = useFlagMap(); + const searchParams = useSearchParams(); + const pathname = usePathname(); + const router = useRouter(); + + const shouldOpenSupport = + pathname === "/event-types" && (searchParams?.has("openPlain") || searchParams?.has("openSupport")); useEffect(() => { + const handleSupportReady = () => { + if (window.Support) { + window.Support.shouldShowTriggerButton?.(!isMobile); + + if (shouldOpenSupport) { + window.Support.open(); + const url = new URL(window.location.href); + url.searchParams.delete("openPlain"); + url.searchParams.delete("openSupport"); + router.replace(url.pathname + url.search); + } + } + }; + if (window.Support) { - window.Support.shouldShowTriggerButton(!isMobile); + handleSupportReady(); + } else { + window.addEventListener("support:ready", handleSupportReady); } - }, [isMobile]); + + return () => { + window.removeEventListener("support:ready", handleSupportReady); + }; + //eslint-disable-next-line react-hooks/exhaustive-deps + }, [shouldOpenSupport, isMobile]); - const pathname = usePathname(); const isOnboardingPage = pathname?.startsWith("/getting-started"); const isCalVideoPage = pathname?.startsWith("/video/"); diff --git a/packages/features/ee/support/lib/intercom/useIntercom.ts b/packages/features/ee/support/lib/intercom/useIntercom.ts index 417e148f4c..30d60f7a6a 100644 --- a/packages/features/ee/support/lib/intercom/useIntercom.ts +++ b/packages/features/ee/support/lib/intercom/useIntercom.ts @@ -179,6 +179,7 @@ export const useBootIntercom = () => { }); }, }; + window.dispatchEvent(new Event("support:ready")); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [user, statsData, hasPaidPlan, isTieredSupportEnabled]);