mirror of
https://github.com/formbricks/formbricks.git
synced 2026-01-05 21:32:02 -06:00
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
"use client";
|
|
|
|
import Intercom from "@intercom/messenger-js-sdk";
|
|
import { createHmac } from "crypto";
|
|
import { useCallback, useEffect } from "react";
|
|
import { env } from "@formbricks/lib/env";
|
|
import { TUser } from "@formbricks/types/user";
|
|
|
|
const intercomAppId = env.NEXT_PUBLIC_INTERCOM_APP_ID;
|
|
|
|
interface IntercomClientProps {
|
|
isIntercomConfigured: boolean;
|
|
intercomSecretKey?: string;
|
|
user?: TUser | null;
|
|
}
|
|
|
|
export const IntercomClient = ({ user, intercomSecretKey, isIntercomConfigured }: IntercomClientProps) => {
|
|
const initializeIntercom = useCallback(() => {
|
|
let initParams = {};
|
|
|
|
if (user) {
|
|
const { id, name, email, createdAt } = user;
|
|
const hash = createHmac("sha256", intercomSecretKey!).update(user?.id).digest("hex");
|
|
|
|
initParams = {
|
|
user_id: id,
|
|
user_hash: hash,
|
|
name,
|
|
email,
|
|
created_at: createdAt ? Math.floor(createdAt.getTime() / 1000) : undefined,
|
|
};
|
|
}
|
|
|
|
Intercom({
|
|
app_id: intercomAppId!,
|
|
...initParams,
|
|
});
|
|
}, [user, intercomSecretKey]);
|
|
|
|
useEffect(() => {
|
|
try {
|
|
if (isIntercomConfigured) 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]);
|
|
|
|
return null;
|
|
};
|