sessions.tsx63 lines · main
1import { PermissionAction } from '@supabase/shared-types/out/constants'
2import { PageContainer } from 'ui-patterns/PageContainer'
3import {
4 PageHeader,
5 PageHeaderDescription,
6 PageHeaderMeta,
7 PageHeaderSummary,
8 PageHeaderTitle,
9} from 'ui-patterns/PageHeader'
10import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
11import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
12
13import { SessionsAuthSettingsForm } from '@/components/interfaces/Auth/SessionsAuthSettingsForm/SessionsAuthSettingsForm'
14import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout'
15import DefaultLayout from '@/components/layouts/DefaultLayout'
16import NoPermission from '@/components/ui/NoPermission'
17import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
18import type { NextPageWithLayout } from '@/types'
19
20const SessionsPage: NextPageWithLayout = () => {
21 const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
22 PermissionAction.READ,
23 'custom_config_gotrue'
24 )
25
26 if (isPermissionsLoaded && !canReadAuthSettings) {
27 return <NoPermission isFullPage resourceText="access your project's authentication settings" />
28 }
29
30 return (
31 <>
32 <PageHeader size="default">
33 <PageHeaderMeta>
34 <PageHeaderSummary>
35 <PageHeaderTitle>User Sessions</PageHeaderTitle>
36 <PageHeaderDescription>
37 Configure settings for user sessions and refresh tokens
38 </PageHeaderDescription>
39 </PageHeaderSummary>
40 </PageHeaderMeta>
41 </PageHeader>
42 <PageContainer size="default">
43 {!isPermissionsLoaded ? (
44 <PageSection>
45 <PageSectionContent>
46 <GenericSkeletonLoader />
47 </PageSectionContent>
48 </PageSection>
49 ) : (
50 <SessionsAuthSettingsForm />
51 )}
52 </PageContainer>
53 </>
54 )
55}
56
57SessionsPage.getLayout = (page) => (
58 <DefaultLayout>
59 <AuthLayout title="Sessions">{page}</AuthLayout>
60 </DefaultLayout>
61)
62
63export default SessionsPage