functions.tsx60 lines · main
1import { PermissionAction } from '@supabase/shared-types/out/constants'
2import { PageContainer } from 'ui-patterns/PageContainer'
3import {
4 PageHeader,
5 PageHeaderAside,
6 PageHeaderMeta,
7 PageHeaderSummary,
8 PageHeaderTitle,
9} from 'ui-patterns/PageHeader'
10import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
11
12import { FunctionsList } from '@/components/interfaces/Database/Functions/FunctionsList/FunctionsList'
13import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout'
14import { DefaultLayout } from '@/components/layouts/DefaultLayout'
15import { DocsButton } from '@/components/ui/DocsButton'
16import NoPermission from '@/components/ui/NoPermission'
17import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
18import { DOCS_URL } from '@/lib/constants'
19import type { NextPageWithLayout } from '@/types'
20
21const DatabaseFunctionsPage: NextPageWithLayout = () => {
22 const { can: canReadFunctions, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
23 PermissionAction.TENANT_SQL_ADMIN_READ,
24 'functions'
25 )
26
27 if (isPermissionsLoaded && !canReadFunctions) {
28 return <NoPermission isFullPage resourceText="view database functions" />
29 }
30
31 return (
32 <>
33 <PageHeader size="large">
34 <PageHeaderMeta>
35 <PageHeaderSummary>
36 <PageHeaderTitle>Database Functions</PageHeaderTitle>
37 </PageHeaderSummary>
38 <PageHeaderAside>
39 <DocsButton href={`${DOCS_URL}/guides/database/functions`} />
40 </PageHeaderAside>
41 </PageHeaderMeta>
42 </PageHeader>
43 <PageContainer size="large">
44 <PageSection>
45 <PageSectionContent>
46 <FunctionsList />
47 </PageSectionContent>
48 </PageSection>
49 </PageContainer>
50 </>
51 )
52}
53
54DatabaseFunctionsPage.getLayout = (page) => (
55 <DefaultLayout>
56 <DatabaseLayout title="Functions">{page}</DatabaseLayout>
57 </DefaultLayout>
58)
59
60export default DatabaseFunctionsPage