Skip to content

Commit

Permalink
Merge pull request #9 from ateliware/register-form
Browse files Browse the repository at this point in the history
Register form
  • Loading branch information
williamsimionatto authored May 9, 2024
2 parents 0eda292 + f1b7388 commit e7e9176
Show file tree
Hide file tree
Showing 6 changed files with 128 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
NotFoundPage,
RecoverPasswordPage,
ResetPasswordPage,
SignupPage,
UserPage,
} from '@pages';
import { ToastContainer } from 'react-toastify';
Expand Down Expand Up @@ -59,6 +60,7 @@ function App() {
<Routes>
<Route path="">
<Route path="" element={<LoginPage />} />
<Route path="signup" element={<SignupPage />} />
<Route path="login" element={<LoginPage />} />
<Route path="recover_password">
<Route path="" element={<RecoverPasswordPage />} />
Expand Down
2 changes: 1 addition & 1 deletion src/components/PageHeader/PageHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export default function PageHeader(props: Props) {
<Icon>arrow_back</Icon>
</div>
)}
<h1>{props.title}</h1>
<h2 className="m-0">{props.title}</h2>
</div>
<div className="d-flex page-header-actions" style={{ gap: 20 }}>
{props.actions}
Expand Down
2 changes: 1 addition & 1 deletion src/pages/LoginPage/LoginPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ export default function LoginPage() {

<a
className="mt-s-200 font-s-150 font-weight-bold line-height-medium text-primary"
href="/register"
href="/signup"
>
Cadastrar-se
</a>
Expand Down
122 changes: 122 additions & 0 deletions src/pages/SignupPage/Signup.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
import { useEffect } from 'react';
import { FieldValues, SubmitHandler, useForm } from 'react-hook-form';
import { useNavigate } from 'react-router-dom';

import { Button, FileUpload, Input, PageHeader, Select } from '@components';
import { useAuthContext } from '@contexts/AuthProvider';
import { handleErrorForm } from '@services/api';

export default function SignupPage() {
const {
setError,
register,
handleSubmit,
formState: { errors },
} = useForm();
const { login, user, isLoadingRequest } = useAuthContext();
const navigate = useNavigate();

useEffect(() => {
if (!!user) navigate('/home');
return;
}, [user, navigate]);

const onSubmit = ((data: {
password: string;
fullName: string;
birthDate: string;
cpf: string;
phoneNumber: string;
state: string;
city: string;
}) => {
login(data.cpf.toLowerCase(), data.password).catch(
handleErrorForm(setError)
);
}) as SubmitHandler<FieldValues>;

return (
<div>
<PageHeader title="Cadastro" backButton={true}></PageHeader>
<div className="d-flex justify-center" style={{ height: '100vh' }}>
<div className="d-flex justify-center background-login-page w-75">
<form
autoComplete="off"
className="form-max-height w-100"
onSubmit={handleSubmit(onSubmit)}
>
<FileUpload label="Foto do Perfil" uploadPreview={true} />
<Input
className="mb-s-200 mt-s-200"
form={register('fullName', { required: 'Obrigatório' })}
label="Nome Completo"
placeholder="Nome completo"
error={!!errors.fullName}
caption={errors.fullName?.message as string}
/>
<Input
className="mb-s-200"
form={register('birthDate', { required: 'Obrigatório' })}
label="Data de Nascimento"
type="date"
error={!!errors.birthDate}
caption={errors.birthDate?.message as string}
/>
<Input
className="mb-s-200"
form={register('cpf', {
required: 'Obrigatório',
pattern: {
value: /^\d{11}$/,
message: 'CPF inválido',
},
})}
label="CPF"
placeholder="Apenas números"
error={!!errors.cpf}
caption={errors.cpf?.message as string}
/>
<Input
className="mb-s-200"
form={register('phoneNumber', {
required: 'Obrigatório',
pattern: {
value: /^\d{10,11}$/,
message: 'Número de telefone inválido',
},
})}
label="Número de Telefone"
placeholder="Apenas números"
error={!!errors.phoneNumber}
caption={errors.phoneNumber?.message as string}
/>
<Select
className="mb-s-200"
form={register('state', { required: 'Obrigatório' })}
label="Estado"
value=""
error={!!errors.state}
caption={errors.state?.message as string}
/>
<Select
className="mb-s-200"
form={register('city', { required: 'Obrigatório' })}
label="Cidade"
value=""
error={!!errors.city}
caption={errors.city?.message as string}
/>
<Button
type="submit"
isLoading={isLoadingRequest}
className="!w-100 mb-s-100"
alignText="center"
>
Cadastrar
</Button>
</form>
</div>
</div>
</div>
);
}
1 change: 1 addition & 0 deletions src/pages/SignupPage/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default as SignupPage } from './Signup';
1 change: 1 addition & 0 deletions src/pages/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export { DefaultPage } from './DefaultPage';
export { EmailSentPage } from './EmailSentPage';
export { LoginPage } from './LoginPage';
export { SignupPage } from './SignupPage';
export { MePage } from './MePage';
export { RecoverPasswordPage } from './RecoverPasswordPage';
export { ResetPasswordPage } from './ResetPasswordPage';
Expand Down

0 comments on commit e7e9176

Please sign in to comment.