import { useParams } from 'common' import Link from 'next/link' import { useMemo } from 'react' import { Button, FloatingPlate } from 'ui' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { Footer } from '@/components/grid/components/footer/Footer' import { CodeEditor } from '@/components/ui/CodeEditor/CodeEditor' import { useTableDefinitionQuery } from '@/data/database/table-definition-query' import { useViewDefinitionQuery } from '@/data/database/view-definition-query' import { Entity, isTableLike, isViewLike } from '@/data/table-editor/table-editor-types' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { formatSql } from '@/lib/formatSql' export interface TableDefinitionProps { entity?: Entity } export const TableDefinition = ({ entity }: TableDefinitionProps) => { const { ref } = useParams() const { data: project } = useSelectedProjectQuery() const viewResult = useViewDefinitionQuery( { id: entity?.id, includeCreateStatement: true, projectRef: project?.ref, connectionString: project?.connectionString, }, { enabled: isViewLike(entity), } ) const tableResult = useTableDefinitionQuery( { id: entity?.id, projectRef: project?.ref, connectionString: project?.connectionString, }, { enabled: isTableLike(entity), } ) const { data: definition, isLoading } = isViewLike(entity) ? viewResult : tableResult const formattedDefinition = useMemo( () => (definition ? formatSql(definition) : undefined), [definition] ) if (isLoading) { return (