import React, { useCallback, useState } from 'react'; import { Grid, ErrorText, Flex } from 'indigo-react'; import { get } from 'lodash'; import { FORM_ERROR } from 'final-form'; import useCopiable from 'lib/useCopiable'; import useInviter from 'lib/useInviter'; import ProgressButton from 'components/ProgressButton'; import { ForwardButton } from 'components/Buttons'; import NeedFundsNotice from 'components/NeedFundsNotice'; import { hasErrors } from 'form/validators'; import { WARNING } from 'form/helpers'; const STATUS = { INPUT: 'INPUT', SENDING: 'SENDING', SUCCESS: 'SUCCESS', FAILURE: 'FAILURE', }; const InviteUrl = ({ setSubmitting }) => { const { txStatus, needFunds, invites, generateInvites } = useInviter(); const [error, setError] = useState(); const generateInvite = useCallback(async () => { setSubmitting(true); const { errors } = await generateInvites(1); if (hasErrors(errors)) { setError(errors); } setSubmitting(false); }, [generateInvites, setSubmitting]); const renderGenerateButton = useCallback(() => { if (error) { return ( Error generating invite ); } switch (txStatus) { case STATUS.INPUT: return ( generateInvite()}> Generate Invite URL ); case STATUS.SENDING: return ( Generating Invite URL ); default: return null; } }, [txStatus, error, generateInvite]); const url = `https://bridge.urbit.org/#${get(invites, '[0].ticket', '').slice( 1 )}`; const [doCopy, didCopy] = useCopiable(url); return ( {invites.length > 0 && (
{url}
doCopy()}> {didCopy ? 'Copied' : 'Copy'}
Your invite link expires after consumption.
)} {invites.length === 0 && renderGenerateButton()} {needFunds && } {error && ( {error[FORM_ERROR] || error[WARNING]} )} ); }; export default InviteUrl;