feat: identify teams & their billing in Posthog (#2112)

This commit is contained in:
Shubham Palriwala
2024-02-28 15:29:27 +05:30
committed by GitHub
parent 078c5db2b0
commit 53d3be3b27
3 changed files with 47 additions and 3 deletions
@@ -5,15 +5,26 @@ import { usePostHog } from "posthog-js/react";
import { useEffect } from "react";
import { env } from "@formbricks/lib/env";
import { TSubscriptionStatus } from "@formbricks/types/teams";
const posthogEnabled = env.NEXT_PUBLIC_POSTHOG_API_KEY && env.NEXT_PUBLIC_POSTHOG_API_HOST;
export default function PosthogIdentify({
session,
environmentId,
teamId,
teamName,
inAppSurveyBillingStatus,
linkSurveyBillingStatus,
userTargetingBillingStatus,
}: {
session: Session;
environmentId: string;
teamId: string;
teamName: string;
inAppSurveyBillingStatus: TSubscriptionStatus;
linkSurveyBillingStatus: TSubscriptionStatus;
userTargetingBillingStatus: TSubscriptionStatus;
}) {
const posthog = usePostHog();
@@ -21,8 +32,23 @@ export default function PosthogIdentify({
if (posthogEnabled && session.user && posthog) {
posthog.identify(session.user.id, { name: session.user.name, email: session.user.email });
posthog.group("environment", environmentId, { name: environmentId });
posthog.group("team", teamId, {
name: teamName,
inAppSurveyBillingStatus,
linkSurveyBillingStatus,
userTargetingBillingStatus,
});
}
}, [session, environmentId, posthog]);
}, [
posthog,
session.user,
environmentId,
teamId,
teamName,
inAppSurveyBillingStatus,
linkSurveyBillingStatus,
userTargetingBillingStatus,
]);
return null;
}
@@ -6,6 +6,7 @@ import { redirect } from "next/navigation";
import { authOptions } from "@formbricks/lib/authOptions";
import { IS_FORMBRICKS_CLOUD } from "@formbricks/lib/constants";
import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth";
import { getTeamByEnvironmentId } from "@formbricks/lib/team/service";
import { AuthorizationError } from "@formbricks/types/errors";
import ToasterClient from "@formbricks/ui/ToasterClient";
@@ -22,10 +23,23 @@ export default async function EnvironmentLayout({ children, params }) {
throw new AuthorizationError("Not authorized");
}
const team = await getTeamByEnvironmentId(params.environmentId);
if (!team) {
throw new Error("Team not found");
}
return (
<>
<ResponseFilterProvider>
<PosthogIdentify session={session} environmentId={params.environmentId} />
<PosthogIdentify
session={session}
environmentId={params.environmentId}
teamId={team.id}
teamName={team.name}
inAppSurveyBillingStatus={team.billing.features.inAppSurvey.status}
linkSurveyBillingStatus={team.billing.features.linkSurvey.status}
userTargetingBillingStatus={team.billing.features.userTargeting.status}
/>
<FormbricksClient session={session} />
<ToasterClient />
<EnvironmentsNavbar
+5 -1
View File
@@ -1,7 +1,11 @@
import { z } from "zod";
export const ZSubscriptionStatus = z.enum(["active", "cancelled", "inactive"]).default("inactive");
export type TSubscriptionStatus = z.infer<typeof ZSubscriptionStatus>;
export const ZSubscription = z.object({
status: z.enum(["active", "cancelled", "inactive"]).default("inactive"),
status: ZSubscriptionStatus,
unlimited: z.boolean().default(false),
});