Compare commits

...

9 Commits

Author SHA1 Message Date
Johannes
d0f2be1469 fix embed 2024-05-13 18:18:38 +02:00
Johannes
09a3284682 remove old nav 2024-05-13 17:44:53 +02:00
Johannes
4845af3f2c Merge branch 'main' of https://github.com/formbricks/formbricks into shubham/saturn-integration-v2 2024-05-13 17:42:05 +02:00
Shubham Palriwala
6b0f70a80c Merge branch 'main' into shubham/saturn-integration-v2 2024-05-07 11:26:56 +05:30
Johannes
e2ad434b93 update menu items 2024-04-16 09:59:59 +02:00
Johannes
000b950ee6 Merge branch 'main' into shubham/saturn-integration-v2 2024-04-16 09:05:37 +02:00
ShubhamPalriwala
7562072cd4 chore: remove console log 2024-04-16 11:36:25 +05:30
ShubhamPalriwala
9814e87a41 fix: show toast if opening chat & its already opened 2024-04-16 11:35:20 +05:30
ShubhamPalriwala
c7c5a28395 init: saturn integration 2024-04-15 16:13:58 +05:30
2 changed files with 105 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ import {
CreditCardIcon,
LogOutIcon,
MessageCircle,
MessageSquareIcon,
MousePointerClick,
PanelLeftCloseIcon,
PanelLeftOpenIcon,
@@ -25,6 +26,7 @@ import Image from "next/image";
import Link from "next/link";
import { usePathname, useRouter } from "next/navigation";
import { useEffect, useMemo, useState } from "react";
import toast from "react-hot-toast";
import { cn } from "@formbricks/lib/cn";
import { getAccessFlags } from "@formbricks/lib/membership/utils";
@@ -50,6 +52,7 @@ import {
DropdownMenuTrigger,
} from "@formbricks/ui/DropdownMenu";
import { SaturnChat } from "../components/SaturnSupport";
import AddProductModal from "./AddProductModal";
interface NavigationProps {
@@ -80,6 +83,7 @@ export const MainNavigation = ({
const [showCreateTeamModal, setShowCreateTeamModal] = useState(false);
const [isCollapsed, setIsCollapsed] = useState(localStorage.getItem("isMainNavCollapsed") === "true");
const [isTextVisible, setIsTextVisible] = useState(true);
const [openSaturn, setOpenSaturn] = useState(false);
const product = products.find((product) => product.id === environment.productId);
const { isAdmin, isOwner, isViewer } = getAccessFlags(membershipRole);
@@ -181,6 +185,19 @@ export const MainNavigation = ({
hidden: !isFormbricksCloud || isPricingDisabled,
icon: CreditCardIcon,
},
{
icon: MessageSquareIcon,
label: "Chat with us",
href: pathname,
onClick: () => {
console.log("this is a testsssss");
if (openSaturn) {
toast.success("Chat is already open on the bottom right corner.");
return;
}
setOpenSaturn(true);
},
},
{
label: "Documentation",
href: "https://formbricks.com/docs",
@@ -375,6 +392,7 @@ export const MainNavigation = ({
href={link.href}
target={link.target}
key={link.label}
onClick={link.onClick}
className="flex items-center">
<DropdownMenuItem
className="w-full gap-x-2 rounded-lg font-normal"
@@ -444,6 +462,15 @@ export const MainNavigation = ({
setOpen={(val) => setShowAddProductModal(val)}
environmentId={environment.id}
/>
{openSaturn && (
<SaturnChat
userId={session.user.id}
email={session.user.email}
name={session.user.name}
teamId={team.id}
teamName={team.name}
/>
)}
</>
);
};

View File

@@ -0,0 +1,78 @@
"use client";
import { useEffect } from "react";
declare global {
interface Window {
saturnSDK: any;
$saturn: any;
}
}
interface SaturnChatProps {
userId: string;
email: string;
name: string | null;
teamId: string;
teamName: string;
}
export function SaturnChat({ userId, email, name, teamId, teamName }: SaturnChatProps) {
useEffect(() => {
const scriptElem = document.createElement("script");
const BASE_URL = "https://app.saturnhq.io";
scriptElem.src = `${BASE_URL}/assets/sdk.js`;
scriptElem.defer = true;
scriptElem.async = true;
document.body.appendChild(scriptElem);
scriptElem.onload = () => {
window.saturnSDK.run({
integrationId: "formbricks",
});
};
return () => {
document.body.removeChild(scriptElem);
};
}, []);
useEffect(() => {
const handleOutsideClick = (event: MouseEvent) => {
const saturnChatbox = document.getElementsByClassName("saturn-chat-holder")[0];
const inbuiltCloseIcon = document.getElementsByClassName("icon-container")[0];
if (
saturnChatbox &&
inbuiltCloseIcon &&
!saturnChatbox.contains(event.target as Node) &&
!inbuiltCloseIcon.contains(event.target as Node)
) {
window.$saturn.close();
}
};
const setUser = () => {
window.$saturn.setUser(
userId,
{ email: email, name: name },
{ groups: { team: { id: teamId, name: teamName } } }
);
};
if (window?.$saturn && window?.$saturn?.isLoaded) {
setUser();
window.$saturn.open();
} else {
window.addEventListener(
"saturn:ready",
function () {
setUser();
window.$saturn.open();
},
{ once: true }
);
}
document.addEventListener("mousedown", handleOutsideClick);
}, [userId, email, name, teamId, teamName]);
return <></>;
}