mirror of
https://github.com/formbricks/formbricks.git
synced 2025-12-30 08:50:17 -06:00
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
"use client";
|
|
|
|
import Intercom from "@intercom/messenger-js-sdk";
|
|
import { useCallback, useEffect } from "react";
|
|
import { TUser } from "@formbricks/types/user";
|
|
|
|
interface IntercomClientProps {
|
|
isIntercomConfigured: boolean;
|
|
intercomUserHash?: string;
|
|
user?: TUser | null;
|
|
intercomAppId?: string;
|
|
}
|
|
|
|
export const IntercomClient = ({
|
|
user,
|
|
intercomUserHash,
|
|
isIntercomConfigured,
|
|
intercomAppId,
|
|
}: IntercomClientProps) => {
|
|
const initializeIntercom = useCallback(() => {
|
|
let initParams = {};
|
|
|
|
if (user && intercomUserHash) {
|
|
const { id, name, email, createdAt } = user;
|
|
|
|
initParams = {
|
|
user_id: id,
|
|
user_hash: intercomUserHash,
|
|
name,
|
|
email,
|
|
created_at: createdAt ? Math.floor(createdAt.getTime() / 1000) : undefined,
|
|
};
|
|
}
|
|
|
|
Intercom({
|
|
app_id: intercomAppId!,
|
|
...initParams,
|
|
});
|
|
}, [user, intercomUserHash, intercomAppId]);
|
|
|
|
useEffect(() => {
|
|
try {
|
|
if (isIntercomConfigured) {
|
|
if (!intercomAppId) {
|
|
throw new Error("Intercom app ID is required");
|
|
}
|
|
|
|
if (user && !intercomUserHash) {
|
|
throw new Error("Intercom user hash is required");
|
|
}
|
|
|
|
initializeIntercom();
|
|
}
|
|
|
|
return () => {
|
|
// Shutdown Intercom when component unmounts
|
|
if (typeof window !== "undefined" && window.Intercom) {
|
|
window.Intercom("shutdown");
|
|
}
|
|
};
|
|
} catch (error) {
|
|
console.error("Failed to initialize Intercom:", error);
|
|
}
|
|
}, [isIntercomConfigured, initializeIntercom, intercomAppId, intercomUserHash, user]);
|
|
|
|
return null;
|
|
};
|