// This is a modal authentication component that displays the AWS Amplify Authenticator. import { useMemo, useContext, useEffect, memo } from 'react'; // Context import { AppContext } from '../App'; // Cloudscape import { Box, Button, Modal, SpaceBetween } from '@cloudscape-design/components'; // AWS import { Amplify, Hub } from 'aws-amplify'; import { Authenticator, ThemeProvider, defaultDarkModeOverride } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css'; import awsExports from '../../aws-exports'; Amplify.configure(awsExports); const authUiComponents = { SignUp: { Header() { return (
A verification code will be sent to your email address to validate the account.
); }, }, }; function Auth({ visible, setVisible }) { const { appTheme } = useContext(AppContext); /** * Amplify-UI's uses 80 for the button, 90 for hover * Override to Cloudscape colors - https://cloudscape.design/foundation/visual-foundation/colors/ * light mode primary : blue-800 #033160 * light mode hover : blue-600 #0972d3 * dark mode primary : blue-500 #539fe5 * dark mode hover : blue-400 #89bdee */ const theme = { name: 'AuthTheme', overrides: [defaultDarkModeOverride], tokens: { colors: { brand: { primary: { 80: appTheme === 'theme.light' ? '#033160' : '#539fe5', 90: appTheme === 'theme.light' ? '#0972d3' : '#89bdee', 100: appTheme === 'theme.light' ? '#033160' : '#539fe5', }, }, }, components: { tabs: { item: { _hover: { color: { value: appTheme === 'theme.light' ? '#0972d3' : '#89bdee', }, }, }, }, }, }, }; const colorMode = useMemo(() => { if (appTheme === 'theme.light') { return 'light'; } else if (appTheme === 'theme.dark') { return 'dark'; } else { return 'system'; } }, [appTheme]); // Show auth modal when token refresh fails useEffect(() => { Hub.listen('auth', (data) => { if (data.payload.event === 'tokenRefresh_failure') { setVisible(true); } }); }, [setVisible]); return ( setVisible(false)} visible={visible} footer={ } > You will be redirected shortly. ); } export default memo(Auth);