You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

57 lines
1.7 KiB

import { Button } from '@renderer/components/ui/button'
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle
} from '@renderer/components/ui/dialog'
import { IS_ELECTRON } from '@renderer/lib/env'
import { useNostr } from '@renderer/providers/NostrProvider'
import { ArrowLeft } from 'lucide-react'
import { Dispatch, useState } from 'react'
import PrivateKeyLogin from './NsecLogin'
export default function LoginDialog({
open,
setOpen
}: {
open: boolean
setOpen: Dispatch<boolean>
}) {
const [loginMethod, setLoginMethod] = useState<'nsec' | 'nip07' | null>(null)
const { nip07Login } = useNostr()
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogContent className="w-96">
<DialogHeader>
<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)} />
</>
) : (
<>
{!IS_ELECTRON && !!window.nostr && (
<Button onClick={() => nip07Login().then(() => setOpen(false))} className="w-full">
Login with NIP-07
</Button>
)}
<Button variant="secondary" onClick={() => setLoginMethod('nsec')} className="w-full">
Login with Private Key
</Button>
</>
)}
</DialogContent>
</Dialog>
)
}