legacy.tsx70 lines · main
| 1 | import { JwtSecretUpdateError, JwtSecretUpdateStatus } from '@supabase/shared-types/out/events' |
| 2 | import { useQueryClient } from '@tanstack/react-query' |
| 3 | import { useParams } from 'common' |
| 4 | import { useEffect, useRef } from 'react' |
| 5 | import { toast } from 'sonner' |
| 6 | |
| 7 | import { JWTSettings } from '@/components/interfaces/JwtSecrets/jwt-settings' |
| 8 | import { JWT_SECRET_UPDATE_ERROR_MESSAGES } from '@/components/interfaces/JwtSecrets/jwt.constants' |
| 9 | import DefaultLayout from '@/components/layouts/DefaultLayout' |
| 10 | import JWTKeysLayout from '@/components/layouts/JWTKeys/JWTKeysLayout' |
| 11 | import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' |
| 12 | import { UnknownInterface } from '@/components/ui/UnknownInterface' |
| 13 | import { useJwtSecretUpdatingStatusQuery } from '@/data/config/jwt-secret-updating-status-query' |
| 14 | import { configKeys } from '@/data/config/keys' |
| 15 | import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' |
| 16 | import type { NextPageWithLayout } from '@/types' |
| 17 | |
| 18 | const 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 | |
| 64 | JWTKeysLegacyPage.getLayout = (page) => ( |
| 65 | <DefaultLayout> |
| 66 | <SettingsLayout title="jwt keys (legacy)">{page}</SettingsLayout> |
| 67 | </DefaultLayout> |
| 68 | ) |
| 69 | |
| 70 | export default JWTKeysLegacyPage |