import { useEnvironment } from '@vegaprotocol/environment'; import { t } from '@vegaprotocol/react-helpers'; import { Button, FormGroup, Input, InputError } from '@vegaprotocol/ui-toolkit'; import { useState } from 'react'; import { useForm } from 'react-hook-form'; import type { RestConnector } from '.'; interface FormFields { url: string; wallet: string; passphrase: string; } interface RestConnectorFormProps { connector: RestConnector; onAuthenticate: () => void; } export function RestConnectorForm({ connector, onAuthenticate, }: RestConnectorFormProps) { const [error, setError] = useState(''); const { VEGA_WALLET_URL } = useEnvironment(); const { register, handleSubmit, formState: { errors }, } = useForm({ defaultValues: { url: VEGA_WALLET_URL, }, }); async function onSubmit(fields: FormFields) { const authFailedMessage = t('Authentication failed'); try { setError(''); const res = await connector.authenticate(fields.url, { wallet: fields.wallet, passphrase: fields.passphrase, }); if (res.success) { onAuthenticate(); } else { setError(res.error || authFailedMessage); } } catch (err) { if (err instanceof TypeError) { setError(t(`Wallet not running at ${fields.url}`)); } else if (err instanceof Error) { setError(authFailedMessage); } else { setError(t('Something went wrong')); } } } return (
{errors.url?.message && ( {errors.url.message} )} {errors.wallet?.message && ( {errors.wallet.message} )} {errors.passphrase?.message && ( {errors.passphrase.message} )} {error && ( {error} )}
); }