-
- Clicando no botão de "Login", você concorda com a nossa{" "}
- política de termos e serviços
-
Login
diff --git a/src/pages/Perfil.css b/src/pages/Perfil.css
new file mode 100644
index 0000000..65cb3ee
--- /dev/null
+++ b/src/pages/Perfil.css
@@ -0,0 +1,3 @@
+#avatar {
+ border-radius: 50%;
+}
\ No newline at end of file
diff --git a/src/pages/Perfil.tsx b/src/pages/Perfil.tsx
new file mode 100644
index 0000000..9a745fc
--- /dev/null
+++ b/src/pages/Perfil.tsx
@@ -0,0 +1,151 @@
+import {
+ IonCard,
+ IonCardContent,
+ IonCardHeader,
+ IonCardTitle,
+ IonContent,
+ IonFab,
+ IonFabButton,
+ IonHeader,
+ IonIcon,
+ IonPage,
+ IonTitle,
+ IonToast,
+ IonToolbar,
+} from "@ionic/react";
+import { useHistory } from "react-router-dom";
+import React, { useState, useEffect, useReducer } from "react";
+import { IonRow, IonCol } from "@ionic/react";
+import { createOutline } from "ionicons/icons";
+
+import * as sessionRoutes from '../services/session';
+import * as usersRoutes from '../services/users';
+
+import './Perfil.css'
+import LocalStorage from "../LocalStorage";
+
+const Perfil: React.FC = () => {
+ const [showToast, setShowToast] = useState(false);
+ const [messageToast, setMessageToast ] = useState('');
+
+ const [inputValues, setInputValues] = useReducer(
+ (state: any, newState: any) => ({ ...state, ...newState }),
+ {
+ fullname: '',
+ bio: ''
+ }
+ );
+
+ const history = useHistory();
+
+ const loadUserData = async () => {
+ let userId = ''
+
+ await sessionRoutes.refresh().then(response => {
+ if (response.status === 'error') {
+ setMessageToast(response.message);
+ setShowToast(true);
+
+ return
+ }
+
+ userId = response.userId
+ }).catch(error => {
+ console.dir('Houve um erro: ', { error })
+ alert('Houve um erro')
+ })
+
+ await usersRoutes.getById(userId).then(response => {
+ if (response.status === 'error') {
+ setMessageToast(response.message.data)
+ setShowToast(true);
+
+ return
+ }
+
+ const userData = response.data
+
+ setInputValues({'fullname': userData.name, 'bio': userData.bio});
+ }).catch(error => {
+ console.dir('Houve um erro: ', { error })
+ alert('Houve um erro')
+ })
+ }
+
+ useEffect(() => {
+ const userToken = LocalStorage.getToken()
+
+ if (!userToken) {
+ // TODO, não impede o usuário de retornar a página de login
+ history.push({ pathname: '/login' });
+ setMessageToast("Por favor, autentique-se!");
+ setShowToast(true);
+ }
+
+ // const refreshResponse = refreshSession()
+ loadUserData()
+ }, []);
+
+ const handleEditProfile = () => {
+ alert('oi')
+ }
+
+ return (
+
+
+
+ Seu perfil
+
+
+
+
+
+
+ Seu perfil
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {inputValues.fullname}
+
+
+
+
+
+
+ Biografia
+
+
+ {inputValues.bio ? inputValues.bio : 'Sem biografia.'}
+
+
+
+
+
+
+
+
+
+ setShowToast(false)}
+ message={messageToast}
+ duration={2500}
+ />
+
+
+ );
+};
+
+export default Perfil;
diff --git a/src/pages/PerfilEditar.tsx b/src/pages/PerfilEditar.tsx
new file mode 100644
index 0000000..1610169
--- /dev/null
+++ b/src/pages/PerfilEditar.tsx
@@ -0,0 +1,66 @@
+import {
+ IonCard,
+ IonCardContent,
+ IonCardHeader,
+ IonCardTitle,
+ IonContent,
+ IonFab,
+ IonFabButton,
+ IonGrid,
+ IonHeader,
+ IonIcon,
+ IonInput,
+ IonItem,
+ IonLabel,
+ IonPage,
+ IonTitle,
+ IonToolbar
+} from "@ionic/react";
+import React, { useState } from "react";
+import { IonRow, IonCol } from "@ionic/react";
+import { createOutline } from "ionicons/icons";
+
+import './Perfil.css'
+
+const Perfil: React.FC = () => {
+ const [email, setEmail] = useState("matheusalb3213@gmail.com");
+
+ const handleEditProfile = () => {
+ alert('oi')
+ }
+
+ return (
+
+
+
+ Editar perfil
+
+
+
+
+
+
+ Editar perfil
+
+
+
+
+
+
+
+ Email
+ setEmail(e.detail.value!)}
+ >
+
+
+
+
+
+
+ );
+};
+
+export default Perfil;
diff --git a/src/services/session.ts b/src/services/session.ts
index 004ab03..efa3635 100644
--- a/src/services/session.ts
+++ b/src/services/session.ts
@@ -14,8 +14,8 @@ interface createData {
function updateHeader() {
token = LocalStorage.getToken();
header = {
- Accept: 'application/json',
- 'Content-Type': 'application/json',
+ "Accept": 'application/json',
+ "Content-Type": 'application/json',
"Authorization": 'Bearer ' + token
}
}
diff --git a/src/services/users.ts b/src/services/users.ts
index 73440e1..a8c47e6 100644
--- a/src/services/users.ts
+++ b/src/services/users.ts
@@ -1,16 +1,21 @@
import instance from '../services/api';
// import LocalStorage from '../LocalStorage';
-let token:string;
-let header:string;
+import userRoutes from '../constants/routes/usersRoutes';
+import { AxiosRequestHeaders } from 'axios';
+import LocalStorage from '../LocalStorage';
+
+let token: string;
+let header: AxiosRequestHeaders;
function updateHeader() {
-// token = LocalStorage.getToken();
- header = `{
+ token = LocalStorage.getToken();
+
+ header = {
"Accept": 'application/json',
"Content-Type": 'application/json',
"Authorization": 'Bearer ' + token
- }`
+ }
}
export interface CadastroResponse {
@@ -40,6 +45,13 @@ export interface CadastroRequest {
export async function create(CadastroRequest: any) {
updateHeader();
- const response = await instance.post("http://localhost:3333/users/", CadastroRequest);
+ const response = await instance.post(userRoutes.create.url, CadastroRequest);
+ return response.data;
+}
+
+export async function getById(userId: string) {
+ updateHeader();
+
+ const response = await instance.get(userRoutes.get.url + `/${userId}`, { headers: header });
return response.data;
}
\ No newline at end of file