diff --git a/src/App.tsx b/src/App.tsx
index 8a4dcab..7b60766 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -17,8 +17,9 @@ import Login from './pages/Login';
import Home from './pages/Home';
import Perfil from './pages/Perfil';
import PerfilEditar from './pages/PerfilEditar';
-import CadastroCompletar from './pages/CadastroCompletar/CadastroCompletar';
import CadastroVan from './pages/CadastroVan';
+import CadastroCompletar from './pages/CadastroCompletar/CadastroCompletar';
+import CompletarDocumentos from './pages/CadastroCompletar/CompletarDocumentos';
/* Core CSS required for Ionic components to work properly */
import '@ionic/react/css/core.css';
@@ -48,11 +49,16 @@ const routes = (
<>
+
+
+
+
+
diff --git a/src/constants/routes/vansLocatorsRoutes.ts b/src/constants/routes/vansLocatorsRoutes.ts
new file mode 100644
index 0000000..1f57945
--- /dev/null
+++ b/src/constants/routes/vansLocatorsRoutes.ts
@@ -0,0 +1,17 @@
+const vansRoutesDefault = '/vans/locator';
+const vansRoutes = {
+ list: {
+ url: `${vansRoutesDefault}/list`
+ },
+ getById: {
+ url: `${vansRoutesDefault}/`
+ },
+ create: {
+ url: `${vansRoutesDefault}/`
+ },
+ update: {
+ url: `${vansRoutesDefault}/edit`
+ }
+}
+
+export default vansRoutes;
\ No newline at end of file
diff --git a/src/constants/routes/vansRoutes.ts b/src/constants/routes/vansRoutes.ts
new file mode 100644
index 0000000..a4e241c
--- /dev/null
+++ b/src/constants/routes/vansRoutes.ts
@@ -0,0 +1,17 @@
+const vansRoutesDefault = '/vans';
+const vansRoutes = {
+ list: {
+ url: `${vansRoutesDefault}/list`
+ },
+ getById: {
+ url: `${vansRoutesDefault}/`
+ },
+ create: {
+ url: `${vansRoutesDefault}/`
+ },
+ update: {
+ url: `${vansRoutesDefault}/`
+ }
+}
+
+export default vansRoutes;
\ No newline at end of file
diff --git a/src/pages/CadastroVan.tsx b/src/pages/CadastroVan.tsx
index 7862f9d..5218d7c 100644
--- a/src/pages/CadastroVan.tsx
+++ b/src/pages/CadastroVan.tsx
@@ -20,12 +20,12 @@ import {
import React, { useEffect, useReducer, useState } from "react";
-import * as yup from 'yup';
-
-import { ApiClient } from "../services/api-client.service";
+// import * as yup from 'yup';
import carsService from '../services/functions/carsService'
+import * as vansRoutes from '../services/api/vans';
+
import "./CadastroVan.css";
const CadastroVan: React.FC = () => {
@@ -43,77 +43,34 @@ const CadastroVan: React.FC = () => {
carPlate: '',
carBrand: '',
carModel: '',
- maxPassengers: 1,
- isRent: false,
- carRentalName: '',
- postalCode: '',
- street: '',
- number: '',
- complement: '',
- city: '',
- state: '',
+ seats_number: 1,
+ isRented: false,
+ locator_name: '',
+ locator_address: '',
+ locator_complement: '',
+ locator_city: '',
+ locator_state: '',
}
);
- // TODO, yup
- let schema = yup.object().shape({
- carPlate: yup.string().required(),
- carBrand: yup.string().required(),
- carModel: yup.string().required(),
- maxPassengers: yup.number().integer().min(1).max(100).required(),
- isRented: yup.boolean().required(),
- carRentalName: yup.string(), // .required(),
- postalCode: yup.string(), // .required(),
- street: yup.string(), // .required(),
- number: yup.number().integer(), // .required(),
- complement: yup.string(), // .required(),
- city: yup.string(), // .required(),
- state: yup.string(), // .required(),
-
- // name: yup.string().required(),
- // age: yup.number().required().positive().integer(),
- // email: yup.string().email(),
- // website: yup.string().url(),
- // createdOn: yup.date().default(function () {
- // return new Date();
- // }),
- });
-
- const vanForm = {
- carPlate: inputValues.carPlate,
- carBrand: inputValues.carBrand,
- carModel: inputValues.carModel,
- maxPassengers: inputValues.maxPassengers,
- isRented: inputValues.isRented,
- carRentalName: inputValues.carRentalName,
- carRentalAddress: {
- postalCode: inputValues.postalCode,
- street: inputValues.street,
- number: inputValues.number,
- complement: inputValues.complement,
- city: inputValues.city,
- state: inputValues.state,
- }
- };
-
const clearRentalData = () => {
setInputValues({
- carPlate: '',
- carBrand: '',
- carModel: '',
- maxPassengers: 1,
- isRent: false,
- carRentalName: '',
- postalCode: '',
- street: '',
- number: '',
- complement: '',
- city: '',
- state: '',
+ carRentalName: '',
+ complement: '',
+ city: '',
+ state: '',
})
};
const validateForm = (): boolean => {
+ const vanForm = {
+ carPlate: inputValues.carPlate,
+ carBrand: inputValues.carBrand,
+ carModel: inputValues.carModel,
+ seats_number: inputValues.seats_number,
+ isRented: inputValues.isRented,
+ };
+
if (
!vanForm.carPlate ||
vanForm.carPlate.length !== 7 ||
@@ -136,12 +93,18 @@ const CadastroVan: React.FC = () => {
return false;
}
- if (!vanForm.maxPassengers || !parseInt(`${vanForm.maxPassengers}`)) {
+ if (!vanForm.seats_number || !parseInt(`${vanForm.seats_number}`)) {
setToastMessage("Número de passageiros inválido");
setShowToast(true);
return false;
}
+ if ((Number)(vanForm.seats_number) < 1) {
+ setToastMessage("Número de passageiros deve ser positivo!");
+ setShowToast(true);
+ return false;
+ }
+
if (vanForm.isRented) {
return validateRentalForm();
} else {
@@ -152,43 +115,32 @@ const CadastroVan: React.FC = () => {
};
const validateRentalForm = (): boolean => {
- if (!vanForm.carRentalName) {
+ const locatorForm = {
+ locator_name: inputValues.locator_name,
+ locator_address: inputValues.locator_address,
+ locator_complement: inputValues.locator_complement,
+ locator_city: inputValues.locator_city,
+ locator_state: inputValues.locator_state,
+ }
+
+ if (!locatorForm.locator_name) {
setToastMessage("Nome do Locador é obrigatório");
setShowToast(true);
return false;
}
if (
- !vanForm.carRentalAddress.postalCode ||
- vanForm.carRentalAddress.postalCode.length !== 8 ||
- !vanForm.carRentalAddress.postalCode.match(/([0-9]){8}/g)
+ !locatorForm.locator_city ||
+ !locatorForm.locator_city.match(/([A-zà-úÀ-Ú])/g)
) {
- setToastMessage("Cep inválido");
+ setToastMessage("Cidade inválida");
setShowToast(true);
return false;
}
if (
- !vanForm.carRentalAddress.number ||
- !parseInt(`${vanForm.carRentalAddress.number}`)
- ) {
- setToastMessage("Número inválido");
- setShowToast(true);
- return false;
- }
-
- if (
- !vanForm.carRentalAddress.city ||
- !vanForm.carRentalAddress.city.match(/([A-zà-úÀ-Ú])/g)
- ) {
- setToastMessage("Cidade inválido");
- setShowToast(true);
- return false;
- }
-
- if (
- !vanForm.carRentalAddress.state ||
- !vanForm.carRentalAddress.state.match(/([A-zà-úÀ-Ú])/g)
+ !locatorForm.locator_state ||
+ !locatorForm.locator_state.match(/([A-zà-úÀ-Ú])/g)
) {
setToastMessage("Estado inválido");
setShowToast(true);
@@ -199,9 +151,34 @@ const CadastroVan: React.FC = () => {
};
const handleSubmit = async () => {
- if (validateForm()) {
- await ApiClient.doPost("/cadastro-van", vanForm);
+ if (!validateForm()) {
+ return
}
+
+ // cria registro da van
+ await vansRoutes.create({
+ plate: inputValues.carPlate,
+ brand: inputValues.carBrand,
+ model: inputValues.carModel,
+ seats_number: inputValues.seats_number,
+ locator_name: inputValues.locator_name,
+ locator_address: inputValues.locator_address,
+ locator_complement: inputValues.locator_complement,
+ locator_city: inputValues.locator_city,
+ locator_state: inputValues.locator_state
+ }).then(response => {
+ if (response.status === 'error') {
+ setToastMessage(response.message);
+ setShowToast(true);
+
+ return
+ }
+
+ console.log(response)
+ }).catch((err) => {
+ setToastMessage(err);
+ setShowToast(true);
+ })
};
useEffect(() => {
@@ -248,24 +225,15 @@ const CadastroVan: React.FC = () => {
setInputValues({ carPlate: e.target.value })}
+ onIonChange={(e: any) => setInputValues({ carPlate: e.target.value })}
/>
- {/*
- Marca
- setInputValues({ carBrand: e.target.value })}
- />
- */}
-
Marca
-
+ setInputValues({ carBrand: e.target.value })}>
{ carModels ? carModels.map((carModel, index) => {
return ({carModel.name})
}) : <>> }
@@ -278,19 +246,20 @@ const CadastroVan: React.FC = () => {
type='text'
clearInput
placeholder='Digite o Modelo do Veículo'
- onIonInput={(e: any) => setInputValues({ carModel: e.target.value })}
+ onIonChange={(e: any) => setInputValues({ carModel: e.target.value })}
/>
- Número Máximo de Passageiros
+ Número de assentos
setInputValues({ maxPassengers: e.target.value })}
+ placeholder='podem ser ocupados por passageiros'
+ onIonChange={(e: any) => setInputValues({ seats_number: e.target.value })}
/>
@@ -313,38 +282,32 @@ const CadastroVan: React.FC = () => {
type='text'
clearInput
placeholder='Nome completo do Locador'
- onIonInput={(e: any) => setInputValues({ carRentalName: e.target.value })}
+ onIonChange={(e: any) => setInputValues({ locator_name: e.target.value })}
/>
setInputValues({ postalCode: e.target.value })}
- />
- setInputValues({ number: e.target.value })}
+ onIonChange={(e: any) => setInputValues({ locator_address: e.target.value })}
/>
setInputValues({ complement: e.target.value })}
+ onIonChange={(e: any) => setInputValues({ locator_complement: e.target.value })}
/>
setInputValues({ city: e.target.value })}
+ onIonChange={(e: any) => setInputValues({ locator_city: e.target.value })}
/>
setInputValues({ state: e.target.value })}
+ onIonChange={(e: any) => setInputValues({ locator_state: e.target.value })}
/>
diff --git a/src/services/api/users.ts b/src/services/api/users.ts
index fd6cd27..be989af 100644
--- a/src/services/api/users.ts
+++ b/src/services/api/users.ts
@@ -37,9 +37,11 @@ export interface CadastroRequest {
}
export interface UpdateUserRequest {
- name: string;
- email: string;
- bio: string;
+ name?: string;
+ email?: string;
+ bio?: string;
+ cpf?: string;
+ cnpj?: string;
}
// export async function get(cpf) {
diff --git a/src/services/api/vans.ts b/src/services/api/vans.ts
new file mode 100644
index 0000000..f77b867
--- /dev/null
+++ b/src/services/api/vans.ts
@@ -0,0 +1,63 @@
+import instance from "./api";
+
+import vansRoutes from "../../constants/routes/vansRoutes";
+import { AxiosRequestHeaders } from "axios";
+import LocalStorage from "../../LocalStorage";
+
+let token: string;
+let header: AxiosRequestHeaders;
+
+function updateHeader() {
+ token = LocalStorage.getToken();
+
+ header = {
+ Accept: "application/json",
+ "Content-Type": "application/json",
+ Authorization: "Bearer " + token,
+ };
+}
+
+export async function getById(vanId: string) {
+ updateHeader();
+
+ const response = await instance.get(vansRoutes.getById.url + `/${vanId}`, {
+ headers: header,
+ });
+
+ return response.data;
+}
+
+interface CreateVanBody {
+ plate: string;
+ brand: string;
+ model: string;
+ seats_number: string;
+ locator_name: string;
+ locator_address: string;
+ locator_complement: string;
+ locator_city: string;
+ locator_state: string;
+}
+
+export async function create(CreateVanBody: CreateVanBody) {
+ updateHeader();
+
+ const response = await instance.post(vansRoutes.create.url, CreateVanBody);
+ return response.data;
+}
+
+interface UpdateVanBody {
+ brand?: string;
+ model?: string;
+ seats_number?: string;
+}
+
+export async function update(vanData: UpdateVanBody) {
+ updateHeader();
+
+ const response = await instance.patch(vansRoutes.update.url, vanData, {
+ headers: header,
+ });
+
+ return response.data;
+}
\ No newline at end of file
diff --git a/src/services/functions/usersService.ts b/src/services/functions/usersService.ts
index 1fef5cb..b0d6ae1 100644
--- a/src/services/functions/usersService.ts
+++ b/src/services/functions/usersService.ts
@@ -7,6 +7,8 @@ interface getByIdReturn {
email: string;
birth_date: string;
bio: string;
+ cpf: string;
+ cnpj: string;
},
error?: {
errorMessage: string;
@@ -23,6 +25,8 @@ interface getByIdRes {
email: string;
birth_date: string;
bio: string;
+ cpf: string;
+ cnpj: string;
},
}
diff --git a/src/services/validateCpf.ts b/src/services/validateCpf.ts
new file mode 100644
index 0000000..d713b68
--- /dev/null
+++ b/src/services/validateCpf.ts
@@ -0,0 +1,25 @@
+export default function validateCpf(cpf: string): Boolean {
+ let soma = 0, resto;
+
+ if (cpf === "00000000000") return false;
+
+ for (let i = 1; i <= 9; i++)
+ soma = soma + parseInt(cpf.substring(i - 1, i)) * (11 - i);
+
+ resto = (soma * 10) % 11;
+
+ if (resto === 10 || resto === 11) resto = 0;
+ if (resto !== parseInt(cpf.substring(9, 10))) return false;
+
+ soma = 0;
+ for (let i = 1; i <= 10; i++)
+ soma = soma + parseInt(cpf.substring(i - 1, i)) * (12 - i);
+
+ resto = (soma * 10) % 11;
+
+ if (resto === 10 || resto === 11) resto = 0;
+
+ if (resto !== parseInt(cpf.substring(10, 11))) return false;
+
+ return true;
+};
\ No newline at end of file