mirror of
https://github.com/supabase/supabase.git
synced 2026-10-19 16:19:10 +03:00
* fix: update Permission params * fix: upgrade check permission hook to support project level role * fix: usePermissionsLoaded * fix: Permission params can be undefined * Scaffold new access management UI * Add validation * Update roles view * Add tooltip * Add button to apply role to all projects * Update UI to select projects first instead of roles * Merge master update UI * Midway trying to implementation project level perms API * First pass implementating updating project level permissions * Add client side validation for assigning/removing roles * Midway implementing new invites * Integrate most of the project level permissions functionality * fix: filter out org-level permissions before checking * Add relevant UI guards in org level pages for project role POV * Minor refactors * Small refactors * More fixes * Moar refactors * More fixes * More fixes * Refactor update role logic and smack some test cases on it * Fixes * Fix type issue * Fix type * more fixes, refactors, adding checks... * MORE fixes * Add perms checking for replicas * Add ButtonTooltip component and use them to prevent repetition of pointer events auto for buttons with tooltips * Convert all buttons with tooltips to use ButtonTooltip * refactor * PRettier * Small fix * Remove commented out code in organization-invitation-accept-mutation * fix: switch to use the platform oauth authorizations routes * Add perms checking for org audit logs and org oauth apps * PRettier * Fix incorrect URL for oauth app flow * Fix incorrect URL for oauth app flow * Fix * Add perms checking for warehouse related UI * Update roles helper icon * remove unused lib * Update package lock... again * Update package lock... again * Smalllll update * Update some checks * Add gate for project level permissions * Last fix * update codegen * Update warehouse endpoint routes * Fix --------- Co-authored-by: phamhieu <phamhieu1998@gmail.com> Co-authored-by: Alaister Young <a@alaisteryoung.com>
82 lines
2.6 KiB
TypeScript
82 lines
2.6 KiB
TypeScript
import dayjs from 'dayjs'
|
|
import { Badge } from 'ui'
|
|
|
|
import SimpleCodeBlock from 'components/to-be-cleaned/SimpleCodeBlock'
|
|
import Table from 'components/to-be-cleaned/Table'
|
|
import type { User } from 'data/auth/users-query'
|
|
import UserDropdown from './UserDropdown'
|
|
import { getDisplayName } from './UserListItem.utils'
|
|
|
|
interface UserListItemProps {
|
|
user: User
|
|
permissions: {
|
|
canRemoveUser: boolean
|
|
canRemoveMFAFactors: boolean
|
|
canSendMagicLink: boolean
|
|
canSendRecovery: boolean
|
|
canSendOtp: boolean
|
|
}
|
|
setSelectedUser: (user: User) => void
|
|
setUserSidePanelOpen: (open: boolean) => void
|
|
}
|
|
|
|
const UserListItem = ({
|
|
user,
|
|
permissions,
|
|
setSelectedUser,
|
|
setUserSidePanelOpen,
|
|
}: UserListItemProps) => {
|
|
const isUserConfirmed = user.email_confirmed_at || user.phone_confirmed_at
|
|
const createdAt = dayjs(user.created_at)
|
|
const lastSignedIn = dayjs(user.last_sign_in_at)
|
|
|
|
return (
|
|
<Table.tr className="relative" key={user.id}>
|
|
<Table.td className="whitespace-nowrap">
|
|
<span className="text-foreground">{getDisplayName(user)}</span>
|
|
</Table.td>
|
|
<Table.td className="whitespace-nowrap">
|
|
<div className="flex items-center gap-2">
|
|
<span className="text-sm text-foreground">{!user.email ? '-' : user.email}</span>
|
|
</div>
|
|
</Table.td>
|
|
<Table.td className="whitespace-nowrap">
|
|
<span className="text-foreground">{!user.phone ? '-' : user.phone}</span>
|
|
</Table.td>
|
|
<Table.td className="table-cell">
|
|
<span className="capitalize text-foreground">
|
|
{user.is_anonymous ? 'Anonymous' : user?.raw_app_meta_data?.provider}
|
|
</span>
|
|
</Table.td>
|
|
<Table.td className="table-cell">
|
|
<span className="text-foreground">{createdAt?.format('DD MMM, YYYY HH:mm')}</span>
|
|
</Table.td>
|
|
<Table.td className="table-cell">
|
|
{user?.last_sign_in_at ? (
|
|
lastSignedIn?.format('DD MMM, YYYY HH:mm')
|
|
) : !isUserConfirmed ? (
|
|
<Badge variant="warning">Waiting for verification..</Badge>
|
|
) : (
|
|
'Never'
|
|
)}
|
|
</Table.td>
|
|
<Table.td className="table-cell">
|
|
<div className="flex max-w-[72px] items-baseline">
|
|
<SimpleCodeBlock className="font-xs bash">{user.id}</SimpleCodeBlock>
|
|
<div>...</div>
|
|
</div>
|
|
</Table.td>
|
|
<Table.td className="table-cell">
|
|
<UserDropdown
|
|
user={user}
|
|
permissions={permissions}
|
|
setSelectedUser={setSelectedUser}
|
|
setUserSidePanelOpen={setUserSidePanelOpen}
|
|
/>
|
|
</Table.td>
|
|
</Table.tr>
|
|
)
|
|
}
|
|
|
|
export default UserListItem
|