settings.tsx87 lines · main
1import { PageContainer } from 'ui-patterns/PageContainer'
2import {
3 PageHeader,
4 PageHeaderDescription,
5 PageHeaderMeta,
6 PageHeaderSummary,
7 PageHeaderTitle,
8} from 'ui-patterns/PageHeader'
9import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
10
11import { useIsJitDbAccessEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
12import { DiskManagementPanelForm } from '@/components/interfaces/DiskManagement/DiskManagementPanelForm'
13import { BannedIPs } from '@/components/interfaces/Settings/Database/BannedIPs'
14import { ConnectionPooling } from '@/components/interfaces/Settings/Database/ConnectionPooling/ConnectionPooling'
15import { DatabaseReadOnlyAlert } from '@/components/interfaces/Settings/Database/DatabaseReadOnlyAlert'
16import ResetDbPassword from '@/components/interfaces/Settings/Database/DatabaseSettings/ResetDbPassword'
17import { DiskSizeConfiguration } from '@/components/interfaces/Settings/Database/DiskSizeConfiguration'
18import { JitDbAccessConfiguration } from '@/components/interfaces/Settings/Database/JitDatabaseAccess/JitDbAccessConfiguration'
19import { NetworkRestrictions } from '@/components/interfaces/Settings/Database/NetworkRestrictions/NetworkRestrictions'
20import { PoolingModesModal } from '@/components/interfaces/Settings/Database/PoolingModesModal'
21import { SettingsDatabaseEmptyStateLocal } from '@/components/interfaces/Settings/Database/SettingsDatabaseEmptyStateLocal'
22import { SSLConfiguration } from '@/components/interfaces/Settings/Database/SSLConfiguration'
23import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout'
24import DefaultLayout from '@/components/layouts/DefaultLayout'
25import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
26import { useIsAwsCloudProvider, useIsAwsK8sCloudProvider } from '@/hooks/misc/useSelectedProject'
27import { IS_PLATFORM } from '@/lib/constants'
28import type { NextPageWithLayout } from '@/types'
29
30const DatabaseSettings: NextPageWithLayout = () => {
31 const isAws = useIsAwsCloudProvider()
32 const isAwsK8s = useIsAwsK8sCloudProvider()
33 const jitDbAccessEnabled = useIsJitDbAccessEnabled()
34 const showNewDiskManagementUI = isAws || isAwsK8s
35 const { databaseNetworkRestrictions } = useIsFeatureEnabled(['database:network_restrictions'])
36
37 return (
38 <>
39 <PageHeader size="small">
40 <PageHeaderMeta>
41 <PageHeaderSummary>
42 <PageHeaderTitle>Database Settings</PageHeaderTitle>
43 <PageHeaderDescription>
44 Connections, security, and network configuration
45 </PageHeaderDescription>
46 </PageHeaderSummary>
47 </PageHeaderMeta>
48 </PageHeader>
49 {IS_PLATFORM ? (
50 <>
51 <PageContainer size="small" className="flex flex-col gap-8 pb-12">
52 <DatabaseReadOnlyAlert />
53 <ResetDbPassword />
54 {jitDbAccessEnabled && <JitDbAccessConfiguration />}
55 <ConnectionPooling />
56 <SSLConfiguration />
57 {showNewDiskManagementUI ? (
58 // This form is hidden if Disk and Compute form is enabled, new form is on ./settings/compute-and-disk
59 <DiskManagementPanelForm />
60 ) : (
61 <DiskSizeConfiguration />
62 )}
63 {databaseNetworkRestrictions && <NetworkRestrictions />}
64 <BannedIPs />
65 </PageContainer>
66 <PoolingModesModal />
67 </>
68 ) : (
69 <PageContainer size="small" className="pb-12">
70 <PageSection>
71 <PageSectionContent className="space-y-4 md:space-y-8">
72 <SettingsDatabaseEmptyStateLocal />
73 </PageSectionContent>
74 </PageSection>
75 </PageContainer>
76 )}
77 </>
78 )
79}
80
81DatabaseSettings.getLayout = (page) => (
82 <DefaultLayout>
83 <DatabaseLayout title="Settings">{page}</DatabaseLayout>
84 </DefaultLayout>
85)
86
87export default DatabaseSettings