import { PermissionAction } from '@supabase/shared-types/out/constants' import { partition } from 'lodash' import { ChevronUp, Edit, ExternalLink, Trash } from 'lucide-react' import Image from 'next/legacy/image' import Link from 'next/link' import { useParams } from 'common' import { ButtonTooltip } from 'components/ui/ButtonTooltip' import type { FDW } from 'data/fdw/fdws-query' import { EditorTablePageLink } from 'data/prefetchers/project.$ref.editor.$id' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { Collapsible } from 'ui' import type { WrapperMeta } from './Wrappers.types' interface WrapperRowProps { wrappers: FDW[] wrapperMeta: WrapperMeta isOpen: boolean onOpen: (wrapper: string) => void onSelectDelete: (wrapper: FDW) => void } const WrapperRow = ({ wrappers = [], wrapperMeta, isOpen, onOpen, onSelectDelete, }: WrapperRowProps) => { const { ref } = useParams() const canManageWrappers = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'wrappers') return ( <> onOpen(wrapperMeta.name)} className={[ 'bg-surface-100', 'hover:bg-overlay-hover', 'data-open:bg-selection', 'border-default', 'hover:border-strong', 'data-open:border-strong', 'col-span-12 mx-auto', '-space-y-px overflow-hidden', 'transition border shadow hover:z-50', 'first:rounded-tl first:rounded-tr first:!border-t', 'last:rounded-bl last:rounded-br last:border-t-0', ].join(' ')} >
{wrappers.map((wrapper) => { const serverOptions = Object.fromEntries( wrapper.server_options.map((option: any) => option.split('=')) ) const [encryptedMetadata, visibleMetadata] = partition( wrapperMeta.server.options.filter((option) => !option.hidden), 'secureEntry' ) return (

{wrapper.name}

{visibleMetadata.map((metadata) => (

{metadata.label}:

{serverOptions[metadata.name]}

))} {encryptedMetadata.map((metadata) => (

{metadata.label}:

Encrypted in Vault
))}

Foreign tables{wrapper.tables && `: (${wrapper.tables.length})`}

{wrapper.tables ? ( wrapper.tables.map((table) => (
{table.name}
)) ) : (

No tables available

)}
} className="px-1.5 space-x-0" tooltip={{ content: { side: 'bottom', text: !canManageWrappers ? 'You need additional permissions to edit wrappers' : 'Edit wrapper', }, }} > Edit } className="px-1.5" onClick={() => onSelectDelete(wrapper)} tooltip={{ content: { side: 'bottom', text: !canManageWrappers ? 'You need additional permissions to delete wrappers' : 'Delete wrapper', }, }} />
) })}
) } export default WrapperRow