index.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import '../src/index.css'
  2. import { setupGlobals } from '../src/ui'
  3. import * as React from 'react'
  4. import * as ReactDOM from 'react-dom'
  5. import { init, t } from '../src/amplify/core'
  6. // @ts-ignore
  7. import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
  8. import { LoginForm, ResetPasswordForm, SignupForm, ConfirmWithCodeForm } from '../src/amplify/ui'
  9. import { AuthFormRootContext } from '../src/amplify/core'
  10. // bootstrap
  11. setupGlobals()
  12. init()
  13. function App() {
  14. const [errors, setErrors] = React.useState<string | null>(null)
  15. const [currentTab, setCurrentTab] = React.useState<'login' | 'reset' | 'signup' | 'confirm-code' | any>('login')
  16. const onSessionCallback = React.useCallback((session: any) => {
  17. console.log('==>>session callback:', session)
  18. }, [])
  19. React.useEffect(() => {
  20. setErrors(null)
  21. }, [currentTab])
  22. let content = null
  23. // support passing object with type field
  24. let _currentTab = currentTab?.type ? currentTab.type : currentTab
  25. let _currentTabProps = currentTab?.props || {}
  26. switch (_currentTab) {
  27. case 'login':
  28. content = <LoginForm/>
  29. break
  30. case 'reset':
  31. content = <ResetPasswordForm/>
  32. break
  33. case 'signup':
  34. content = <SignupForm/>
  35. break
  36. case 'confirm-code':
  37. content = <ConfirmWithCodeForm {..._currentTabProps}/>
  38. break
  39. }
  40. return (
  41. <main className={'h-screen flex flex-col justify-center items-center gap-4'}>
  42. <AuthFormRootContext.Provider value={{
  43. errors, setErrors, setCurrentTab,
  44. onSessionCallback
  45. }}>
  46. <Card className={'sm:w-96'}>
  47. <CardHeader>
  48. <CardTitle className={'capitalize'}>{t(_currentTab)?.replace('-', ' ')}</CardTitle>
  49. </CardHeader>
  50. <CardContent>
  51. {content}
  52. </CardContent>
  53. </Card>
  54. </AuthFormRootContext.Provider>
  55. </main>
  56. )
  57. }
  58. // mount app
  59. ReactDOM.render(<App/>, document.querySelector('#app'))