"use client"; import { useOrganization, useSession, useUser } from "@clerk/nextjs"; import classNames from "classnames"; import { useEffect, useState } from "react"; import { CopyIcon, Dot } from "../icons"; import Image from "next/image"; import "./prism.css"; declare global { interface Window { Prism: any; } } export function UserDetails() { const { isLoaded, user } = useUser(); const [jsonOutput, setJsonOutput] = useState(false); return (

User

setJsonOutput(!jsonOutput)} disabled={!isLoaded} />
{isLoaded && user ? ( jsonOutput ? (
) : (
User ID
{user.id}
{user.firstName && (
First Name
{user.firstName}
)} {user.lastName && (
Last Name
{user.lastName}
)}
Email addresses
{user.emailAddresses.map((email) => (
{email.emailAddress} {user.primaryEmailAddressId === email.id && ( Primary )}
))}
{user.imageUrl && (
Profile Image
)}
) ) : (
Loading user data...
)}
); } export function SessionDetails() { const { isLoaded, session } = useSession(); const [jsonOutput, setJsonOutput] = useState(false); return (

Session

setJsonOutput(!jsonOutput)} disabled={!isLoaded} />
{isLoaded && session ? ( jsonOutput ? (
) : (
Session ID
{session.id}
Status
{session.status === `active` && (
Active
)}
Last Active
{session.lastActiveAt.toLocaleString()}
Expiry
{session.expireAt.toLocaleString()}
) ) : (
Loading user data...
)}
); } export function OrgDetails() { const { isLoaded, organization } = useOrganization(); const [jsonOutput, setJsonOutput] = useState(false); return (

Organization

setJsonOutput(!jsonOutput)} disabled={!(isLoaded && organization)} />
{isLoaded ? ( organization ? ( jsonOutput ? (
) : (
Organization ID
{organization.id}
Name
{organization.name}
Members
{organization.membersCount}
Pending invitations
{organization.pendingInvitationsCount}
Image
{`Logo
) ) : (
You are currently logged in to your personal workspace.
Create or switch to an organization to see its details.
) ) : (
Loading organization data...
)}
); } function Toggle(props: { checked: boolean; onChange: () => void; disabled: boolean; }) { return (
); } function CopyButton(props: { text: string }) { const [tooltipShown, setTooltipShown] = useState(false); useEffect(() => { if (tooltipShown) { const timeout = setTimeout(() => setTooltipShown(false), 2000); return () => clearTimeout(timeout); } }, [tooltipShown]); return ( <>
Copied!
); } function JSONOutput(props: { json: any }) { useEffect(() => { if (window.Prism) { console.log(`highlighting`); window.Prism.highlightAll(); } }, []); return (
      
        {JSON.stringify(props.json, null, 2)}
      
    
); }