mirror of
https://github.com/formbricks/formbricks.git
synced 2026-05-25 03:10:22 -05:00
feat: identify teams & their billing in Posthog (#2112)
This commit is contained in:
committed by
GitHub
parent
078c5db2b0
commit
53d3be3b27
@@ -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
|
||||
|
||||
@@ -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),
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user