react-icons/fi#FiMail TypeScript Examples
The following examples show how to use
react-icons/fi#FiMail.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: index.tsx From gobarber-web with MIT License | 5 votes |
ForgotPassword: React.FC = () => {
const [loading, setLoading] = useState(false);
const formRef = useRef<FormHandles>(null);
// const history = useHistory();
const { addToast } = useToast();
const handleSubmit = useCallback(
async (data: ForgotPasswordFormData) => {
try {
setLoading(true);
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.required('E-mail é obrigatório')
.email('Digite um e-mail válido'),
});
await schema.validate(data, { abortEarly: false });
await api.post('/password/forgot', {
email: data.email,
});
addToast({
type: 'success',
title: 'E-mail de recuperação enviado',
description:
'Enviamos um e-mail para confirmar a recuperação de senha, cheque sua caixa de entrada.',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na recuperação de senha',
description:
'Ocorreu um error ao tentar realizar a recuperação de senha',
});
} finally {
setLoading(false);
}
},
[addToast],
);
return (
<Container>
<Content>
<AnimationContainer>
<img src={logoImg} alt="GoBarber" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Recuperar senha</h1>
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Button loading={loading} type="submit">
Recuperar
</Button>
</Form>
<Link to="/">
<FiLogIn />
Voltar ao login
</Link>
</AnimationContainer>
</Content>
<Background />
</Container>
);
}
Example #2
Source File: index.tsx From gobarber-web with MIT License | 5 votes |
SignIn: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const history = useHistory();
const { signIn } = useAuth();
const { addToast } = useToast();
const handleSubmit = useCallback(
async (data: SignInFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.required('E-mail é obrigatório')
.email('Digite um e-mail válido'),
password: Yup.string().required('Senha é obrigatória'),
});
await schema.validate(data, { abortEarly: false });
await signIn({
email: data.email,
password: data.password,
});
history.push('/dashboard');
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na autenticação',
description:
'Ocorreu um error ao fazer login, cheque as credenciais.',
});
}
},
[signIn, addToast, history],
);
return (
<Container>
<Content>
<AnimationContainer>
<img src={logoImg} alt="GoBarber" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu logon</h1>
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Senha"
/>
<Button type="submit">Entrar</Button>
<Link to="/forgot-password">Esqueci minha senha</Link>
</Form>
<Link to="/signup">
<FiLogIn />
Criar conta
</Link>
</AnimationContainer>
</Content>
<Background />
</Container>
);
}
Example #3
Source File: index.tsx From gobarber-web with MIT License | 5 votes |
SignUp: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const history = useHistory();
const handleSubmit = useCallback(
async (data: SignUpFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome é obrigatório'),
email: Yup.string()
.required('E-mail é obrigatório')
.email('Digite um e-mail válido'),
password: Yup.string().min(6, 'No mínimo 6 dígitos'),
});
await schema.validate(data, { abortEarly: false });
await api.post('/users', data);
history.push('/');
addToast({
type: 'success',
title: 'Cadastro realizado!',
description: 'Você já pode fazer seu logon no GoBarber!',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na cadastro',
description: 'Ocorreu um error ao fazer cadastro, tente novamente.',
});
}
},
[addToast, history],
);
return (
<Container>
<Background />
<Content>
<AnimationContainer>
<img src={logoImg} alt="GoBarber" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu cadastro</h1>
<Input name="name" icon={FiUser} placeholder="Nome" />
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Senha"
/>
<Button type="submit">Cadastrar</Button>
</Form>
<Link to="/">
<FiArrowLeft />
Voltar para logon
</Link>
</AnimationContainer>
</Content>
</Container>
);
}
Example #4
Source File: index.tsx From GoBarber with MIT License | 5 votes |
SignUp: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const history = useHistory();
const handleSubmit = useCallback(
async (data: SignUpFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome obrigatório'),
email: Yup.string()
.email('Digite email válido')
.required('Email obrigatório'),
password: Yup.string().min(6, 'Mínimo de 6 dígitos'),
});
await schema.validate(data, {
abortEarly: false,
});
await api.post('/users', data);
addToast({
type: 'success',
title: 'Cadastro realizado.',
description: 'Você já pode fazer o logon no GoBarber!',
});
history.push('/');
} catch (err) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
addToast({
type: 'error',
title: 'Erro no cadastro',
description: 'Ocorreu um erro ao fazer cadastro, tente novamente.',
});
}
},
[addToast, history],
);
return (
<Container>
<Background />
<Content>
<AnimationContainer>
<img src={logoImg} alt="logo" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu cadastro</h1>
<Input name="name" icon={FiUser} type="text" placeholder="Nome" />
<Input
name="email"
icon={FiMail}
type="email"
placeholder="E-mail"
/>
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Senha"
/>
<Button type="submit">Cadastrar</Button>
</Form>
<Link to="/">
<FiArrowLeft />
Voltar para Logon
</Link>
</AnimationContainer>
</Content>
</Container>
);
}
Example #5
Source File: index.tsx From gobarber-web with MIT License | 4 votes |
Profile: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const history = useHistory();
const { user, updateUser } = useAuth();
const handleSubmit = useCallback(
async (data: ProfileFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome é obrigatório'),
email: Yup.string()
.required('E-mail é obrigatório')
.email('Digite um e-mail válido'),
old_password: Yup.string(),
password: Yup.string().when('old_password', {
is: val => !!val.length,
then: Yup.string()
.min(6, 'No mínimo 6 dígitos')
.required('Campo obrigatório'),
otherwise: Yup.string(),
}),
password_confirmation: Yup.string()
.when('old_password', {
is: val => !!val.length,
then: Yup.string().required('Campo obrigatório'),
otherwise: Yup.string(),
})
.oneOf([Yup.ref('password'), null], 'Confirmação incorreta'),
});
await schema.validate(data, { abortEarly: false });
const {
name,
email,
old_password,
password,
password_confirmation,
} = data;
const formData = {
name,
email,
...(old_password
? {
old_password,
password,
password_confirmation,
}
: {}),
};
const response = await api.put('/profile', formData);
updateUser(response.data);
history.push('/dashboard');
addToast({
type: 'success',
title: 'Perfil atualizado!',
description:
'Suas informações do perfil foram atualizadas com sucesso!',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na atualização',
description:
'Ocorreu um error ao atualizar o perfil, tente novamente.',
});
}
},
[addToast, history, updateUser],
);
const handleAvatarChange = useCallback(
(e: ChangeEvent<HTMLInputElement>) => {
if (e.target.files) {
const data = new FormData();
data.append('avatar', e.target.files[0]);
api.patch('/users/avatar', data).then(response => {
updateUser(response.data);
addToast({
type: 'success',
title: 'Avatar atualizado',
});
});
}
},
[addToast, updateUser],
);
return (
<Container>
<header>
<div>
<Link to="/dashboard">
<FiArrowLeft size={32} />
</Link>
</div>
</header>
<Content>
<Form
ref={formRef}
initialData={{ name: user.name, email: user.email }}
onSubmit={handleSubmit}
>
<AvatarInput>
<img
src={
user.avatar_url ||
'https://api.adorable.io/avatars/186/[email protected]'
}
alt={user.name}
/>
<label htmlFor="avatar">
<FiCamera size={20} />
<input
data-testid="input-file"
type="file"
id="avatar"
onChange={handleAvatarChange}
/>
</label>
</AvatarInput>
<h1>Meu Perfil</h1>
<Input name="name" icon={FiUser} placeholder="Nome" />
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Input
containerStyle={{ marginTop: 24 }}
name="old_password"
icon={FiLock}
type="password"
placeholder="Senha atual"
/>
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Nova senha"
/>
<Input
name="password_confirmation"
icon={FiLock}
type="password"
placeholder="Confirmar senha"
/>
<Button type="submit">Confirmar mudanças</Button>
</Form>
</Content>
</Container>
);
}
Example #6
Source File: index.tsx From front-entenda-direito with GNU General Public License v3.0 | 4 votes |
ForgotPassword: React.FC = () => {
const [loading, setLoading] = useState(false);
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const handleSubmit = useCallback(
async (data: ForgotPasswordFormData) => {
try {
setLoading(true);
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.required('E-mail obrigatório')
.email('Digite um e-mail válido'),
});
await schema.validate(data, {
abortEarly: false,
});
await api.post('/password/forgot', {
email: data.email,
});
addToast({
type: 'success',
title: 'E-mail de recuperação de senha enviado',
description:
'Enviamos um e-mail para confirmar a recuperação de senha, cheque sua caixa de entrada.',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na recuperação de senha',
description:
'Ocorreu um erro ao tentar realizar a recuperação de senha, tente novamente.',
});
} finally {
setLoading(false);
}
},
[addToast],
);
return (
<Container>
<Background />
<Content>
<AnimationContainer>
<img src={logoImg} alt="Entenda Direito" />
<h1>ENTENDA DIREITO</h1>
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Recuperar senha</h1>
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Button loading={loading} type="submit">
Recuperar
</Button>
</Form>
<Link to="/">
<FiLogIn />
Voltar ao Login
</Link>
</AnimationContainer>
</Content>
</Container>
);
}
Example #7
Source File: index.tsx From front-entenda-direito with GNU General Public License v3.0 | 4 votes |
Profile: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const { user, updateUser } = useAuth();
const history = useHistory();
const handleSubmit = useCallback(
async (data: ProfileFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome obrigatório'),
email: Yup.string()
.required('E-mail obrigatório')
.email('Digite um e-mail valido'),
old_password: Yup.string(),
password: Yup.string().when('old_password', {
is: (val) => !!val.length,
then: Yup.string()
.min(6, 'No mínimo 06 dígitos')
.required('Campo obrigatório'),
otherwise: Yup.string(),
}),
password_confirmation: Yup.string()
.when('old_password', {
is: (val) => !!val.length,
then: Yup.string().required('Campo obrigatório'),
otherwise: Yup.string(),
})
.oneOf([Yup.ref('password'), null], 'Confirmação incorreta'),
});
await schema.validate(data, {
abortEarly: false,
});
const {
name,
email,
old_password,
password,
password_confirmation,
} = data;
const formData = {
name,
email,
...(old_password && {
old_password,
password,
password_confirmation,
}),
};
const response = await api.put('/profile', formData);
updateUser(response.data);
addToast({
type: 'success',
title: 'Perfil atualizado! ?',
description:
'Suas informações do perfil foram atualizadas com sucesso! ?',
});
history.push('/dashboard');
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na atualização ?',
description:
'?️ Ocorreu um erro ao atualizar perfil, tente novamente. ?️',
});
}
},
[addToast, history, updateUser],
);
const handleAvatarChange = useCallback(
(event: ChangeEvent<HTMLInputElement>) => {
if (event.target.files) {
const data = new FormData();
data.append('avatar', event.target.files[0]);
api.patch('/users/avatar', data).then((response) => {
updateUser(response.data);
addToast({
type: 'success',
title: 'Avatar atualizado!',
});
});
}
},
[addToast, updateUser],
);
return (
<Container>
<header>
<div>
<Link to="/dashboard">
<FiArrowLeft />
</Link>
</div>
</header>
<Content>
<Form
ref={formRef}
initialData={{
name: user.name,
email: user.email,
}}
onSubmit={handleSubmit}
>
<AvatarInput>
<img src={user.avatar_url} alt={user.name} />
<label htmlFor="avatar">
<FiCamera />
<input type="file" id="avatar" onChange={handleAvatarChange} />
</label>
</AvatarInput>
<h1>Meu perfil</h1>
<Input name="name" icon={FiUser} placeholder="Nome" />
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Input
containerStyle={{ marginTop: 24 }}
name="old_password"
icon={FiLock}
type="password"
placeholder="Senha atual"
/>
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Nova senha"
/>
<Input
name="password_confirmation"
icon={FiLock}
type="password"
placeholder="Confirmar senha"
/>
<Button type="submit">Confirmar mudanças</Button>
</Form>
</Content>
</Container>
);
}
Example #8
Source File: index.tsx From front-entenda-direito with GNU General Public License v3.0 | 4 votes |
SignIn: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { signIn } = useAuth();
const { addToast } = useToast();
const history = useHistory();
const handleSubmit = useCallback(
async (data: SignInFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.required('E-mail obrigatório')
.email('Digite um e-mail válido'),
password: Yup.string().required('Senha obrigatória'),
});
await schema.validate(data, {
abortEarly: false,
});
await signIn({
email: data.email,
password: data.password,
});
history.push('/dashboard');
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na autenticação',
description: 'Ocorreu um erro ao fazer login, cheque as credenciais.',
});
}
},
[signIn, history, addToast],
);
return (
<Container>
<Content>
<AnimationContainer>
<img src={logoImg} alt="Entenda Direito" />
<h1>ENTENDA DIREITO</h1>
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu logon</h1>
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Password"
/>
<Button type="submit">Entrar</Button>
<Link to="/forgot-password">Esqueci minha senha</Link>
</Form>
<Link to="/signup">
<FiLogIn />
Criar Conta
</Link>
</AnimationContainer>
</Content>
<Background />
</Container>
);
}
Example #9
Source File: index.tsx From front-entenda-direito with GNU General Public License v3.0 | 4 votes |
SignUp: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const history = useHistory();
const handleSubmit = useCallback(
async (data: SignUpFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome obrigatório'),
email: Yup.string()
.required('E-mail obrigatório')
.email('Digite um e-mail válido'),
password: Yup.string().min(6, 'No mínimo 06 dígitos'),
});
await schema.validate(data, {
abortEarly: false,
});
await api.post('/users', data);
history.push('/');
addToast({
type: 'success',
title: 'Cadastro realizado! ?',
description: 'Você já pode fazer seu logon no Entenda Direito ⚖️!',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro no cadastro ?',
description: 'Ocorreu um erro ao fazer cadastro, tente novamente.',
});
}
},
[addToast, history],
);
return (
<Container>
<Background />
<Content>
<AnimationContainer>
<img src={logoImg} alt="Entenda Direito" />
<h1>ENTENDA DIREITO</h1>
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu Cadastro</h1>
<Input name="name" icon={FiUser} placeholder="Nome" />
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Password"
/>
<Button type="submit">Cadastrar</Button>
</Form>
<Link to="/">
<FiArrowLeft />
Voltar para logon
</Link>
</AnimationContainer>
</Content>
</Container>
);
}
Example #10
Source File: index.tsx From gobarber-project with MIT License | 4 votes |
ForgotPassword: React.FC = () => {
const [loading, setLoading] = useState(false);
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const handleSubmit = useCallback(
async (data: ForgotPasswordFormData) => {
try {
setLoading(true);
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.required('E-mail obrigatório')
.email('Digite um e-mail válido'),
});
await schema.validate(data, {
abortEarly: false,
});
await api.post('/password/forgot', {
email: data.email,
});
addToast({
type: 'success',
title: 'E-mail de recuperação enviado',
description:
'Enviamos um e-mail para confirmar a recuperação de senha, cheque sua caixa de entrada',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na recuperação de senha',
description:
'Ocorreu um erro ao tentar realizar a recuperação de senha, tente novamente.',
});
} finally {
setLoading(false);
}
},
[addToast],
);
return (
<Container>
<Content>
<AnimationContainer>
<img src={logoImg} alt="GoBarber" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Recuperar senha</h1>
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Button loading={loading} type="submit">
Recuperar
</Button>
</Form>
<Link to="/">
<FiLogIn />
Voltar ao login
</Link>
</AnimationContainer>
</Content>
<Background />
</Container>
);
}
Example #11
Source File: index.tsx From gobarber-project with MIT License | 4 votes |
Profile: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const history = useHistory();
const { user, updateUser } = useAuth();
const handleSubmit = useCallback(
async (data: IProfileData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome obrigatório'),
email: Yup.string()
.required('Email obrigatário')
.email('Digite um e-mail válido'),
old_password: Yup.string(),
password: Yup.string().when('old_password', {
is: val => !!val.length,
then: Yup.string().required('Campo obrigatório'),
otherwise: Yup.string(),
}),
password_confirmation: Yup.string()
.when('old_password', {
is: val => !!val.length,
then: Yup.string().required('Campo obrigatório'),
otherwise: Yup.string(),
})
.oneOf([Yup.ref('password')], 'Confirmação incorreta'),
});
await schema.validate(data, {
abortEarly: false,
});
const {
name,
email,
old_password,
password,
password_confirmation,
} = data;
const formData = {
name,
email,
...(old_password && {
old_password,
password,
password_confirmation,
}),
};
const response = await api.put('/profile', formData);
updateUser(response.data);
history.push('/dashboard');
addToast({
type: 'success',
title: 'Perfil atualizado!',
description:
'Suas informações do perfil foram atualizadas com sucesso!',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na atualização',
description: 'Ocorreu um erro ao atualizar perfil, tente novamente.',
});
}
},
[addToast, history, updateUser],
);
const handleAvatarChange = useCallback(
(e: ChangeEvent<HTMLInputElement>) => {
if (e.target.files) {
const data = new FormData();
data.append('avatar', e.target.files[0]);
api.patch('/users/avatar', data).then(response => {
updateUser(response.data);
addToast({
type: 'success',
title: 'Avatar atualizado',
});
});
}
},
[addToast, updateUser],
);
return (
<Container>
<header>
<div>
<Link to="/dashboard">
<FiArrowLeft />
</Link>
</div>
</header>
<Content>
<Form
ref={formRef}
onSubmit={handleSubmit}
initialData={{
name: user.name,
email: user.email,
}}
>
<AvatarInput>
{user.avatar_url ? (
<img src={user.avatar_url} alt={user.name} />
) : (
<img
src={`https://avatar.oxro.io/avatar?name=${user.name}`}
alt={user.name}
/>
)}
<label htmlFor="avatar">
<FiCamera />
<input type="file" id="avatar" onChange={handleAvatarChange} />
</label>
</AvatarInput>
<h1>Meu Perfil</h1>
<section>
<Input name="name" icon={FiUser} placeholder="Nome" />
<Input name="email" icon={FiMail} placeholder="E-mail" />
</section>
<section>
<Input
name="old_password"
icon={FiLock}
type="password"
placeholder="Senha atual"
/>
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Nova senha"
/>
<Input
name="password_confirmation"
icon={FiLock}
type="password"
placeholder="Confirmar senha"
/>
</section>
<Button type="submit">Atualizar perfil</Button>
</Form>
</Content>
</Container>
);
}
Example #12
Source File: index.tsx From gobarber-project with MIT License | 4 votes |
SignIn: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const [loading, setLoading] = useState(false);
const { signIn } = useAuth();
const { addToast } = useToast();
const history = useHistory();
const handleSubmit = useCallback(
async (data: SignInFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.email('Digite um e-mail válido')
.required('E-mail obrigatório'),
password: Yup.string().required('Senha obrigatória'),
});
await schema.validate(data, {
abortEarly: false,
});
setLoading(true);
await signIn({
email: data.email,
password: data.password,
});
setLoading(false);
history.push('/dashboard');
} catch (err) {
setLoading(false);
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na autenticação',
description: 'Ocorreu um erro ao fazer login, cheque as credenciais',
});
}
},
[signIn, addToast, history],
);
return (
<Container>
<Content>
<AnimationContainer>
<img src={logo} alt="GoBarber" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu logon</h1>
<Input
name="email"
icon={FiMail}
type="text"
placeholder="E-mail"
/>
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Senha"
/>
<Button loading={loading} type="submit">
Entrar
</Button>
<Link to="/forgot-password">Esqueci minha senha</Link>
</Form>
<Link to="signup">
<FiLogIn />
Criar conta
</Link>
</AnimationContainer>
</Content>
<Background />
</Container>
);
}
Example #13
Source File: index.tsx From gobarber-project with MIT License | 4 votes |
SignUp: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const history = useHistory();
const handleSubmit = useCallback(
async (data: SignUpFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome obrigatório'),
email: Yup.string()
.required('E-mail obrigatório')
.email('Digite um e-mail válido'),
password: Yup.string().min(6, 'No mínimo 6 dígitos'),
});
await schema.validate(data, {
abortEarly: false,
});
await api.post('/users', data);
history.push('/');
addToast({
type: 'success',
title: 'Cadastro realizado!',
description: 'Você já pode fazer seu logon no GoBarber!',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro no cadastro',
description: 'Ocorreu um erro ao fazer cadastro, tente novamente.',
});
}
},
[addToast, history],
);
return (
<Container>
<Background />
<Content>
<AnimationContainer>
<img src={logoImg} alt="GoBarber" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu cadastro</h1>
<Input name="name" icon={FiUser} placeholder="Nome" />
<Input name="email" icon={FiMail} placeholder="E-mail" />
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Senha"
/>
<Button type="submit">Cadastrar</Button>
</Form>
<Link to="/">
<FiArrowLeft />
Voltar para logon
</Link>
</AnimationContainer>
</Content>
</Container>
);
}
Example #14
Source File: index.tsx From GoBarber with MIT License | 4 votes |
ForgotPassword: React.FC = () => {
const [loading, setLoading] = useState<boolean>(false);
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const handleSubmit = useCallback(
async (data: ForgotPasswordFormData) => {
try {
setLoading(true);
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.email('Digite email válido')
.required('Email obrigatório'),
});
await schema.validate(data, {
abortEarly: false,
});
await api.post('/password/forgot', {
email: data.email,
});
addToast({
type: 'success',
title: 'Email de recuperação enviado',
description:
'Enviamos um email para confirmar a recuperação de senha',
});
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na recuperação de senha',
description: 'Ocorreu um erro ao tentar recuperar a senha',
});
} finally {
formRef.current?.setFieldValue('email', '');
setLoading(false);
}
},
[addToast],
);
return (
<Container>
<Content>
<AnimationContainer>
<img src={logoImg} alt="logo" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Recuperar senha</h1>
<Input
name="email"
icon={FiMail}
type="email"
placeholder="E-mail"
/>
<Button isLoading={loading} type="submit">
Recuperar
</Button>
</Form>
<Link to="/">
<FiLogIn />
Voltar ao Login
</Link>
</AnimationContainer>
</Content>
<Background />
</Container>
);
}
Example #15
Source File: index.tsx From GoBarber with MIT License | 4 votes |
Profile: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const { addToast } = useToast();
const history = useHistory();
const { user, updateUser } = useAuth();
const handleSubmit = useCallback(
async (data: ProfileFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
name: Yup.string().required('Nome obrigatório'),
email: Yup.string()
.email('Digite email válido')
.required('Email obrigatório'),
oldPassword: Yup.string(),
password: Yup.string().when('oldPassword', {
is: String,
then: Yup.string().min(6),
otherwise: Yup.string(),
}),
passwordConfirmation: Yup.string()
.when('oldPassword', {
is: String,
then: Yup.string().required('Campo obrigatório'),
otherwise: Yup.string(),
})
.oneOf([Yup.ref('password')], 'Senhas diferentes'),
});
await schema.validate(data, {
abortEarly: false,
});
const {
name,
email,
oldPassword,
password,
passwordConfirmation,
} = data;
const formData = {
name,
email,
...(oldPassword
? {
oldPassword,
password,
passwordConfirmation,
}
: {}),
};
console.log(formData);
const response = await api.put('/profile', formData);
updateUser(response.data);
history.push('/dashboard');
addToast({
type: 'success',
title: 'Perfil alterado',
description: 'Suas alterações foram salvas com sucesso',
});
history.push('/');
} catch (err) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
addToast({
type: 'error',
title: 'Erro na atualização',
description: 'Ocorreu um erro ao atualizar o perfil',
});
}
},
[addToast, history, updateUser],
);
const handleAvatarChange = useCallback(
(event: ChangeEvent<HTMLInputElement>) => {
if (event.target.files) {
const data = new FormData();
data.append('avatar', event.target.files[0]);
api
.patch('/users/avatar', data)
.then((response) => {
updateUser(response.data);
addToast({
type: 'success',
title: 'Avatar atualizado',
});
})
.catch(() => {
addToast({
type: 'error',
title: 'Erro ao atualizar avatar',
});
});
}
},
[addToast, updateUser],
);
return (
<Container>
<Header>
<div>
<Link to="/dashboard">
<FiArrowLeft />
</Link>
</div>
</Header>
<Content>
<Form
initialData={{
name: user.name,
email: user.email,
}}
ref={formRef}
onSubmit={handleSubmit}
>
<AvatarInput>
<img src={user.avatar_url} alt={user.name} />
<label htmlFor="avatar">
<FiCamera />
<input type="file" id="avatar" onChange={handleAvatarChange} />
</label>
</AvatarInput>
<h1>Meu Perfil</h1>
<Input name="name" icon={FiUser} type="text" placeholder="Nome" />
<Input name="email" icon={FiMail} type="email" placeholder="E-mail" />
<Input
name="oldPassword"
icon={FiLock}
type="password"
placeholder="Senha atual"
/>
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Nova senha"
/>
<Input
name="passwordConfirmation"
icon={FiLock}
type="password"
placeholder="Confirme a nova senha"
/>
<Button type="submit">Confirmar mudanças</Button>
</Form>
</Content>
</Container>
);
}
Example #16
Source File: index.tsx From GoBarber with MIT License | 4 votes |
SignIn: React.FC = () => {
const formRef = useRef<FormHandles>(null);
const history = useHistory();
const { signIn } = useAuth();
const { addToast } = useToast();
const handleSubmit = useCallback(
async (data: SignInFormData) => {
try {
formRef.current?.setErrors({});
const schema = Yup.object().shape({
email: Yup.string()
.email('Digite email válido')
.required('Email obrigatório'),
password: Yup.string().required('Senha obrigatória'),
});
await schema.validate(data, {
abortEarly: false,
});
await signIn({
email: data.email,
password: data.password,
});
history.push('/dashboard');
} catch (err) {
if (err instanceof Yup.ValidationError) {
const errors = getValidationErrors(err);
formRef.current?.setErrors(errors);
return;
}
addToast({
type: 'error',
title: 'Erro na autenticação',
description:
'Ocorreu um erro ao fazer login, cheque suas credenciais',
});
}
},
[signIn, addToast, history],
);
return (
<Container>
<Content>
<AnimationContainer>
<img src={logoImg} alt="logo" />
<Form ref={formRef} onSubmit={handleSubmit}>
<h1>Faça seu logon</h1>
<Input
name="email"
icon={FiMail}
type="email"
placeholder="E-mail"
/>
<Input
name="password"
icon={FiLock}
type="password"
placeholder="Senha"
/>
<Button type="submit">Entrar</Button>
<Link to="/forgot">Esqueci minha senha</Link>
</Form>
<Link to="/signup">
<FiLogIn />
Criar conta
</Link>
</AnimationContainer>
</Content>
<Background />
</Container>
);
}