Skip to content

Commit

Permalink
feat: add api errors to form
Browse files Browse the repository at this point in the history
  • Loading branch information
whosyourtaco committed Nov 22, 2022
1 parent e8add76 commit 251506d
Showing 1 changed file with 104 additions and 90 deletions.
194 changes: 104 additions & 90 deletions src/pages/Settings/components/ChangePasswordForm/ChangePasswordForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,106 +9,120 @@ import { Field, Form } from 'react-final-form';

import { ButtonContainer } from '../../../Login/components/LoginForm/LoginForm.style';


const ChangePasswordForm: React.FC = () => {
const { mutate, isLoading } = useChangePassword();
const { mutateAsync, isLoading } = useChangePassword();

const handleSubmit = (form: ChangePasswordFormType) => {
mutate(form);
return new Promise((resolve) => {
mutateAsync(form)
.then(() => resolve(true))
.catch((error) => {
resolve(error.errors);
});
});
};

return (
<Form onSubmit={handleSubmit}>
{({ handleSubmit, valid, submitting }) => (
<form style={{ height: '100%' }} onSubmit={handleSubmit}>
<FieldsContainer withMargin>
<LongFieldWrapper>
<FieldWrapper>
<Field name="old_password" parse={(value) => value}>
{(props) => {
const hasError = props.meta.touched && props.meta.invalid;
<Form onSubmit={handleSubmit}>
{({ handleSubmit, submitting }) => (
<form style={{ height: '100%' }} onSubmit={handleSubmit}>
<FieldsContainer withMargin>
<LongFieldWrapper>
<FieldWrapper>
<Field name="old_password" parse={(value) => value}>
{(props) => {
const hasError =
props.meta.touched &&
props.meta.invalid &&
(props.meta.submitError || props.meta.error);

return (
<TextField
id="old_password"
label="Old password"
styleType="outlined"
size="md"
status={hasError && 'error'}
hintMsg={hasError && props.meta.error}
type="password"
{...props.input}
/>
);
}}
</Field>
</FieldWrapper>
</LongFieldWrapper>
</FieldsContainer>
return (
<TextField
id="old_password"
label="Old password"
styleType="outlined"
size="md"
status={hasError && 'error'}
hintMsg={hasError && (props.meta.error || props.meta.submitError)}
type="password"
{...props.input}
/>
);
}}
</Field>
</FieldWrapper>
</LongFieldWrapper>
</FieldsContainer>

<FieldsContainer withMargin>
<LongFieldWrapper>
<FieldWrapper>
<Field name="new_password1" parse={(value) => value}>
{(props) => {
const hasError = props.meta.touched && props.meta.invalid;
return (
<TextField
id="new_password1"
label="New password"
styleType="outlined"
size="md"
status={hasError && 'error'}
hintMsg={hasError && props.meta.error}
type="password"
{...props.input}
/>
);
}}
</Field>
</FieldWrapper>
</LongFieldWrapper>
</FieldsContainer>
<FieldsContainer withMargin>
<LongFieldWrapper>
<FieldWrapper>
<Field name="new_password1" parse={(value) => value}>
{(props) => {
const hasError =
props.meta.touched &&
props.meta.invalid &&
(props.meta.submitError || props.meta.error);
return (
<TextField
id="new_password1"
label="New password"
styleType="outlined"
size="md"
status={hasError && 'error'}
hintMsg={hasError && (props.meta.error || props.meta.submitError)}
type="password"
{...props.input}
/>
);
}}
</Field>
</FieldWrapper>
</LongFieldWrapper>
</FieldsContainer>

<FieldsContainer withMargin>
<LongFieldWrapper>
<FieldWrapper>
<Field name="new_password2" parse={(value) => value}>
{(props) => {
const hasError = props.meta.touched && props.meta.invalid;
return (
<TextField
id="new_password2"
label="New password (again)"
styleType="outlined"
size="md"
status={hasError && 'error'}
hintMsg={hasError && props.meta.error}
type="password"
{...props.input}
/>
);
}}
</Field>
</FieldWrapper>
</LongFieldWrapper>
</FieldsContainer>
<FieldsContainer withMargin>
<LongFieldWrapper>
<FieldWrapper>
<Field name="new_password2" parse={(value) => value}>
{(props) => {
const hasError =
props.meta.touched &&
props.meta.invalid &&
(props.meta.submitError || props.meta.error);
return (
<TextField
id="new_password2"
label="New password (again)"
styleType="outlined"
size="md"
status={hasError && 'error'}
hintMsg={hasError && (props.meta.error || props.meta.submitError)}
type="password"
{...props.input}
/>
);
}}
</Field>
</FieldWrapper>
</LongFieldWrapper>
</FieldsContainer>

<ButtonContainer>
<Button
block
color={'blue-500'}
disabled={isLoading || !valid || submitting}
filled
size="lg"
buttonType="submit"
>
Change Password
</Button>
</ButtonContainer>
</form>
)}
</Form>
<ButtonContainer>
<Button
block
color={'blue-500'}
disabled={isLoading || submitting}
filled
size="lg"
buttonType="submit"
>
Change Password
</Button>
</ButtonContainer>
</form>
)}
</Form>
);
};

Expand Down

0 comments on commit 251506d

Please sign in to comment.