index.tsx 2.0 KB

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