From ef981055030f7ec7c5b4550b27748bfc968510a4 Mon Sep 17 00:00:00 2001 From: Somay Chauhan Date: Wed, 1 May 2024 03:08:18 +0530 Subject: [PATCH] feat: send organization_id to intercom (#14811) * send organization_id to intercom * send org slug instead of org id * fix: type errors --------- Co-authored-by: Peer Richelsen --- .../ee/support/lib/intercom/useIntercom.ts | 24 ++++++++++++------- .../components/WorkflowDetailsPage.tsx | 2 +- .../routers/loggedInViewer/me.handler.ts | 3 +++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/features/ee/support/lib/intercom/useIntercom.ts b/packages/features/ee/support/lib/intercom/useIntercom.ts index 48b8bde98b..525ca503ba 100644 --- a/packages/features/ee/support/lib/intercom/useIntercom.ts +++ b/packages/features/ee/support/lib/intercom/useIntercom.ts @@ -5,7 +5,6 @@ import { z } from "zod"; import dayjs from "@calcom/dayjs"; import { WEBAPP_URL, WEBSITE_URL } from "@calcom/lib/constants"; -import hasKeyInMetadata from "@calcom/lib/hasKeyInMetadata"; import { useHasTeamPlan, useHasPaidPlan } from "@calcom/lib/hooks/useHasPaidPlan"; import { trpc } from "@calcom/trpc/react"; @@ -57,13 +56,14 @@ export const useIntercom = () => { metadata: data?.metadata, completed_onboarding: data.completedOnboarding, is_logged_in: !!data, - sum_of_bookings: data.sumOfBookings, - sum_of_calendars: data.sumOfCalendars, - sum_of_teams: data.sumOfTeams, - has_org: !data.organizationId, - sum_of_event_types: data.sumOfEventTypes, - sum_of_team_event_types: data.sumOfTeamEventTypes, - is_premium: hasKeyInMetadata(data, "isPremium") ? !!data.metadata.isPremium : false, + sum_of_bookings: data?.sumOfBookings, + sum_of_calendars: data?.sumOfCalendars, + sum_of_teams: data?.sumOfTeams, + has_org: !data?.organizationId, + organization: data?.organization?.slug, + sum_of_event_types: data?.sumOfEventTypes, + sum_of_team_event_types: data?.sumOfTeamEventTypes, + is_premium: data?.isPremium, }, }); }; @@ -96,6 +96,14 @@ export const useIntercom = () => { metadata: data?.metadata, completed_onboarding: data?.completedOnboarding, is_logged_in: !!data, + sum_of_bookings: data?.sumOfBookings, + sum_of_calendars: data?.sumOfCalendars, + sum_of_teams: data?.sumOfTeams, + has_org: !data?.organizationId, + organization: data?.organization?.slug, + sum_of_event_types: data?.sumOfEventTypes, + sum_of_team_event_types: data?.sumOfTeamEventTypes, + is_premium: data?.isPremium, }, }); hookData.show(); diff --git a/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx b/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx index 3de697e02a..ced69cc829 100644 --- a/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx +++ b/packages/features/ee/workflows/components/WorkflowDetailsPage.tsx @@ -45,7 +45,7 @@ export default function WorkflowDetailsPage(props: Props) { const { data, isPending } = trpc.viewer.eventTypes.getByViewer.useQuery(); const searchParams = useSearchParams(); - const eventTypeId = searchParams.get("eventTypeId"); + const eventTypeId = searchParams?.get("eventTypeId"); const eventTypeOptions = useMemo( () => diff --git a/packages/trpc/server/routers/loggedInViewer/me.handler.ts b/packages/trpc/server/routers/loggedInViewer/me.handler.ts index 400948f231..c2c216c738 100644 --- a/packages/trpc/server/routers/loggedInViewer/me.handler.ts +++ b/packages/trpc/server/routers/loggedInViewer/me.handler.ts @@ -5,6 +5,7 @@ import { ProfileRepository } from "@calcom/lib/server/repository/profile"; import { UserRepository } from "@calcom/lib/server/repository/user"; import prisma from "@calcom/prisma"; import { IdentityProvider } from "@calcom/prisma/enums"; +import { userMetadata } from "@calcom/prisma/zod-utils"; import type { TrpcSessionUser } from "@calcom/trpc/server/trpc"; import type { TMeInputSchema } from "./me.schema"; @@ -101,6 +102,7 @@ export const meHandler = async ({ ctx, input }: MeOptions) => { sumOfTeamEventTypes++; } } + const userMetadataPrased = userMetadata.parse(user.metadata); // Destructuring here only makes it more illegible // pick only the part we want to expose in the API @@ -148,6 +150,7 @@ export const meHandler = async ({ ctx, input }: MeOptions) => { sumOfCalendars: additionalUserInfo?.selectedCalendars.length, sumOfTeams: additionalUserInfo?.teams.length, sumOfEventTypes: additionalUserInfo?.eventTypes.length, + isPremium: userMetadataPrased?.isPremium, sumOfTeamEventTypes, ...(passwordAdded ? { passwordAdded } : {}), };