legacy.tsx70 lines · main
1import { JwtSecretUpdateError, JwtSecretUpdateStatus } from '@supabase/shared-types/out/events'
2import { useQueryClient } from '@tanstack/react-query'
3import { useParams } from 'common'
4import { useEffect, useRef } from 'react'
5import { toast } from 'sonner'
6
7import { JWTSettings } from '@/components/interfaces/JwtSecrets/jwt-settings'
8import { JWT_SECRET_UPDATE_ERROR_MESSAGES } from '@/components/interfaces/JwtSecrets/jwt.constants'
9import DefaultLayout from '@/components/layouts/DefaultLayout'
10import JWTKeysLayout from '@/components/layouts/JWTKeys/JWTKeysLayout'
11import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout'
12import { UnknownInterface } from '@/components/ui/UnknownInterface'
13import { useJwtSecretUpdatingStatusQuery } from '@/data/config/jwt-secret-updating-status-query'
14import { configKeys } from '@/data/config/keys'
15import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
16import type { NextPageWithLayout } from '@/types'
17
18const JWTKeysLegacyPage: NextPageWithLayout = () => {
19 const client = useQueryClient()
20 const { ref: projectRef } = useParams()
21 const { projectSettingsLegacyJwtKeys } = useIsFeatureEnabled(['project_settings:legacy_jwt_keys'])
22
23 const { data } = useJwtSecretUpdatingStatusQuery(
24 { projectRef },
25 { enabled: projectSettingsLegacyJwtKeys }
26 )
27 const jwtSecretUpdateStatus = data?.jwtSecretUpdateStatus
28 const jwtSecretUpdateError = data?.jwtSecretUpdateError
29
30 const previousJwtSecretUpdateStatus = useRef<JwtSecretUpdateStatus>(undefined)
31 const { Failed, Updated, Updating } = JwtSecretUpdateStatus
32 const jwtSecretUpdateErrorMessage =
33 JWT_SECRET_UPDATE_ERROR_MESSAGES[jwtSecretUpdateError as JwtSecretUpdateError]
34
35 useEffect(() => {
36 if (previousJwtSecretUpdateStatus.current === Updating) {
37 switch (jwtSecretUpdateStatus) {
38 case Updated:
39 client.invalidateQueries({ queryKey: configKeys.api(projectRef) })
40 client.invalidateQueries({ queryKey: configKeys.settings(projectRef) })
41 client.invalidateQueries({ queryKey: configKeys.postgrest(projectRef) })
42 toast.success('Successfully updated JWT secret')
43 break
44 case Failed:
45 toast.error(`JWT secret update failed: ${jwtSecretUpdateErrorMessage}`)
46 break
47 }
48 }
49
50 previousJwtSecretUpdateStatus.current = jwtSecretUpdateStatus
51 }, [jwtSecretUpdateStatus])
52
53 if (!projectSettingsLegacyJwtKeys) {
54 return <UnknownInterface urlBack={`/project/${projectRef}/settings/jwt/signing-keys`} />
55 }
56
57 return (
58 <JWTKeysLayout>
59 <JWTSettings />
60 </JWTKeysLayout>
61 )
62}
63
64JWTKeysLegacyPage.getLayout = (page) => (
65 <DefaultLayout>
66 <SettingsLayout title="jwt keys (legacy)">{page}</SettingsLayout>
67 </DefaultLayout>
68)
69
70export default JWTKeysLegacyPage