|
1 | 1 | 'use client'; |
2 | 2 |
|
| 3 | +import { useEffect, useRef, useState } from 'react'; |
3 | 4 | import type { AuthStatus } from '@aws-amplify/ui'; |
4 | 5 | import Link from 'next/link'; |
5 | 6 | import content from '@content/content'; |
6 | 7 | import { useAuthStatus } from '@hooks/use-auth-status'; |
| 8 | +import { fetchAuthSession } from 'aws-amplify/auth'; |
| 9 | +import { clientConfigurationApiClient } from 'nhs-notify-backend-client'; |
7 | 10 |
|
8 | 11 | const headerContent = content.components.header; |
9 | 12 |
|
10 | 13 | export function HeaderNavigation({ |
11 | 14 | initialAuthStatus, |
12 | | - routingEnabled, |
| 15 | + routingEnabled: initialRoutingEnabled = false, |
13 | 16 | }: { |
14 | 17 | initialAuthStatus: AuthStatus; |
15 | 18 | routingEnabled?: boolean; |
16 | 19 | }) { |
17 | 20 | const authStatus = useAuthStatus(initialAuthStatus); |
| 21 | + const prevStatus = useRef(initialAuthStatus); |
| 22 | + const [routingEnabled, setRoutingEnabled] = useState(initialRoutingEnabled); |
| 23 | + |
| 24 | + useEffect(() => { |
| 25 | + if (authStatus === prevStatus.current) return; |
| 26 | + |
| 27 | + prevStatus.current = authStatus; |
| 28 | + |
| 29 | + if (authStatus !== 'authenticated') { |
| 30 | + setRoutingEnabled(false); |
| 31 | + return; |
| 32 | + } |
| 33 | + |
| 34 | + (async () => { |
| 35 | + try { |
| 36 | + const session = await fetchAuthSession(); |
| 37 | + const token = session.tokens?.accessToken?.toString(); |
| 38 | + if (!token) return; |
| 39 | + |
| 40 | + const result = await clientConfigurationApiClient.fetch(token); |
| 41 | + setRoutingEnabled(result.data?.features?.routing ?? false); |
| 42 | + } catch { |
| 43 | + setRoutingEnabled(false); |
| 44 | + } |
| 45 | + })(); |
| 46 | + }, [authStatus]); |
18 | 47 |
|
19 | 48 | return ( |
20 | 49 | <> |
|
0 commit comments