Files
logseq/packages/ui/examples/index.tsx
Charlie a0a19a91fa feat: new authenticate UI (#12172)
* enhance(ui): login form

* enhance(ui): add localization support with translate and locale management

* enhance(ui): WIP implement new authentication forms with context management

* enhance(ui): add password visibility toggle to input row

* enhance(ui): adjust padding for password visibility toggle

* enhance(i18n): implement internationalization support for authentication UI

* enhance(ui): implement sign in and sign up functionality with loading state

* enhance(ui): add session management and error handling in login form

* enhance(ui): add confirm code form and enhance authentication flow

* enhance(ui): improve sign-in flow and confirm code handling

* enhance(ui): add warning variant to alerts and improve error handling

* enhance(ui): implement countdown timer for code resend functionality

* enhance(ui): implement countdown timer for password reset and enhance login flow

* enhance(ui): export authentication and enhance UI components

* enhance(ui): integrate new login component and refresh token handling

* chore: clear amplify related codes

* enhance(i18n): normalize language codes and update locale handling

* enhance(auth): add multilingual support for signup and password reset flows

* enhance(ui): update login styles to inherit text color

* enhance(ui): adjust input color variables for improved accessibility

* enhance(auth): add password policy validation and tips in multiple languages

* enhance(ui): improve localization handling and update alert styles

* enhance(mobile): enhance login modal styling and accessibility

* fix(ui): update password validation regex for special characters

* enhance(ui): add padding to card header in login dialog

---------

Co-authored-by: Tienson Qin <tiensonqin@gmail.com>
2025-10-28 16:55:43 +08:00

67 lines
1.9 KiB
TypeScript

import '../src/index.css'
import { setupGlobals } from '../src/ui'
import * as React from 'react'
import * as ReactDOM from 'react-dom'
import { init, t } from '../src/amplify/core'
// @ts-ignore
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
import { LoginForm, ResetPasswordForm, SignupForm, ConfirmWithCodeForm } from '../src/amplify/ui'
import { AuthFormRootContext } from '../src/amplify/core'
// bootstrap
setupGlobals()
init()
function App() {
const [errors, setErrors] = React.useState<string | null>(null)
const [currentTab, setCurrentTab] = React.useState<'login' | 'reset' | 'signup' | 'confirm-code' | any>('login')
const onSessionCallback = React.useCallback((session: any) => {
console.log('==>>session callback:', session)
}, [])
React.useEffect(() => {
setErrors(null)
}, [currentTab])
let content = null
// support passing object with type field
let _currentTab = currentTab?.type ? currentTab.type : currentTab
let _currentTabProps = currentTab?.props || {}
switch (_currentTab) {
case 'login':
content = <LoginForm/>
break
case 'reset':
content = <ResetPasswordForm/>
break
case 'signup':
content = <SignupForm/>
break
case 'confirm-code':
content = <ConfirmWithCodeForm {..._currentTabProps}/>
break
}
return (
<main className={'h-screen flex flex-col justify-center items-center gap-4'}>
<AuthFormRootContext.Provider value={{
errors, setErrors, setCurrentTab,
onSessionCallback
}}>
<Card className={'sm:w-96'}>
<CardHeader>
<CardTitle className={'capitalize'}>{t(_currentTab)?.replace('-', ' ')}</CardTitle>
</CardHeader>
<CardContent>
{content}
</CardContent>
</Card>
</AuthFormRootContext.Provider>
</main>
)
}
// mount app
ReactDOM.render(<App/>, document.querySelector('#app'))