import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import dayjs from 'dayjs' import { Edit3, Eye, EyeOff, Key, Loader, MoreVertical, Trash } from 'lucide-react' import { parseAsString, useQueryState } from 'nuqs' import { useState } from 'react' import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuSeparator, DropdownMenuTrigger, } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' import { SecretTableColumn } from './Secrets.types' import { DropdownMenuItemTooltip } from '@/components/ui/DropdownMenuItemTooltip' import { useVaultSecretDecryptedValueQuery } from '@/data/vault/vault-secret-decrypted-value-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import type { VaultSecret } from '@/types' interface SecretRowProps { row: VaultSecret col: SecretTableColumn } export const SecretRow = ({ row, col }: SecretRowProps) => { const { ref } = useParams() const { data: project } = useSelectedProjectQuery() const [revealSecret, setRevealSecret] = useState(false) const name = row?.name ?? 'No name provided' const [, setSelectedSecretToEdit] = useQueryState('edit', parseAsString) const [, setSelectedSecretToDelete] = useQueryState('delete', parseAsString) const { can: canManageSecrets } = useAsyncCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables' ) const { data: revealedValue, isFetching } = useVaultSecretDecryptedValueQuery( { projectRef: ref!, connectionString: project?.connectionString, id: row.id, }, { enabled: !!(ref! && row.id) && revealSecret, } ) if (col.id === 'actions') { return (
Edit
Delete
••••••••••••••••••
)}{row.updated_at === row.created_at ? 'Added' : 'Updated'} on{' '} {dayjs(row.updated_at).format('MMM D, YYYY')}
{row.id}
{name}
{row.description !== undefined && row.description !== '' && ({row.description}