on aed1af0 help sign in
bridge/src/form/SubmitButton.js
42 lines 849 B history raw
1import React from 'react';
2import cn from 'classnames';
3import { useFormState } from 'react-final-form';
5import { ForwardButton } from 'components/Buttons';
7import { blinkIf } from 'components/Blinky';
9export default function SubmitButton({
10 as: As = ForwardButton,
11 className,
12 children,
13 handleSubmit,
14 ...rest
15}) {
16 const {
17 valid,
18 validating,
19 submitting,
20 hasValidationErrors,
21 hasSubmitErrors,
22 dirtySinceLastSubmit,
23 } = useFormState();
25 const canSubmit =
26 (valid || (hasSubmitErrors && dirtySinceLastSubmit)) &&
27 !validating &&
28 !hasValidationErrors &&
29 !submitting;
31 return (
32 <As
33 className={cn('mt4', className)}
34 disabled={!canSubmit}
35 accessory={blinkIf(validating || submitting)}
36 onClick={handleSubmit}
37 solid
38 {...rest}>
39 {children}
40 </As>
41 );