From 3908f558e5650a666a3e26b9082f37b9223e894e Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Thu, 28 Apr 2022 18:31:16 -0500 Subject: [PATCH 1/6] =?UTF-8?q?Acrescentando=20estruturas=20e=20servi?= =?UTF-8?q?=C3=A7os=20para=20integra=C3=A7=C3=A3o=20com=20backend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ src/LocalStorage.ts | 18 +++++++++++++ src/config/api.config.ts | 19 ++++++++++++++ src/constants/routes/sessionRoutes.ts | 11 ++++++++ src/pages/login/Login.tsx | 37 +++++++++++++++------------ src/services/api.ts | 8 ++++++ src/services/session.ts | 33 ++++++++++++++++++++++++ 7 files changed, 113 insertions(+), 16 deletions(-) create mode 100644 src/LocalStorage.ts create mode 100644 src/config/api.config.ts create mode 100644 src/constants/routes/sessionRoutes.ts create mode 100644 src/services/api.ts create mode 100644 src/services/session.ts diff --git a/.gitignore b/.gitignore index e36333d..3d42112 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ yarn-error.log* # Optional eslint cache .eslintcache + +# não commitar url de environment +src/constants/environment.ts diff --git a/src/LocalStorage.ts b/src/LocalStorage.ts new file mode 100644 index 0000000..b7a450b --- /dev/null +++ b/src/LocalStorage.ts @@ -0,0 +1,18 @@ +const tokenId = 'token'; +const productDetails = '@productDetails'; + +const LocalStorage = { + getToken: (): string | null => { + return localStorage.getItem(tokenId) + }, + + setToken: (token: string) => { + localStorage.setItem(tokenId, token) + }, + + clearToken: () => { + localStorage.setItem(tokenId, ''); + } +} + +export default LocalStorage \ No newline at end of file diff --git a/src/config/api.config.ts b/src/config/api.config.ts new file mode 100644 index 0000000..a7790ce --- /dev/null +++ b/src/config/api.config.ts @@ -0,0 +1,19 @@ +import environment from "../constants/environment"; + +const getBaseUrl = (): string => { + // const { hostname } = window.location; + + const { url } = environment; + + let apiUrl = null; + + // if (hostname === 'projeto-integrado-f-web.herokuapp.com') { + // apiUrl = url.prod; + // } else { + apiUrl = url.local; + // } + + return apiUrl; +} + +export default { getBaseUrl }; \ No newline at end of file diff --git a/src/constants/routes/sessionRoutes.ts b/src/constants/routes/sessionRoutes.ts new file mode 100644 index 0000000..a33a439 --- /dev/null +++ b/src/constants/routes/sessionRoutes.ts @@ -0,0 +1,11 @@ +const sessionRoutesDefault = '/session'; +const sessionRoutes = { + create: { + url: `${sessionRoutesDefault}/` + }, + refresh: { + url: `${sessionRoutesDefault}/refresh` + } +} + +export default sessionRoutes; \ No newline at end of file diff --git a/src/pages/login/Login.tsx b/src/pages/login/Login.tsx index f958c36..4ab3161 100644 --- a/src/pages/login/Login.tsx +++ b/src/pages/login/Login.tsx @@ -20,6 +20,9 @@ import { IonAlert, } from "@ionic/react"; +import * as sessionRoutes from '../../services/session'; +import LocalStorage from "../../LocalStorage"; + function validateEmail(email: string) { const re = /^((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))$/; @@ -33,7 +36,7 @@ const Page: React.FC = () => { const [isError, setIsError] = useState(false); const [message, setMessage] = useState(""); - const handleLogin = () => { + const handleLogin = async () => { // validação de inputs if (!email) { setMessage("Por favor, informe um e-mail válido"); @@ -53,26 +56,28 @@ const Page: React.FC = () => { return; } - const loginData = { + const singinForm = { email: email, password: password, }; - const api = axios.create({ - baseURL: `https://625dc16c4c36c7535779792c.mockapi.io/api/v1`, - }); + await sessionRoutes.create(singinForm).then(response => { + // if (!response) return - api - // .post("/login", loginData) - .get("/users/2") - .then((res) => { - // login bem-sucedido - history.push("/dashboard/" + email); - }) - .catch((error) => { - setMessage("Falha na autenticação! Por favor, crie uma conta"); - setIsError(true); - }); + const { token } = response + + LocalStorage.setToken(token); + + history.push({ pathname: '/home' }); + }).catch(error => { + // if (!error.response) return + + // se o backend retornou uma mensagem de erro customizada + // if (error.response.data.message) { + + console.dir('error: ', {error}) + alert('erro') + }) }; return ( diff --git a/src/services/api.ts b/src/services/api.ts new file mode 100644 index 0000000..909f183 --- /dev/null +++ b/src/services/api.ts @@ -0,0 +1,8 @@ +import axios from 'axios'; +import apiConfig from '../config/api.config'; + +const instance = axios.create({ + baseURL: apiConfig.getBaseUrl(), +}); + +export default instance; \ No newline at end of file diff --git a/src/services/session.ts b/src/services/session.ts new file mode 100644 index 0000000..7cd6717 --- /dev/null +++ b/src/services/session.ts @@ -0,0 +1,33 @@ +import instance from '../services/api'; +import sessionRoutes from '../constants/routes/sessionRoutes'; +import LocalStorage from '../LocalStorage'; +import { AxiosRequestHeaders } from 'axios'; + +let token: string | null; +let header: AxiosRequestHeaders; + +interface createData { + email: string, + password: string, +} + +function updateHeader() { + token = LocalStorage.getToken(); + header = { + Accept: 'application/json', + 'Content-Type': 'application/json', + "Authorization": 'Bearer ' + token + } +} + +export async function create(data: createData) { + const response = await instance.post(sessionRoutes.create.url, data); + return response.data; +} + +export async function refresh() { + updateHeader(); + + let response = await instance.post(sessionRoutes.refresh.url, { token }, { headers: header }); + return response.data; +} \ No newline at end of file From d72d5200c088d8788c937f9ca56364bfeb1e8764 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Sat, 30 Apr 2022 13:27:46 -0500 Subject: [PATCH 2/6] =?UTF-8?q?Atualiza=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 ++ src/constants/routes/sessionRoutes.ts | 2 +- src/pages/login/Login.tsx | 43 +++++++++++++++++---------- src/services/session.ts | 4 +-- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 6962e41..39fd73e 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@capacitor/haptics": "1.1.4", "@capacitor/keyboard": "1.2.2", "@capacitor/status-bar": "1.0.8", + "@hookform/error-message": "^2.0.0", "@ionic/react": "^6.0.0", "@ionic/react-router": "^6.0.0", "@testing-library/jest-dom": "^5.11.9", @@ -23,6 +24,7 @@ "ionicons": "^5.4.0", "react": "^17.0.1", "react-dom": "^17.0.1", + "react-hook-form": "^7.30.0", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "typescript": "^4.1.3", diff --git a/src/constants/routes/sessionRoutes.ts b/src/constants/routes/sessionRoutes.ts index a33a439..11717b1 100644 --- a/src/constants/routes/sessionRoutes.ts +++ b/src/constants/routes/sessionRoutes.ts @@ -1,4 +1,4 @@ -const sessionRoutesDefault = '/session'; +const sessionRoutesDefault = '/sessions'; const sessionRoutes = { create: { url: `${sessionRoutesDefault}/` diff --git a/src/pages/login/Login.tsx b/src/pages/login/Login.tsx index 4ab3161..b31ceeb 100644 --- a/src/pages/login/Login.tsx +++ b/src/pages/login/Login.tsx @@ -23,48 +23,61 @@ import { import * as sessionRoutes from '../../services/session'; import LocalStorage from "../../LocalStorage"; -function validateEmail(email: string) { - const re = - /^((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))$/; - return re.test(String(email).toLowerCase()); -} - const Page: React.FC = () => { const history = useHistory(); const [email, setEmail] = useState("matheusalb3213@gmail.com"); - const [password, setPassword] = useState("1234"); + const [password, setPassword] = useState("123456"); const [isError, setIsError] = useState(false); const [message, setMessage] = useState(""); - const handleLogin = async () => { - // validação de inputs + function validateEmail(email: string) { + const re = + /^((?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]))$/; + return re.test(String(email).toLowerCase()); + } + + const validateForm = () => { if (!email) { setMessage("Por favor, informe um e-mail válido"); setIsError(true); - return; + return false; } if (validateEmail(email) === false) { setMessage("E-mail inválido"); setIsError(true); - return; + return false; } - if (!password || password.length < 6) { + if (!password) { setMessage("Por favor, digite a sua senha"); setIsError(true); - return; + return false; + } + + if(password.length < 6) { + setMessage("A senha deve conter ao menos 6 dígitos"); + setIsError(true); + return false; + } + + return true; + } + + const handleLogin = async () => { + if (!validateForm()) { + return } const singinForm = { - email: email, + login: email, password: password, }; await sessionRoutes.create(singinForm).then(response => { // if (!response) return - const { token } = response + const { token } = response.token LocalStorage.setToken(token); diff --git a/src/services/session.ts b/src/services/session.ts index 7cd6717..004ab03 100644 --- a/src/services/session.ts +++ b/src/services/session.ts @@ -7,8 +7,8 @@ let token: string | null; let header: AxiosRequestHeaders; interface createData { - email: string, - password: string, + login: string, + password: string, } function updateHeader() { From d71de5b3da4f69c44af23dd5eb310aa1aa88938a Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Sat, 30 Apr 2022 13:37:39 -0500 Subject: [PATCH 3/6] =?UTF-8?q?Atualiza=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/login/Login.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pages/login/Login.tsx b/src/pages/login/Login.tsx index b31ceeb..62e11b5 100644 --- a/src/pages/login/Login.tsx +++ b/src/pages/login/Login.tsx @@ -75,7 +75,12 @@ const Page: React.FC = () => { }; await sessionRoutes.create(singinForm).then(response => { - // if (!response) return + if (response.status === 'error') { + setMessage(response.message); + setIsError(true); + + return + } const { token } = response.token @@ -88,8 +93,8 @@ const Page: React.FC = () => { // se o backend retornou uma mensagem de erro customizada // if (error.response.data.message) { - console.dir('error: ', {error}) - alert('erro') + console.dir('Houve um erro: ', {error}) + alert('Houve um erro') }) }; From 3c73a0be1d63f888814257d565d18a6128672da8 Mon Sep 17 00:00:00 2001 From: Hugo Falcao Date: Mon, 2 May 2022 20:35:47 -0300 Subject: [PATCH 4/6] Adicionando pasta cadastro --- src/App.tsx | 2 +- src/pages/{ => Cadastro}/Cadastro.css | 0 src/pages/{ => Cadastro}/Cadastro.tsx | 6 +++--- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/pages/{ => Cadastro}/Cadastro.css (100%) rename src/pages/{ => Cadastro}/Cadastro.tsx (97%) diff --git a/src/App.tsx b/src/App.tsx index 5b3a726..a486e1a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,7 +5,7 @@ import { setupIonicReact } from '@ionic/react'; import { IonReactRouter } from '@ionic/react-router'; -import Cadastro from './pages/Cadastro'; +import Cadastro from './pages/Cadastro/Cadastro'; import MainPages from './pages/MainPages'; /* Core CSS required for Ionic components to work properly */ diff --git a/src/pages/Cadastro.css b/src/pages/Cadastro/Cadastro.css similarity index 100% rename from src/pages/Cadastro.css rename to src/pages/Cadastro/Cadastro.css diff --git a/src/pages/Cadastro.tsx b/src/pages/Cadastro/Cadastro.tsx similarity index 97% rename from src/pages/Cadastro.tsx rename to src/pages/Cadastro/Cadastro.tsx index 653280b..15ed2aa 100644 --- a/src/pages/Cadastro.tsx +++ b/src/pages/Cadastro/Cadastro.tsx @@ -1,11 +1,11 @@ import { IonToast, IonProgressBar, IonItem, IonLabel, IonInput, IonBackButton, IonButton, IonButtons, IonCardTitle, IonCol, IonContent, IonGrid, IonHeader, IonPage, IonRow, IonToolbar } from '@ionic/react'; import { arrowBack, logoFacebook, mail } from 'ionicons/icons'; -import { Action } from '../components/Action'; +import { Action } from '../../components/Action'; import { useEffect, useState } from 'react'; import { useHistory, useParams } from 'react-router'; import './Cadastro.css'; -import ModalExample from '../components/Email'; -import * as UsersService from '../services/users' +import ModalExample from '../../components/Email'; +import * as UsersService from '../../services/users' const Cadastro: React.FC = () => { const history = useHistory(); From 6fa2c3c1cea10c1d5185699b300ee9607c1e949e Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 2 May 2022 19:36:49 -0500 Subject: [PATCH 5/6] =?UTF-8?q?Atualiza=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 39 ++++++++++++++++++++++++++ src/App.tsx | 5 +++- src/components/Tabs.tsx | 45 ++++++++++++++++++++++++++++++ src/pages/{login => }/Login.tsx | 49 +++++++++++++++++++-------------- 4 files changed, 117 insertions(+), 21 deletions(-) create mode 100644 src/components/Tabs.tsx rename src/pages/{login => }/Login.tsx (77%) diff --git a/package-lock.json b/package-lock.json index f13af56..dbcb56f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@capacitor/haptics": "1.1.4", "@capacitor/keyboard": "1.2.2", "@capacitor/status-bar": "1.0.8", + "@hookform/error-message": "^2.0.0", "@ionic/react": "^6.0.0", "@ionic/react-router": "^6.0.0", "@testing-library/jest-dom": "^5.11.9", @@ -28,6 +29,7 @@ "ionicons": "^5.4.0", "react": "^17.0.1", "react-dom": "^17.0.1", + "react-hook-form": "^7.30.0", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "typescript": "^4.1.3", @@ -2369,6 +2371,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@hookform/error-message": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hookform/error-message/-/error-message-2.0.0.tgz", + "integrity": "sha512-Y90nHzjgL2MP7GFy75kscdvxrCTjtyxGmOLLxX14nd08OXRIh9lMH/y9Kpdo0p1IPowJBiZMHyueg7p+yrqynQ==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0", + "react-hook-form": "^7.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -13287,6 +13299,21 @@ "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", "dev": true }, + "node_modules/react-hook-form": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.30.0.tgz", + "integrity": "sha512-DzjiM6o2vtDGNMB9I4yCqW8J21P314SboNG1O0obROkbg7KVS0I7bMtwSdKyapnCPjHgnxc3L7E5PEdISeEUcQ==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -18244,6 +18271,12 @@ } } }, + "@hookform/error-message": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hookform/error-message/-/error-message-2.0.0.tgz", + "integrity": "sha512-Y90nHzjgL2MP7GFy75kscdvxrCTjtyxGmOLLxX14nd08OXRIh9lMH/y9Kpdo0p1IPowJBiZMHyueg7p+yrqynQ==", + "requires": {} + }, "@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -26381,6 +26414,12 @@ "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", "dev": true }, + "react-hook-form": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.30.0.tgz", + "integrity": "sha512-DzjiM6o2vtDGNMB9I4yCqW8J21P314SboNG1O0obROkbg7KVS0I7bMtwSdKyapnCPjHgnxc3L7E5PEdISeEUcQ==", + "requires": {} + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", diff --git a/src/App.tsx b/src/App.tsx index 2e036ca..5f483f3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,7 +5,7 @@ import Menu from './components/Menu'; import Page from './pages/Page'; // importação das páginas -import Login from './pages/login/Login'; +import Login from './pages/Login'; /* Core CSS required for Ionic components to work properly */ import '@ionic/react/css/core.css'; @@ -25,6 +25,7 @@ import '@ionic/react/css/display.css'; /* Theme variables */ import './theme/variables.css'; +import Tabs from './components/Tabs'; setupIonicReact(); @@ -49,6 +50,8 @@ const App: React.FC = () => { + + {/* */} ); diff --git a/src/components/Tabs.tsx b/src/components/Tabs.tsx new file mode 100644 index 0000000..ceed0f0 --- /dev/null +++ b/src/components/Tabs.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { IonTabs, IonTabBar, IonTabButton, IonIcon, IonLabel } from '@ionic/react'; + +import { logInOutline, logInSharp, personOutline, personSharp } from 'ionicons/icons'; + +interface AppTab { + label: string; + iosIcon: string; + mdIcon: string; + // badge: string; +} + +const appPages: AppTab[] = [ + { + label: 'Login', + iosIcon: logInOutline, + mdIcon: logInSharp, + // badge: '', + }, + { + label: 'Cadastro', + iosIcon: personOutline, + mdIcon: personSharp, + // badge: '', + } +] + +const Tabs: React.FC = () => { + return ( + + + {appPages.map((appPage, index) => { + + + + {appPage.label} + + + + })} + + ); +} + +export default Tabs \ No newline at end of file diff --git a/src/pages/login/Login.tsx b/src/pages/Login.tsx similarity index 77% rename from src/pages/login/Login.tsx rename to src/pages/Login.tsx index 62e11b5..12f1d86 100644 --- a/src/pages/login/Login.tsx +++ b/src/pages/Login.tsx @@ -3,12 +3,10 @@ import { IonHeader, IonPage, IonTitle, - IonToolbar, - IonButtons, + IonToolbar } from "@ionic/react"; import React, { useState } from "react"; -import axios from "axios"; -import { IonGrid, IonRow, IonCol } from "@ionic/react"; +import { IonGrid, IonRow, IonCol, IonToast } from "@ionic/react"; import { personCircle } from "ionicons/icons"; import { useHistory } from "react-router-dom"; import { @@ -20,10 +18,13 @@ import { IonAlert, } from "@ionic/react"; -import * as sessionRoutes from '../../services/session'; -import LocalStorage from "../../LocalStorage"; +import * as sessionRoutes from '../services/session'; +import LocalStorage from '../LocalStorage'; const Page: React.FC = () => { + const [showToast, setShowToast] = useState(false); + const [messageToast, setMessageToast ] = useState(''); + const history = useHistory(); const [email, setEmail] = useState("matheusalb3213@gmail.com"); const [password, setPassword] = useState("123456"); @@ -38,26 +39,26 @@ const Page: React.FC = () => { const validateForm = () => { if (!email) { - setMessage("Por favor, informe um e-mail válido"); - setIsError(true); + setMessageToast("Por favor, informe o e-mail"); + setShowToast(true); return false; } - if (validateEmail(email) === false) { - setMessage("E-mail inválido"); - setIsError(true); + if (!validateEmail(email)) { + setMessageToast("E-mail inválido"); + setShowToast(true); return false; } if (!password) { - setMessage("Por favor, digite a sua senha"); - setIsError(true); + setMessageToast("Por favor, digite a sua senha"); + setShowToast(true); return false; } - if(password.length < 6) { - setMessage("A senha deve conter ao menos 6 dígitos"); - setIsError(true); + if(password.length < 7 || password.length > 12) { + setMessageToast("A senha deve conter entre 7 e 12 dígitos"); + setShowToast(true); return false; } @@ -76,8 +77,8 @@ const Page: React.FC = () => { await sessionRoutes.create(singinForm).then(response => { if (response.status === 'error') { - setMessage(response.message); - setIsError(true); + setMessageToast(response.message); + setShowToast(true); return } @@ -92,8 +93,7 @@ const Page: React.FC = () => { // se o backend retornou uma mensagem de erro customizada // if (error.response.data.message) { - - console.dir('Houve um erro: ', {error}) + console.dir('Houve um erro: ', { error }) alert('Houve um erro') }) }; @@ -177,6 +177,15 @@ const Page: React.FC = () => { + + setShowToast(false)} + message={messageToast} + duration={2500} + /> ); From f848e204926eebf46a31318df4f23b177c1b7bd9 Mon Sep 17 00:00:00 2001 From: Matheus Albino Brunhara Date: Mon, 2 May 2022 19:49:47 -0500 Subject: [PATCH 6/6] =?UTF-8?q?Mais=20altera=C3=A7=C3=B5es=20de=20merge=20?= =?UTF-8?q?e=20padroniza=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/api.config.ts | 14 +------------- src/pages/Login.tsx | 5 +++-- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/config/api.config.ts b/src/config/api.config.ts index f25dba8..172c67e 100644 --- a/src/config/api.config.ts +++ b/src/config/api.config.ts @@ -1,24 +1,12 @@ -<<<<<<< HEAD -import environment from "../constants/environment"; +import environment from "../environments/environment"; const getBaseUrl = (): string => { // const { hostname } = window.location; - -======= -import environment from "../environments/environment"; - -function getBaseUrl() { - const { hostname } = window.location; ->>>>>>> 561e8597e0534b18b8dfbf5b454030b6d9a0cdbc const { url } = environment; let apiUrl = null; -<<<<<<< HEAD - // if (hostname === 'projeto-integrado-f-web.herokuapp.com') { -======= // if (hostname === '') { ->>>>>>> 561e8597e0534b18b8dfbf5b454030b6d9a0cdbc // apiUrl = url.prod; // } else { apiUrl = url.local; diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx index 12f1d86..cd14fb7 100644 --- a/src/pages/Login.tsx +++ b/src/pages/Login.tsx @@ -20,6 +20,7 @@ import { import * as sessionRoutes from '../services/session'; import LocalStorage from '../LocalStorage'; +import { Action } from "../components/Action"; const Page: React.FC = () => { const [showToast, setShowToast] = useState(false); @@ -165,14 +166,14 @@ const Page: React.FC = () => {

- Clicando no botão de "LOGIN", você concorda com a nossa{" "} + Clicando no botão de "Login", você concorda com a nossa{" "} política de termos e serviços

Login

- Ainda não possui uma conta? Cadastre-se aqui! +