Make withdrawal options more visible (issue167a) (#423)
Co-authored-by: rleed <rleed1@pm.me> Co-authored-by: keyan <keyan.kousha+huumn@gmail.com>
This commit is contained in:
		
							parent
							
								
									799ec987b4
								
							
						
					
					
						commit
						052bf4803c
					
				
							
								
								
									
										190
									
								
								pages/wallet.js
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								pages/wallet.js
									
									
									
									
									
								
							@ -14,23 +14,43 @@ import Alert from 'react-bootstrap/Alert'
 | 
				
			|||||||
import { CREATE_WITHDRAWL, SEND_TO_LNADDR } from '../fragments/wallet'
 | 
					import { CREATE_WITHDRAWL, SEND_TO_LNADDR } from '../fragments/wallet'
 | 
				
			||||||
import { getGetServerSideProps } from '../api/ssrApollo'
 | 
					import { getGetServerSideProps } from '../api/ssrApollo'
 | 
				
			||||||
import { amountSchema, lnAddrSchema, withdrawlSchema } from '../lib/validate'
 | 
					import { amountSchema, lnAddrSchema, withdrawlSchema } from '../lib/validate'
 | 
				
			||||||
 | 
					import Nav from 'react-bootstrap/Nav'
 | 
				
			||||||
import { SSR } from '../lib/constants'
 | 
					import { SSR } from '../lib/constants'
 | 
				
			||||||
import { numWithUnits } from '../lib/format'
 | 
					import { numWithUnits } from '../lib/format'
 | 
				
			||||||
 | 
					import styles from '../components/user-header.module.css'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const getServerSideProps = getGetServerSideProps()
 | 
					export const getServerSideProps = getGetServerSideProps()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function Wallet () {
 | 
					export default function Wallet () {
 | 
				
			||||||
  return (
 | 
					  const router = useRouter()
 | 
				
			||||||
    <CenterLayout>
 | 
					
 | 
				
			||||||
      <WalletForm />
 | 
					  if (router.query.type === 'fund') {
 | 
				
			||||||
    </CenterLayout>
 | 
					    return (
 | 
				
			||||||
  )
 | 
					      <CenterLayout>
 | 
				
			||||||
 | 
					        <FundForm />
 | 
				
			||||||
 | 
					      </CenterLayout>
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					  } else if (router.query.type?.includes('withdraw')) {
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <CenterLayout>
 | 
				
			||||||
 | 
					        <WithdrawalForm />
 | 
				
			||||||
 | 
					      </CenterLayout>
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <CenterLayout>
 | 
				
			||||||
 | 
					        <YouHaveSats />
 | 
				
			||||||
 | 
					        <WalletForm />
 | 
				
			||||||
 | 
					        <WalletHistory />
 | 
				
			||||||
 | 
					      </CenterLayout>
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function YouHaveSats () {
 | 
					function YouHaveSats () {
 | 
				
			||||||
  const me = useMe()
 | 
					  const me = useMe()
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <h2 className={`${me ? 'visible' : 'invisible'} text-success pb-5`}>
 | 
					    <h2 className={`${me ? 'visible' : 'invisible'} text-success`}>
 | 
				
			||||||
      you have <span className='text-monospace'>{me && numWithUnits(me.sats, { abbreviate: false })}</span>
 | 
					      you have <span className='text-monospace'>{me && numWithUnits(me.sats, { abbreviate: false })}</span>
 | 
				
			||||||
    </h2>
 | 
					    </h2>
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
@ -38,42 +58,24 @@ function YouHaveSats () {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function WalletHistory () {
 | 
					function WalletHistory () {
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <div className='pt-4'>
 | 
					    <Link href='/satistics?inc=invoice,withdrawal' className='text-muted fw-bold text-underline'>
 | 
				
			||||||
      <Link href='/satistics?inc=invoice,withdrawal' className='text-muted fw-bold text-underline'>
 | 
					      wallet history
 | 
				
			||||||
        wallet history
 | 
					    </Link>
 | 
				
			||||||
      </Link>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function WalletForm () {
 | 
					export function WalletForm () {
 | 
				
			||||||
  const router = useRouter()
 | 
					  return (
 | 
				
			||||||
 | 
					    <div className='align-items-center text-center py-5'>
 | 
				
			||||||
  if (!router.query.type) {
 | 
					      <Link href='/wallet?type=fund'>
 | 
				
			||||||
    return (
 | 
					        <Button variant='success'>fund</Button>
 | 
				
			||||||
      <div className='align-items-center text-center'>
 | 
					      </Link>
 | 
				
			||||||
        <YouHaveSats />
 | 
					      <span className='mx-3 fw-bold text-muted'>or</span>
 | 
				
			||||||
        <Link href='/wallet?type=fund'>
 | 
					      <Link href='/wallet?type=withdraw'>
 | 
				
			||||||
          <Button variant='success'>fund</Button>
 | 
					        <Button variant='success'>withdraw</Button>
 | 
				
			||||||
        </Link>
 | 
					      </Link>
 | 
				
			||||||
        <span className='mx-3 fw-bold text-muted'>or</span>
 | 
					    </div>
 | 
				
			||||||
        <Link href='/wallet?type=withdraw'>
 | 
					  )
 | 
				
			||||||
          <Button variant='success'>withdraw</Button>
 | 
					 | 
				
			||||||
        </Link>
 | 
					 | 
				
			||||||
        <WalletHistory />
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (router.query.type === 'fund') {
 | 
					 | 
				
			||||||
    return <FundForm />
 | 
					 | 
				
			||||||
  } else if (router.query.type === 'withdraw') {
 | 
					 | 
				
			||||||
    return <WithdrawlForm />
 | 
					 | 
				
			||||||
  } else if (router.query.type === 'lnurl-withdraw') {
 | 
					 | 
				
			||||||
    return <LnWithdrawal />
 | 
					 | 
				
			||||||
  } else {
 | 
					 | 
				
			||||||
    return <LnAddrWithdrawal />
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function FundForm () {
 | 
					export function FundForm () {
 | 
				
			||||||
@ -98,43 +100,89 @@ export function FundForm () {
 | 
				
			|||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <>
 | 
					    <>
 | 
				
			||||||
      <YouHaveSats />
 | 
					      <YouHaveSats />
 | 
				
			||||||
      {me && showAlert &&
 | 
					      <div className='w-100 py-5'>
 | 
				
			||||||
        <Alert
 | 
					        {me && showAlert &&
 | 
				
			||||||
          variant='success' dismissible onClose={() => {
 | 
					          <Alert
 | 
				
			||||||
            window.localStorage.setItem('hideLnAddrAlert', 'yep')
 | 
					            variant='success' dismissible onClose={() => {
 | 
				
			||||||
            setShowAlert(false)
 | 
					              window.localStorage.setItem('hideLnAddrAlert', 'yep')
 | 
				
			||||||
 | 
					              setShowAlert(false)
 | 
				
			||||||
 | 
					            }}
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            You can also fund your account via lightning address with <strong>{`${me.name}@stacker.news`}</strong>
 | 
				
			||||||
 | 
					          </Alert>}
 | 
				
			||||||
 | 
					        <Form
 | 
				
			||||||
 | 
					          initial={{
 | 
				
			||||||
 | 
					            amount: 1000
 | 
				
			||||||
 | 
					          }}
 | 
				
			||||||
 | 
					          initialError={error?.toString()}
 | 
				
			||||||
 | 
					          schema={amountSchema}
 | 
				
			||||||
 | 
					          onSubmit={async ({ amount }) => {
 | 
				
			||||||
 | 
					            const { data } = await createInvoice({ variables: { amount: Number(amount) } })
 | 
				
			||||||
 | 
					            router.push(`/invoices/${data.createInvoice.id}`)
 | 
				
			||||||
          }}
 | 
					          }}
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
          You can also fund your account via lightning address with <strong>{`${me.name}@stacker.news`}</strong>
 | 
					          <Input
 | 
				
			||||||
        </Alert>}
 | 
					            label='amount'
 | 
				
			||||||
      <Form
 | 
					            name='amount'
 | 
				
			||||||
        initial={{
 | 
					            required
 | 
				
			||||||
          amount: 1000
 | 
					            autoFocus
 | 
				
			||||||
        }}
 | 
					            append={<InputGroup.Text className='text-monospace'>sats</InputGroup.Text>}
 | 
				
			||||||
        initialError={error?.toString()}
 | 
					          />
 | 
				
			||||||
        schema={amountSchema}
 | 
					          <SubmitButton variant='success' className='mt-2'>generate invoice</SubmitButton>
 | 
				
			||||||
        onSubmit={async ({ amount }) => {
 | 
					        </Form>
 | 
				
			||||||
          const { data } = await createInvoice({ variables: { amount: Number(amount) } })
 | 
					      </div>
 | 
				
			||||||
          router.push(`/invoices/${data.createInvoice.id}`)
 | 
					 | 
				
			||||||
        }}
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        <Input
 | 
					 | 
				
			||||||
          label='amount'
 | 
					 | 
				
			||||||
          name='amount'
 | 
					 | 
				
			||||||
          required
 | 
					 | 
				
			||||||
          autoFocus
 | 
					 | 
				
			||||||
          append={<InputGroup.Text className='text-monospace'>sats</InputGroup.Text>}
 | 
					 | 
				
			||||||
        />
 | 
					 | 
				
			||||||
        <SubmitButton variant='success' className='mt-2'>generate invoice</SubmitButton>
 | 
					 | 
				
			||||||
      </Form>
 | 
					 | 
				
			||||||
      <WalletHistory />
 | 
					      <WalletHistory />
 | 
				
			||||||
    </>
 | 
					    </>
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function WithdrawalForm () {
 | 
				
			||||||
 | 
					  const router = useRouter()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <div className='w-100 d-flex flex-column align-items-center py-5'>
 | 
				
			||||||
 | 
					      <YouHaveSats />
 | 
				
			||||||
 | 
					      <Nav
 | 
				
			||||||
 | 
					        className={styles.nav}
 | 
				
			||||||
 | 
					        activeKey={router.query.type}
 | 
				
			||||||
 | 
					      >
 | 
				
			||||||
 | 
					        <Nav.Item>
 | 
				
			||||||
 | 
					          <Link href='/wallet?type=withdraw' passHref legacyBehavior>
 | 
				
			||||||
 | 
					            <Nav.Link eventKey='withdraw'>invoice</Nav.Link>
 | 
				
			||||||
 | 
					          </Link>
 | 
				
			||||||
 | 
					        </Nav.Item>
 | 
				
			||||||
 | 
					        <Nav.Item>
 | 
				
			||||||
 | 
					          <Link href='/wallet?type=lnurl-withdraw' passHref legacyBehavior>
 | 
				
			||||||
 | 
					            <Nav.Link eventKey='lnurl-withdraw'>QR code</Nav.Link>
 | 
				
			||||||
 | 
					          </Link>
 | 
				
			||||||
 | 
					        </Nav.Item>
 | 
				
			||||||
 | 
					        <Nav.Item>
 | 
				
			||||||
 | 
					          <Link href='/wallet?type=lnaddr-withdraw' passHref legacyBehavior>
 | 
				
			||||||
 | 
					            <Nav.Link eventKey='lnaddr-withdraw'>lightning address</Nav.Link>
 | 
				
			||||||
 | 
					          </Link>
 | 
				
			||||||
 | 
					        </Nav.Item>
 | 
				
			||||||
 | 
					      </Nav>
 | 
				
			||||||
 | 
					      <SelectedWithdrawalForm />
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function SelectedWithdrawalForm () {
 | 
				
			||||||
 | 
					  const router = useRouter()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  switch (router.query.type) {
 | 
				
			||||||
 | 
					    case 'withdraw':
 | 
				
			||||||
 | 
					      return <InvWithdrawal />
 | 
				
			||||||
 | 
					    case 'lnurl-withdraw':
 | 
				
			||||||
 | 
					      return <LnWithdrawal />
 | 
				
			||||||
 | 
					    case 'lnaddr-withdraw':
 | 
				
			||||||
 | 
					      return <LnAddrWithdrawal />
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const MAX_FEE_DEFAULT = 10
 | 
					const MAX_FEE_DEFAULT = 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function WithdrawlForm () {
 | 
					export function InvWithdrawal () {
 | 
				
			||||||
  const router = useRouter()
 | 
					  const router = useRouter()
 | 
				
			||||||
  const me = useMe()
 | 
					  const me = useMe()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -163,7 +211,6 @@ export function WithdrawlForm () {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <>
 | 
					    <>
 | 
				
			||||||
      <YouHaveSats />
 | 
					 | 
				
			||||||
      <Form
 | 
					      <Form
 | 
				
			||||||
        initial={{
 | 
					        initial={{
 | 
				
			||||||
          invoice: '',
 | 
					          invoice: '',
 | 
				
			||||||
@ -191,14 +238,6 @@ export function WithdrawlForm () {
 | 
				
			|||||||
        />
 | 
					        />
 | 
				
			||||||
        <SubmitButton variant='success' className='mt-2'>withdraw</SubmitButton>
 | 
					        <SubmitButton variant='success' className='mt-2'>withdraw</SubmitButton>
 | 
				
			||||||
      </Form>
 | 
					      </Form>
 | 
				
			||||||
      <span className='my-3 fw-bold text-muted'>or via</span>
 | 
					 | 
				
			||||||
      <Link href='/wallet?type=lnurl-withdraw'>
 | 
					 | 
				
			||||||
        <Button variant='grey'>QR code</Button>
 | 
					 | 
				
			||||||
      </Link>
 | 
					 | 
				
			||||||
      <Link href='/wallet?type=lnaddr-withdraw'>
 | 
					 | 
				
			||||||
        <Button className='mt-2' variant='grey'>Lightning Address</Button>
 | 
					 | 
				
			||||||
      </Link>
 | 
					 | 
				
			||||||
      <WalletHistory />
 | 
					 | 
				
			||||||
    </>
 | 
					    </>
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -254,7 +293,6 @@ export function LnAddrWithdrawal () {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <>
 | 
					    <>
 | 
				
			||||||
      <YouHaveSats />
 | 
					 | 
				
			||||||
      <Form
 | 
					      <Form
 | 
				
			||||||
        initial={{
 | 
					        initial={{
 | 
				
			||||||
          addr: '',
 | 
					          addr: '',
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user