"use client";
import { useSession } from "next-auth/react";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import { useEffect, type FC } from "react";
import { IntercomProvider } from "react-use-intercom";
import { useFlagMap } from "@calcom/features/flags/context/provider";
import useMediaQuery from "@calcom/lib/hooks/useMediaQuery";
import { useHasPaidPlan } from "@calcom/web/modules/billing/hooks/useHasPaidPlan";
import { useBootIntercom } from "@calcom/web/modules/ee/support/lib/intercom/useIntercom";
import { IntercomContactForm } from "~/ee/support/components/IntercomContactForm";
declare global {
interface Window {
Support?: {
open: () => void;
shouldShowTriggerButton: (showTrigger: boolean) => void;
};
}
}
function IntercomBootstrap() {
useBootIntercom();
return null;
}
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 { data: session } = useSession();
const isBeingImpersonated = !!session?.user?.impersonatedBy?.id;
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) {
handleSupportReady();
} else {
window.addEventListener("support:ready", handleSupportReady);
}
return () => {
window.removeEventListener("support:ready", handleSupportReady);
};
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [shouldOpenSupport, isMobile]);
const isOnboardingPage = pathname?.startsWith("/getting-started");
const isCalVideoPage = pathname?.startsWith("/video/");
if (isOnboardingPage || isCalVideoPage || isBeingImpersonated) {
return <>{children}>;
}
if (flagMap["tiered-support-chat"] && !hasPaidPlan) {
return (
<>
{children}
>
);
}
return (
{children}
);
};
export default Provider;