import { getGetServerSideProps } from '@/api/ssrApollo' import { Form, ClientInput, ClientCheckbox } from '@/components/form' import { CenterLayout } from '@/components/layout' import { WalletButtonBar, WalletCard } from '@/components/wallet-card' import { nwcSchema } from '@/lib/validate' import { useToast } from '@/components/toast' import { useRouter } from 'next/router' import { useNWC } from '@/components/webln/nwc' import { WalletSecurityBanner } from '@/components/banners' import { useWebLNConfigurator } from '@/components/webln' export const getServerSideProps = getGetServerSideProps({ authRequired: true }) export default function NWC () { const { provider, enabledProviders, setProvider } = useWebLNConfigurator() const nwc = useNWC() const { name, nwcUrl, saveConfig, clearConfig, enabled } = nwc const isDefault = provider?.name === name const toaster = useToast() const router = useRouter() return ( <CenterLayout> <h2 className='pb-2'>Nostr Wallet Connect</h2> <h6 className='text-muted text-center pb-3'>use Nostr Wallet Connect for payments</h6> <WalletSecurityBanner /> <Form initial={{ nwcUrl: nwcUrl || '', isDefault: isDefault || false }} schema={nwcSchema} onSubmit={async ({ isDefault, ...values }) => { try { await saveConfig(values) if (isDefault) setProvider(nwc) toaster.success('saved settings') router.push('/settings/wallets') } catch (err) { console.error(err) toaster.danger('failed to attach: ' + err.message || err.toString?.()) } }} > <ClientInput initialValue={nwcUrl} label='connection' name='nwcUrl' required autoFocus /> <ClientCheckbox disabled={!enabled || isDefault || enabledProviders.length === 1} initialValue={isDefault} label='default payment method' name='isDefault' /> <WalletButtonBar enabled={enabled} onDelete={async () => { try { await clearConfig() toaster.success('saved settings') router.push('/settings/wallets') } catch (err) { console.error(err) toaster.danger('failed to unattach: ' + err.message || err.toString?.()) } }} /> </Form> </CenterLayout> ) } export function NWCCard () { const { enabled } = useNWC() return ( <WalletCard title='NWC' badges={['send only', 'non-custodialish', 'budgetable']} provider='nwc' enabled={enabled} /> ) }