vega-frontend-monorepo/libs/wallet/src/rest-connector-form.tsx
Matthew Russell c259622848
feat(#927) design update (#1201)
* feat: create new buttons

* feat: update anchor and button link styles

* feat: add icon support

* feat: fix full width with icon

* feat: convert invalid button props to use new props

* feat: tidy up explorer

* feat: more tidy up for token and trading

* feat: move styles to css file using @apply

* chore: remove css with @apply as its not working in apps

* fix: deposit form button

* feat: use default tailwind config, start on forms

* feat: fixup trade grid styles

* feat: form styles

* feat: styles for order book and tables

* feat: make key management use dropdown

* feat: update various components

* feat: tidy up wallet section

* feat: token tidy up

* feat: token governance styles

* Feat/927: Dialog styling

* feat: token styles

* feat: add font familys

* feat: change token borders to be softer

* feat: console-lite changes to support new theme

* Feat/927: Centered key-value-table.tsx spacing

* Feat/927: Tweak to Explorer site border colours to be inline with trading

* Feat/927: Tweak to Explorer header

* Feat/927: Theme switcher icon colours

* Feat/927: Fix for Explorer block data styling

* feat: fix tests, add status footer and change logos

* feat: render both theme icons to avoid hydration error

* chore: run migrations for project

* fix: tailwindconfig build to work with new next version

* feat: use document page for next as per documentation

* chore: update build targets to use development mode when serving

* fix: console-lite default text colors

* chore: fix tooltip text break, change submit button

* feat: adjust console-lite styles to work with tabs

* feat: add bespoke dialog for console-lite market-selector

* Feat/927: Theme switcher now has prop for fixed bg colour

* Feat/927: Font size and border radius tweak for toggles

* Feat/927: Cleaned up trade-grid.tsx spacing

* feat: responsive styles for market header and nav

* feat: update designs for market popover

* fix: nav active state

* chore: allow classname to be passed to button

* Feat/927: Fix Token width on desktop (was overflowing)

* Feat/927: Fix token header h1 from wrapping

* Feat/927: Tweak for claim-flow.tsx

* fix: connect button test

* Feat/927: Proposals list styling polish

* Feat/927: key-value-table.tsx spacing tweak

* feat: add copy button to kp dropdown

* Feat/927: Removing old theme params and uses

* Feat/927: Removing old theme params and uses, documenting the now used otb sizes

* feat: use key val table in asset dialog

* feat: align tooltip styles

* fix: orderbook grid alignment

* chore: linting

* fix: dialog sizing in medium mode, node switcher styles

* chore: remove unused color classes

* feat: update radio and checkbox designs

* feat: updates to storybook

* feat: update design system stories

* chore: stories update

* chore: rename resize panels and tidy

* feat: fix checkbox tick

* fix: add poyfills for jest in trading test setup

* chore: fix checkbox tests

* chore: fix tests

* chore: fix tests again

* chore: revert token wallet name test

* fix: tooltip tests on console-lite

* fix: wallet dropdown test

Co-authored-by: sam-keen <samuel.kleinmann@gmail.com>
2022-08-30 21:35:46 -07:00

103 lines
2.8 KiB
TypeScript

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<FormFields>({
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 (
<form onSubmit={handleSubmit(onSubmit)} data-testid="rest-connector-form">
<FormGroup label={t('Url')} labelFor="url">
<Input
{...register('url', { required: t('Required') })}
id="url"
type="text"
/>
{errors.url?.message && (
<InputError intent="danger">{errors.url.message}</InputError>
)}
</FormGroup>
<FormGroup label={t('Wallet')} labelFor="wallet">
<Input
{...register('wallet', { required: t('Required') })}
id="wallet"
type="text"
/>
{errors.wallet?.message && (
<InputError intent="danger">{errors.wallet.message}</InputError>
)}
</FormGroup>
<FormGroup label={t('Passphrase')} labelFor="passphrase">
<Input
{...register('passphrase', { required: t('Required') })}
id="passphrase"
type="password"
/>
{errors.passphrase?.message && (
<InputError intent="danger">{errors.passphrase.message}</InputError>
)}
{error && (
<InputError intent="danger" data-testid="form-error">
{error}
</InputError>
)}
</FormGroup>
<Button variant="primary" type="submit">
{t('Connect')}
</Button>
</form>
);
}