| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- import { PermissionAction } from '@supabase/shared-types/out/constants'
- import { Edit, MoreVertical, Trash } from 'lucide-react'
- import {
- Button,
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuItem,
- DropdownMenuSeparator,
- DropdownMenuTrigger,
- TableCell,
- TableRow,
- Tooltip,
- TooltipContent,
- TooltipTrigger,
- } from 'ui'
- import { TimestampInfo } from 'ui-patterns'
- import CopyButton from '@/components/ui/CopyButton'
- import type { OAuthApp } from '@/data/oauth/oauth-apps-query'
- import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
- export interface OAuthAppRowProps {
- app: OAuthApp
- onSelectEdit: () => void
- onSelectDelete: () => void
- }
- export const OAuthAppRow = ({ app, onSelectEdit, onSelectDelete }: OAuthAppRowProps) => {
- const { can: canUpdateOAuthApps } = useAsyncCheckPermissions(
- PermissionAction.UPDATE,
- 'approved_oauth_apps'
- )
- const { can: canDeleteOAuthApps } = useAsyncCheckPermissions(
- PermissionAction.DELETE,
- 'approved_oauth_apps'
- )
- return (
- <TableRow>
- <TableCell className="w-[62px] min-w-[62px] max-w-[62px]">
- <div
- className="w-[30px] h-[30px] rounded-full bg-no-repeat bg-cover bg-center border border-control flex items-center justify-center text-xs"
- style={{ backgroundImage: app.icon ? `url('${app.icon}')` : 'none' }}
- >
- {!!app.icon ? '' : `${app.name[0]}`}
- </div>
- </TableCell>
- <TableCell>
- <p title={app.name} className="truncate">
- {app.name}
- </p>
- </TableCell>
- <TableCell>
- <div className="flex items-center gap-x-2">
- <p className="text-xs font-mono truncate" title={app.client_id}>
- {app.client_id}
- </p>
- <CopyButton type="default" iconOnly text={app.client_id ?? ''} className="px-1" />
- </div>
- </TableCell>
- <TableCell>
- <TimestampInfo
- utcTimestamp={app.created_at ?? ''}
- labelFormat="DD/MM/YYYY, HH:mm:ss"
- className="text-sm"
- />
- </TableCell>
- <TableCell className="text-right">
- <DropdownMenu>
- <DropdownMenuTrigger asChild>
- <Button type="default" icon={<MoreVertical />} className="px-1" />
- </DropdownMenuTrigger>
- <DropdownMenuContent align="end" side="bottom" className="w-32">
- <Tooltip>
- <TooltipTrigger asChild>
- <DropdownMenuItem
- key="edit"
- disabled={!canUpdateOAuthApps}
- className="space-x-2 pointer-events-auto!"
- onClick={() => {
- if (canUpdateOAuthApps) onSelectEdit()
- }}
- >
- <Edit size={16} />
- <p>Edit app</p>
- </DropdownMenuItem>
- </TooltipTrigger>
- {!canUpdateOAuthApps && (
- <TooltipContent side="left">
- You need additional permissions to edit apps
- </TooltipContent>
- )}
- </Tooltip>
- <DropdownMenuSeparator />
- <Tooltip>
- <TooltipTrigger asChild>
- <DropdownMenuItem
- disabled={!canDeleteOAuthApps}
- className="space-x-2 pointer-events-auto!"
- key="delete"
- onClick={() => {
- if (canDeleteOAuthApps) onSelectDelete()
- }}
- >
- <Trash size={16} />
- <p>Delete app</p>
- </DropdownMenuItem>
- </TooltipTrigger>
- {!canDeleteOAuthApps && (
- <TooltipContent side="left">
- You need additional permissions to delete apps
- </TooltipContent>
- )}
- </Tooltip>
- </DropdownMenuContent>
- </DropdownMenu>
- </TableCell>
- </TableRow>
- )
- }
|