Skip to content

Commit b1a4963

Browse files
committed
toast hook
1 parent c6c8704 commit b1a4963

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

apps/dashboard/app/providers.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { NuqsAdapter } from "nuqs/adapters/next/app";
1212
import { useState } from "react";
1313
import { OrganizationsProvider } from "@/components/providers/organizations-provider";
1414
import { TooltipProvider } from "@/components/ui/tooltip";
15+
import { useToastTracking } from "@/hooks/toast-hooks";
1516

1617
const defaultQueryClientOptions = {
1718
defaultOptions: {
@@ -53,7 +54,9 @@ export default function Providers({ children }: { children: React.ReactNode }) {
5354
<TooltipProvider>
5455
<FlagsProviderWrapper>
5556
<OrganizationsProvider>
56-
<NuqsAdapter>{children}</NuqsAdapter>
57+
<ToastTracker>
58+
<NuqsAdapter>{children}</NuqsAdapter>
59+
</ToastTracker>
5760
</OrganizationsProvider>
5861
</FlagsProviderWrapper>
5962
</TooltipProvider>
@@ -95,3 +98,8 @@ function FlagsProviderWrapper({ children }: { children: React.ReactNode }) {
9598
</FlagsProvider>
9699
);
97100
}
101+
102+
function ToastTracker({ children }: { children: React.ReactNode }) {
103+
useToastTracking();
104+
return <>{children}</>;
105+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { track } from "@databuddy/sdk";
2+
import { useEffect, useRef } from "react";
3+
import { useSonner } from "sonner";
4+
5+
export function useToastTracking() {
6+
const { toasts } = useSonner();
7+
const tracked = useRef(new Set<string | number>());
8+
9+
useEffect(() => {
10+
for (const toast of toasts) {
11+
if (!tracked.current.has(toast.id)) {
12+
tracked.current.add(toast.id);
13+
track("toast_shown", {
14+
type: toast.type, // success, error, warning, info
15+
message: toast.title,
16+
});
17+
}
18+
}
19+
}, [toasts]);
20+
}

0 commit comments

Comments
 (0)