Files
supabase/apps/studio/components/interfaces/Auth/Users/UserHeader.tsx
Gildas Garcia 96d43099bb chore: refactor Button API so that it can be used a standard button (#46880)
## Problem

Our `<Button>` component breaks the default `button` contract by
redefining the `type` prop to set its variant (`primary`, `default`,
etc) instead of the button type (`submit`, `button`, etc).
This is confusing and forces to write more code when using it with
shadcn components that expect/inject the standard button props.

## Solution

- rename the `type` prop to `variant`
- rename the `htmlType` prop to `type`
- propagate the changes where necessary
- format code

## How to test

As this is just prop renaming, if it builds it's ok

---------

Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
2026-06-16 23:59:58 +02:00

63 lines
1.7 KiB
TypeScript

import { Copy } from 'lucide-react'
import { cn } from 'ui'
import { PANEL_PADDING } from './Users.constants'
import { getDisplayName } from './Users.utils'
import CopyButton from '@/components/ui/CopyButton'
import { User } from '@/data/auth/users-infinite-query'
export const UserHeader = ({ user }: { user: User }) => {
const displayName = getDisplayName(user)
const hasDisplayName = displayName !== '-'
const isPhoneAuth = user.phone !== null
const isAnonUser = user.is_anonymous
return (
<div className={cn(PANEL_PADDING)}>
{isPhoneAuth ? (
<div className="flex items-center gap-x-1">
<p>{user.phone}</p>
<CopyButton
iconOnly
variant="text"
icon={<Copy />}
className="px-1"
text={user?.phone ?? ''}
/>
</div>
) : isAnonUser ? (
<>
<p>Anonymous user</p>
<div className="flex items-center gap-x-1">
<p className="text-foreground-light text-sm">{user.id}</p>
<CopyButton
iconOnly
variant="text"
icon={<Copy />}
className="px-1"
text={user?.id ?? ''}
/>
</div>
</>
) : (
<>
{hasDisplayName && <p>{displayName}</p>}
<div className="flex items-center gap-x-1">
<p className={cn(hasDisplayName ? 'text-foreground-light text-sm' : 'text-foreground')}>
{user.email}
</p>
<CopyButton
iconOnly
variant="text"
icon={<Copy />}
className="px-1"
text={user?.email ?? ''}
/>
</div>
</>
)}
</div>
)
}