import { PermissionAction } from '@supabase/shared-types/out/constants' import { noop } from 'lodash' import { Check, ChevronLeft, Edit, MoreVertical, Plus, Search, Trash, X } from 'lucide-react' import Link from 'next/link' import { useState } from 'react' import { PostgresColumn } from '@supabase/postgres-meta' import { useParams } from 'common' import Table from 'components/to-be-cleaned/Table' import AlertError from 'components/ui/AlertError' import { ButtonTooltip } from 'components/ui/ButtonTooltip' import { NoSearchResults } from 'components/ui/NoSearchResults' import { useTableEditorQuery } from 'data/table-editor/table-editor-query' import { isTableLike } from 'data/table-editor/table-editor-types' import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { useIsProtectedSchema } from 'hooks/useProtectedSchemas' import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Input, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { ProtectedSchemaWarning } from '../ProtectedSchemaWarning' interface ColumnListProps { onAddColumn: () => void onEditColumn: (column: PostgresColumn) => void onDeleteColumn: (column: PostgresColumn) => void } export const ColumnList = ({ onAddColumn = noop, onEditColumn = noop, onDeleteColumn = noop, }: ColumnListProps) => { const { id: _id, ref } = useParams() const id = _id ? Number(_id) : undefined const { data: project } = useSelectedProjectQuery() const { data: selectedTable, error, isError, isPending: isLoading, isSuccess, } = useTableEditorQuery({ projectRef: project?.ref, connectionString: project?.connectionString, id, }) const [filterString, setFilterString] = useState('') const isTableEntity = isTableLike(selectedTable) const columns = (filterString.length === 0 ? selectedTable?.columns ?? [] : selectedTable?.columns?.filter((column) => column.name.includes(filterString))) ?? [] const { isSchemaLocked } = useIsProtectedSchema({ schema: selectedTable?.schema ?? '' }) const { can: canUpdateColumns } = useAsyncCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'columns' ) return (
setFilterString(e.target.value)} icon={} />
{!isSchemaLocked && isTableEntity && ( } disabled={!canUpdateColumns} onClick={() => onAddColumn()} tooltip={{ content: { side: 'bottom', text: !canUpdateColumns ? 'You need additional permissions to create columns' : undefined, }, }} > New column )}
{isSchemaLocked && ( )} {isLoading && } {isError && ( )} {isSuccess && ( <> {columns.length === 0 ? ( setFilterString('')} /> ) : (
Name, Description , Data Type, Format, Nullable , , ]} body={columns.map((x) => (

{x.name}

{x.comment !== null ? (

{x.comment}

) : (

No description

)}
{x.data_type} {x.format} {x.is_nullable ? ( ) : ( )} {!isSchemaLocked && isTableEntity && (