react-logo/frontend/src/components/UserForm.js

77 lines
2.7 KiB
JavaScript
Raw Normal View History

2020-02-25 17:21:55 +01:00
import { useEffect } from 'react';
import { WithForm } from './WithForm';
2020-02-25 15:10:42 +01:00
2020-02-25 17:21:55 +01:00
export function UserForm({ form, onSubmit }) {
2020-02-25 16:10:20 +01:00
useEffect(() => {
2020-02-25 17:21:55 +01:00
if (form.valid && form.submitted) onSubmit(form.data);
}, [form.valid, form.submitted]);
2020-02-25 16:10:20 +01:00
2020-02-25 15:10:42 +01:00
return (
2020-02-25 17:21:55 +01:00
<form className="form" onSubmit={form.onSubmit}>
2020-02-25 15:10:42 +01:00
<div className="field">
<label className="label" htmlFor="username">Nom d'utilisateur</label>
<div className="control">
2020-02-25 17:21:55 +01:00
<input className={`input ${form.hasError('username') ? 'is-danger' : ''}`} type="text"
name="username" value={form.field('username', '')}
onChange={form.onChange('username')} />
2020-02-25 15:10:42 +01:00
</div>
2020-02-25 16:10:20 +01:00
{
2020-02-25 17:21:55 +01:00
form.hasError('username') ?
<p className="help is-danger">{form.error('username')}</p>
2020-02-25 16:10:20 +01:00
: null
}
2020-02-25 15:10:42 +01:00
</div>
<div className="field">
<label className="label" htmlFor="password">Mot de passe</label>
<div className="control">
2020-02-25 17:21:55 +01:00
<input className={`input ${form.hasError('password') ? 'is-danger' : ''}`}
type="password" name="password"
autoComplete='new-password'
value={form.field('password', '')}
onChange={form.onChange('password')} />
2020-02-25 15:10:42 +01:00
</div>
2020-02-25 16:10:20 +01:00
{
2020-02-25 17:21:55 +01:00
form.hasError('password') ?
<p className="help is-danger">{form.error('password')}</p>
2020-02-25 16:10:20 +01:00
: null
}
2020-02-25 15:10:42 +01:00
</div>
<div className="field">
<label className="label" htmlFor="passwordVerification">Mot de passe (vérification)</label>
<div className="control">
2020-02-25 17:21:55 +01:00
<input className={`input ${form.hasError('passwordVerification') ? 'is-danger' : ''}`}
type="password" name="passwordVerification"
autoComplete='new-password'
value={form.field('passwordVerification', '')}
onChange={form.onChange('passwordVerification')} />
2020-02-25 15:10:42 +01:00
</div>
2020-02-25 16:10:20 +01:00
{
2020-02-25 17:21:55 +01:00
form.hasError('passwordVerification') ?
<p className="help is-danger">{form.error('passwordVerification')}</p>
2020-02-25 16:10:20 +01:00
: null
}
2020-02-25 15:10:42 +01:00
</div>
2020-02-25 17:21:55 +01:00
<button type="submit" disabled={!form.valid} className="button">Envoyer</button>
2020-02-25 15:10:42 +01:00
</form>
);
};
2020-02-25 17:21:55 +01:00
const validators = {
username: (value, formData) => {
if (!value) return { hasError: true, message: 'Le nom d\'utilisateur ne peut pas être vide !' }
return { hasError: false, message: '' };
},
password: (value, formData) => {
if (!value) return { hasError: true, message: 'Le mot de passe ne peut pas être vide !' }
if (value !== formData.passwordVerification) return { hasError: true, message: 'Vos deux mots de passe sont différents !' }
return { hasError: false, message: '' };
},
passwordVerification: (value, formData) => {
if (value !== formData.password) return { hasError: true, message: 'Vos deux mots de passe sont différents !' }
return { hasError: false, message: '' };
}
};
export const ExtendedUserForm = WithForm(validators)(UserForm);