import { buildTableEditorUrl } from 'components/grid/SupabaseGrid.utils' import { DiamondIcon, Edit, ExternalLink, Fingerprint, Hash, InfoIcon, Key, Table2, } from 'lucide-react' import Link from 'next/link' import { Handle, NodeProps } from 'reactflow' import { Button, cn, Tooltip, TooltipContent, TooltipTrigger } from 'ui' import { useColumnEditionContext } from './ColumnEditionContext' // ReactFlow is scaling everything by the factor of 2 export const TABLE_NODE_WIDTH = 320 export const TABLE_NODE_ROW_HEIGHT = 40 export type TableNodeData = { id: number schema: string name: string ref?: string isForeign: boolean description: string columns: { id: string isPrimary: boolean isNullable: boolean isUnique: boolean isIdentity: boolean name: string format: string }[] } export const TableNode = ({ data, targetPosition, sourcePosition, placeholder, }: NodeProps & { placeholder?: boolean }) => { // Important styles is a nasty hack to use Handles (required for edges calculations), but do not show them in the UI. // ref: https://github.com/wbkd/react-flow/discussions/2698 const hiddenNodeConnector = '!h-px !w-px !min-w-0 !min-h-0 !cursor-grab !border-0 !opacity-0' const columnEditionContext = useColumnEditionContext() const itemHeight = 'h-[22px]' return ( <> {data.isForeign ? (
{data.name} {targetPosition && ( )}
) : (
{data.name}
{data.description && ( {data.description} )} {!placeholder && ( )}
{data.columns.map((column) => (
{column.isPrimary && ( )} {column.isNullable && ( )} {!column.isNullable && ( )} {column.isUnique && ( )} {column.isIdentity && ( )}
{column.name} {column.format}
{targetPosition && ( )} {sourcePosition && ( )} Edit column
))}
)} ) }