From bc0c40d2609b103e80f4e30c6f5d30c5b6057cf3 Mon Sep 17 00:00:00 2001 From: sean-brydon <55134778+sean-brydon@users.noreply.github.com> Date: Tue, 7 May 2024 14:33:19 +0100 Subject: [PATCH] feat: cal-3452 parameter for impersonation (#14605) * feat: impersonate trigger when there is a URL param * feat: update intercom sidebar * fix: add to onOpen too --------- Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> --- .../pages/settings/admin/impersonation.tsx | 22 +++++++++++++++++-- apps/web/playwright/impersonation.e2e.ts | 3 ++- .../ee/support/lib/intercom/useIntercom.ts | 6 +++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/apps/web/pages/settings/admin/impersonation.tsx b/apps/web/pages/settings/admin/impersonation.tsx index a8e6cb3b86..e1f20ca8a7 100644 --- a/apps/web/pages/settings/admin/impersonation.tsx +++ b/apps/web/pages/settings/admin/impersonation.tsx @@ -1,8 +1,10 @@ "use client"; import { signIn } from "next-auth/react"; -import { useRef } from "react"; +import { useSearchParams } from "next/navigation"; +import { useRef, useEffect } from "react"; +import { WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { Button, Meta, TextField } from "@calcom/ui"; @@ -12,6 +14,19 @@ import { getLayout } from "@components/auth/layouts/AdminLayout"; function AdminView() { const { t } = useLocale(); const usernameRef = useRef(null); + const searchParams = useSearchParams(); + + const username = searchParams?.get("username")?.toLowerCase(); + + useEffect(() => { + if (username) { + const enteredUsername = username.toLowerCase(); + signIn("impersonation-auth", { + username: enteredUsername, + callbackUrl: `${WEBAPP_URL}/event-types`, + }); + } + }, [username]); return ( <> @@ -21,7 +36,10 @@ function AdminView() { onSubmit={(e) => { e.preventDefault(); const enteredUsername = usernameRef.current?.value.toLowerCase(); - signIn("impersonation-auth", { username: enteredUsername }); + signIn("impersonation-auth", { + username: enteredUsername, + callbackUrl: `${WEBAPP_URL}/event-types`, + }); }}>
{ await page.getByTestId("impersonation-submit").click(); // // Wait for sign in to complete - await page.waitForURL("/settings/my-account/profile"); + await page.waitForURL("/event-types"); + await page.goto("/settings/profile"); const stopImpersonatingButton = page.getByTestId("stop-impersonating-button"); diff --git a/packages/features/ee/support/lib/intercom/useIntercom.ts b/packages/features/ee/support/lib/intercom/useIntercom.ts index 525ca503ba..66c026d759 100644 --- a/packages/features/ee/support/lib/intercom/useIntercom.ts +++ b/packages/features/ee/support/lib/intercom/useIntercom.ts @@ -48,6 +48,9 @@ export const useIntercom = () => { user_name: data?.username, link: `${WEBSITE_URL}/${data?.username}`, admin_link: `${WEBAPP_URL}/settings/admin/users/${data?.id}/edit`, + impersonate_user: `${WEBAPP_URL}/settings/admin/impersonation?username=${ + data?.email ?? data?.username + }`, identity_provider: data?.identityProvider, timezone: data?.timeZone, locale: data?.locale, @@ -88,6 +91,9 @@ export const useIntercom = () => { user_name: data?.username, link: `${WEBSITE_URL}/${data?.username}`, admin_link: `${WEBAPP_URL}/settings/admin/users/${data?.id}/edit`, + impersonate_user: `${WEBAPP_URL}/settings/admin/impersonation?username=${ + data?.email ?? data?.username + }`, identity_provider: data?.identityProvider, timezone: data?.timeZone, locale: data?.locale,