* added lockedSMS to future routes * add orgMigrations routes to future * correct metadata * small fix * add orgMigrations to future * Move components to client components * Remove tRPC element from edit user RSC * Get username for meta * Remove suspense query * Remove orgMigrations from app router * Type fix * Revert "Remove suspense query" This reverts commit eadd814f6e4a5d6856d9218342b7909c22fe62c6. * Handle suspenseQuery in app router * User edit page, fetch data server side * Update yarn.lock * Export getFixedT * Set PageWrapper as root layout for settings * Settings Layout accepts strings for shell heading * Add OOO to app router settings * Refactor layout for my-account pages * Remove instances of pages router from my-account * Refactor security pages * Add billing to app router * Add admin API link to layout * Add api keys page * Webhooks WIP * Refactor SettingsHeader to client component * Add webhook pages * Refactor API keys page * Add admin app page * Type fix * fix types * fix developer/webhooks/[id] param value type error * remove unnecessary code * do not pass t prop to CreateNewWebhookButton * fix type errors in webhook-edit-view * fix the remaining type errors * do not use prisma directly in generateMetadata * remove use client if unnecessary * Remove unused shell heading from SettingsLayoutAppDir * improve metadata * fix billing page * fix import in settings/teams * Use next `notFound()` * fix type check * fix type check * remove unused code * Fix calendar setting page * Separate settings pages into route groups * Refactor admin settings pages * Remove meta instance from billing page route * Update settings layoutAppDir * Refactor developer settings pages * Refactor out of office * Refactor my account settings * Refactor admin api page * Refactor security pages * Type fix * fix styling in settings layout --------- Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com> Co-authored-by: Omar López <zomars@me.com> Co-authored-by: Benny Joo <sldisek783@gmail.com>
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
"use client";
|
|
|
|
import { signIn } from "next-auth/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, TextField } from "@calcom/ui";
|
|
|
|
const ImpersonationView = () => {
|
|
const { t } = useLocale();
|
|
const usernameRef = useRef<HTMLInputElement>(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 (
|
|
<form
|
|
className="mb-6 w-full"
|
|
onSubmit={(e) => {
|
|
e.preventDefault();
|
|
const enteredUsername = usernameRef.current?.value.toLowerCase();
|
|
signIn("impersonation-auth", {
|
|
username: enteredUsername,
|
|
callbackUrl: `${WEBAPP_URL}/event-types`,
|
|
});
|
|
}}>
|
|
<div className="flex items-center space-x-2 rtl:space-x-reverse">
|
|
<TextField
|
|
containerClassName="w-full"
|
|
name={t("user_impersonation_heading")}
|
|
addOnLeading={<>{process.env.NEXT_PUBLIC_WEBSITE_URL}/</>}
|
|
ref={usernameRef}
|
|
hint={t("impersonate_user_tip")}
|
|
defaultValue={undefined}
|
|
data-testid="admin-impersonation-input"
|
|
/>
|
|
<Button type="submit" data-testid="impersonation-submit">
|
|
{t("impersonate")}
|
|
</Button>
|
|
</div>
|
|
</form>
|
|
);
|
|
};
|
|
|
|
export default ImpersonationView;
|