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;