feat: multi accounts

This commit is contained in:
codytseng 2024-12-23 23:22:49 +08:00
parent ee0c702135
commit 33ac5e60b6
17 changed files with 426 additions and 137 deletions

View file

@ -1,4 +1,3 @@
import { Button } from '@/components/ui/button'
import {
Dialog,
DialogContent,
@ -6,12 +5,8 @@ import {
DialogHeader,
DialogTitle
} from '@/components/ui/dialog'
import { useNostr } from '@/providers/NostrProvider'
import { ArrowLeft } from 'lucide-react'
import { Dispatch, useState } from 'react'
import { useTranslation } from 'react-i18next'
import BunkerLogin from './BunkerLogin'
import PrivateKeyLogin from './NsecLogin'
import { Dispatch } from 'react'
import AccountManager from '../AccountManager'
export default function LoginDialog({
open,
@ -20,10 +15,6 @@ export default function LoginDialog({
open: boolean
setOpen: Dispatch<boolean>
}) {
const { t } = useTranslation()
const [loginMethod, setLoginMethod] = useState<'nsec' | 'nip07' | 'bunker' | null>(null)
const { nip07Login } = useNostr()
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogContent className="w-96">
@ -31,41 +22,7 @@ export default function LoginDialog({
<DialogTitle className="hidden" />
<DialogDescription className="hidden" />
</DialogHeader>
{loginMethod === 'nsec' ? (
<>
<div
className="absolute left-4 top-4 opacity-70 hover:opacity-100 cursor-pointer"
onClick={() => setLoginMethod(null)}
>
<ArrowLeft className="h-4 w-4" />
</div>
<PrivateKeyLogin onLoginSuccess={() => setOpen(false)} />
</>
) : loginMethod === 'bunker' ? (
<>
<div
className="absolute left-4 top-4 opacity-70 hover:opacity-100 cursor-pointer"
onClick={() => setLoginMethod(null)}
>
<ArrowLeft className="h-4 w-4" />
</div>
<BunkerLogin onLoginSuccess={() => setOpen(false)} />
</>
) : (
<>
{!!window.nostr && (
<Button onClick={() => nip07Login().then(() => setOpen(false))} className="w-full">
{t('Login with Browser Extension')}
</Button>
)}
<Button variant="secondary" onClick={() => setLoginMethod('bunker')} className="w-full">
{t('Login with Bunker')}
</Button>
<Button variant="secondary" onClick={() => setLoginMethod('nsec')} className="w-full">
{t('Login with Private Key')}
</Button>
</>
)}
<AccountManager close={() => setOpen(false)} />
</DialogContent>
</Dialog>
)