PublicationsTables() — supabase Function Reference
Architecture documentation for the PublicationsTables() function in PublicationsTables.tsx from the supabase codebase.
Entity Profile
Relationship Graph
Source Code
apps/studio/components/interfaces/Database/Publications/PublicationsTables.tsx lines 19–138
export const PublicationsTables = () => {
const { ref, id } = useParams()
const { data: project } = useSelectedProjectQuery()
const [filterString, setFilterString] = useState<string>('')
const { can: canUpdatePublications, isLoading: isLoadingPermissions } = useAsyncCheckPermissions(
PermissionAction.TENANT_SQL_ADMIN_WRITE,
'publications'
)
const { data: publications = [] } = useDatabasePublicationsQuery({
projectRef: project?.ref,
connectionString: project?.connectionString,
})
const selectedPublication = publications.find((pub) => pub.id === Number(id))
const {
data: tablesData = [],
isPending: isLoading,
isSuccess,
isError,
error,
} = useTablesQuery({
projectRef: project?.ref,
connectionString: project?.connectionString,
})
const tables = useMemo(() => {
return tablesData.filter((table) =>
filterString.length === 0 ? table : table.name.includes(filterString)
)
}, [tablesData, filterString])
return (
<>
<div className="mb-4">
<div className="flex items-center justify-between">
<div className="flex items-center space-x-3">
<ButtonTooltip
asChild
type="outline"
icon={<ChevronLeft />}
style={{ padding: '5px' }}
tooltip={{ content: { side: 'bottom', text: 'Go back to publications list' } }}
>
<Link href={`/project/${ref}/database/publications`} />
</ButtonTooltip>
<div>
<Input
size="tiny"
placeholder="Search for a table"
value={filterString}
onChange={(e) => setFilterString(e.target.value)}
icon={<Search />}
className="w-48"
/>
</div>
</div>
{!isLoadingPermissions && !canUpdatePublications && (
<Admonition
type="note"
className="w-[500px]"
title="You need additional permissions to update database replications"
/>
)}
</div>
</div>
{(isLoading || isLoadingPermissions) && (
<div className="mt-8">
<LogoLoader />
</div>
)}
{isError && <AlertError error={error} subject="Failed to retrieve tables" />}
{isSuccess &&
(tables.length === 0 ? (
<NoSearchResults searchString={filterString} onResetFilter={() => setFilterString('')} />
) : (
<Card>
<Table>
<TableHeader>
<TableRow>
<TableHead>Name</TableHead>
<TableHead>Schema</TableHead>
<TableHead className="hidden lg:table-cell">Description</TableHead>
{/*
We've disabled All tables toggle for publications.
See https://github.com/supabase/supabase/pull/7233.
*/}
<TableHead />
</TableRow>
</TableHeader>
<TableBody>
{!!selectedPublication ? (
tables.map((table) => (
<PublicationsTableItem
key={table.id}
table={table}
selectedPublication={selectedPublication}
/>
))
) : (
<TableRow>
<TableCell colSpan={4}>
<p>The selected publication with ID {id} cannot be found</p>
<p className="text-foreground-light">
Head back to the list of publications to select one from there
</p>
</TableCell>
</TableRow>
)}
</TableBody>
</Table>
</Card>
))}
</>
)
}
Domain
Subdomains
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free