import { useRouter } from "next/navigation"; import React from "react"; import { classNames } from "@calcom/lib"; import type { PERMISSION_MAP } from "@calcom/platform-constants"; import { PERMISSIONS_GROUPED_MAP } from "@calcom/platform-constants"; import type { Avatar } from "@calcom/prisma/client"; import { Button, Icon, showToast } from "@calcom/ui"; type OAuthClientCardProps = { name: string; logo?: Avatar; redirectUris: string[]; bookingRedirectUri: string | null | undefined; bookingCancelRedirectUri: string | null | undefined; bookingRescheduleRedirectUri: string | null | undefined; areEmailsEnabled: boolean | undefined; permissions: Array; lastItem: boolean; id: string; secret: string; onDelete: (id: string) => Promise; isLoading: boolean; organizationId: number; }; export const OAuthClientCard = ({ name, logo, redirectUris, bookingRedirectUri, bookingCancelRedirectUri, bookingRescheduleRedirectUri, permissions, id, secret, lastItem, onDelete, isLoading, areEmailsEnabled, organizationId, }: OAuthClientCardProps) => { const router = useRouter(); const groupedPermissions = permissions.reduce>( (acc, permission) => { const [resource] = permission.split("_READ") as [string] | [string, string]; const isRead = permission.endsWith("_READ"); const isWrite = permission.endsWith("_WRITE"); const key = resource.replace("_WRITE", ""); if (!acc[key]) acc[key] = { read: false, write: false }; if (isRead) acc[key].read = true; if (isWrite) acc[key].write = true; return acc; }, {} ); const clientPermissions = Object.entries(groupedPermissions).map(([resource, { read, write }], index) => { const permissionTypes = []; if (read) permissionTypes.push("read"); if (write) permissionTypes.push("write"); const permissionsMessage = permissionTypes.join("/"); const groupedPermission = PERMISSIONS_GROUPED_MAP[resource as keyof typeof PERMISSIONS_GROUPED_MAP]; const isLastItem = index === Object.keys(groupedPermissions).length - 1; return (
 {permissionsMessage} {groupedPermission?.label.toLowerCase()} {!isLastItem && ", "}
); }); return (

Client name: {name}

{!!logo && (
<>{logo}
)}
Client Id:
{id}
{ navigator.clipboard.writeText(id); showToast("Client id copied to clipboard.", "success"); }} />
Client Secret:
{[...new Array(20)].map((_, index) => ( ))} { navigator.clipboard.writeText(secret); showToast("Client secret copied to clipboard.", "success"); }} />
Organization Id:
{organizationId}
{ navigator.clipboard.writeText(organizationId.toString()); showToast("Organization id copied to clipboard.", "success"); }} />
Permissions: {permissions ?
{clientPermissions}
: <> Disabled}
Redirect uris: {redirectUris.map((item, index) => (redirectUris.length === index + 1 ? `${item}` : `${item}, `))}
{bookingRedirectUri && (
Booking redirect uri: {bookingRedirectUri}
)} {bookingRescheduleRedirectUri && (
Booking reschedule uri: {bookingRescheduleRedirectUri}
)} {bookingCancelRedirectUri && (
Booking cancel uri: {bookingCancelRedirectUri}
)}
Emails enabled: {areEmailsEnabled ? "Yes" : "No"}
); };