import { Col } from 'web/components/layout/col' import { SEO } from 'web/components/SEO' import { Title } from 'web/components/title' import { usePrivateUser, useUser } from 'web/hooks/use-user' import { Page } from 'web/components/page' import { useTracking } from 'web/hooks/use-tracking' import { redirectIfLoggedOut } from 'web/lib/firebase/server-auth' import { Button } from 'web/components/button' import { convertmana } from 'web/lib/firebase/api' import { formatMoney } from 'common/util/format' import { useEffect, useState } from 'react' import { Modal } from 'web/components/layout/modal' import { Row } from 'web/components/layout/row' import { LoadingIndicator } from 'web/components/loading-indicator' export const getServerSideProps = redirectIfLoggedOut('/') export default function RedeemManaPage() { const [open, setOpen] = useState(false) const [loading, setLoading] = useState(false) const [success, setSuccess] = useState(false) const [error, setError] = useState('') const user = useUser() const privateUser = usePrivateUser(user?.id) useTracking('view redeem mana page') const cost = 7500 useEffect(() => { if (open) setSuccess(false) setError('') }, [open]) if (!user || !privateUser) return const onClick = async () => { if (user.balance < cost) { setError('You do not have enough mana to redeem.') return } setLoading(true) try { await convertmana({}) setSuccess(true) } catch (e) { setError((e as any).message) setSuccess(false) } setLoading(false) } return ( <img className="mb-6 block -scale-x-100 self-center" src="/logo-flapping-with-money.gif" width={200} height={200} /> <div className={'mb-4'}> For {formatMoney(cost)} you can get a $50 gift card from: <Col className={'my-2 w-full items-center justify-center gap-2'}> <div> • Amazon</div> <div> • Starbucks</div> <div> • Best Buy</div> <div> • And more!</div> </Col> You'll get an email with more details upon redemption. </div> <Button color={'indigo'} onClick={() => { setOpen(!open) }} > {' '} Redeem {formatMoney(cost)} </Button> <Modal open={open} setOpen={setOpen} className={'self-center rounded-md bg-white p-4'} > <Col> {success ? ( <Col className={'items-center justify-center'}> <div className={'my-4 text-5xl'}>🎉</div> <div className={''}> Thanks! You'll see your gift card in your inbox within the next few minutes! </div> </Col> ) : ( <> <Title text={'Are you sure?'} /> <Col className={'gap-1'}> <div> You will be charged:{' '} <div className={'mb-2 font-bold text-indigo-700'}> {formatMoney(cost)} </div> </div> <div> A $50 gift card of your choice will be sent to: <div className={'mb-2 font-bold text-indigo-700'}> {privateUser.email} </div> </div> <div>Do you want to continue?</div> </Col> <Row> <span className="text-error">{error}</span> </Row> <Row className={'mt-4 justify-end gap-2'}> <Button color={'indigo'} onClick={onClick}> {loading ? 'Loading...' : 'Confirm'} </Button> <Button color={'gray'} onClick={() => setOpen(false)}> Cancel </Button> </Row> </> )} </Col> </Modal> </Col> </Col> </Page> ) }