98 lines
2.7 KiB
JavaScript
Raw Normal View History

2021-05-12 20:51:37 -05:00
import { useQuery } from '@apollo/client'
import LayoutCenter from '../../components/layout-center'
2021-05-13 08:28:38 -05:00
import { CopyInput, Input, InputSkeleton } from '../../components/form'
import InputGroup from 'react-bootstrap/InputGroup'
import InvoiceStatus from '../../components/invoice-status'
2021-10-26 15:49:37 -05:00
import { useRouter } from 'next/router'
import { WITHDRAWL } from '../../fragments/wallet'
import Link from 'next/link'
2021-05-12 20:51:37 -05:00
2021-10-26 15:49:37 -05:00
export default function Withdrawl () {
2021-05-12 20:51:37 -05:00
return (
<LayoutCenter>
2021-10-26 15:49:37 -05:00
<LoadWithdrawl />
2021-05-12 20:51:37 -05:00
</LayoutCenter>
)
}
2021-05-13 16:19:51 -05:00
export function WithdrawlSkeleton ({ status }) {
return (
<>
<div className='w-100'>
<InputSkeleton label='invoice' />
</div>
<div className='w-100'>
<InputSkeleton label='max fee' />
</div>
<InvoiceStatus status={status} />
</>
)
}
2021-10-26 15:49:37 -05:00
function LoadWithdrawl () {
const router = useRouter()
const { loading, error, data } = useQuery(WITHDRAWL, {
variables: { id: router.query.id },
pollInterval: 1000
})
2021-05-12 20:51:37 -05:00
if (error) return <div>error</div>
if (!data || loading) {
2021-05-13 16:19:51 -05:00
return <WithdrawlSkeleton status='loading' />
}
const TryMaxFee = () =>
<Link href='/wallet?type=withdraw' passHref>
<a className='text-reset text-underline'><small className='ml-3'>try increasing max fee</small></a>
</Link>
2021-05-13 16:19:51 -05:00
let status = 'pending'
let variant = 'default'
switch (data.withdrawl.status) {
case 'CONFIRMED':
status = `sent ${data.withdrawl.satsPaid} sats with ${data.withdrawl.satsFeePaid} sats in routing fees`
variant = 'confirmed'
break
case 'INSUFFICIENT_BALANCE':
status = <>insufficient balance <small className='ml-3'>contact keyan!</small></>
variant = 'failed'
break
case 'INVALID_PAYMENT':
status = 'invalid invoice'
variant = 'failed'
break
case 'PATHFINDING_TIMEOUT':
status = <>timed out finding route <TryMaxFee /></>
2021-05-13 16:19:51 -05:00
variant = 'failed'
break
case 'ROUTE_NOT_FOUND':
status = <>no route <TryMaxFee /></>
2021-05-13 16:19:51 -05:00
variant = 'failed'
break
2022-01-05 14:37:34 -06:00
case 'UNKNOWN_FAILURE':
status = <>unknown error</>
variant = 'failed'
break
2021-05-13 16:19:51 -05:00
default:
break
2021-05-12 20:51:37 -05:00
}
2021-05-13 08:28:38 -05:00
return (
<>
<div className='w-100'>
<CopyInput
label='invoice' type='text'
2022-08-18 13:15:24 -05:00
placeholder={data.withdrawl.bolt11} readOnly noForm
2021-05-13 08:28:38 -05:00
/>
</div>
<div className='w-100'>
<Input
label='max fee' type='text'
2022-08-18 13:15:24 -05:00
placeholder={data.withdrawl.satsFeePaying} readOnly noForm
2021-05-13 16:19:51 -05:00
append={<InputGroup.Text className='text-monospace'>sats</InputGroup.Text>}
2021-05-13 08:28:38 -05:00
/>
</div>
2021-05-13 16:19:51 -05:00
<InvoiceStatus variant={variant} status={status} />
2021-05-13 08:28:38 -05:00
</>
)
2021-05-12 20:51:37 -05:00
}