Files
1127c4ba88 Project Level Permissions (#27347)
* 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>
2024-07-01 17:59:54 +08:00

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