w6{kGBIrFrH<~gx%FLQz?o<(
z242#|fM`r7BBh;^l`>O?5(BkIUf7Vc>@=xuX&fQ4u)4Cmigx-3&&tc?b^Dgy&%dY<
zm*-5pag=vJ#%;1=20N586qMY!r@E#5v1EQg`imzb^|+J^uet8QPJq^6PTTAg8j3T`
zc)GIUkoVMy`KjKNCjwPL=&Gx~$(h8-I5FUj9GpweWfytwa`uZtF%sdksISBTRGRv&
z3aZ7eH}`@VxNu@l+noz*{8}=Jf8dQ&=!P0`s1pOE_PISy%}eo*9N)F2iUG%d6z_Z2
z>ry2GoDeaMnns{7mwkB8h9nTc4q~VnP^x1-o*6GS*$AjiH4V;(cAe+X`iC9$+6s+(
zAQDV4hlEFj^rb8SOh2HgG`}OFG{;e@b7Jk{NBUCgLvjOZb?o6rYME);nVU~7!qd#y
zEN3l!tExA+%_SNQ?ry<(Vb0WU+q{vJO#4i0F-s^Au3eJnQkr
zOfk@0<~X01l9-&jE=IIB3^m#@H_**X=)L&e3q2OQ&3(kzoO~&Kth}?F)k)&XdDEZz
zH#j-1$YF2ZP@O>JbtIkLvGw4sqS)}Ry5Q4kZ9~Vk2|LS;YUp+4^ph#7a-Ms5iYJa2
z*FEW3=|;RldCN(PGr(k3Dv8#CBit7@eW2M4%3q
z=A6`XuXmzjotBp
dmVsdTB<+Oi;!QStwCY15AnEyE6qNY+-vRcO*-8Ka
literal 0
HcmV?d00001
diff --git a/src/assets/img/profile.jpg b/src/assets/img/profile.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6edfb4e3fa733a1968cefcc2461a92c242615429
GIT binary patch
literal 10205
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
Vm_U{P>HiDA_XPj<$Eqho{{?IZWqJSr
literal 0
HcmV?d00001
diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js
new file mode 100644
index 0000000..47e5739
--- /dev/null
+++ b/src/components/Footer/Footer.js
@@ -0,0 +1,21 @@
+import profile from "../../assets/img/profile.jpg";
+import home from "../../assets/img/home.jpg"
+import carrinho from "../../assets/img/carrinho.jpg"
+import { ButtonFooter, ContainerFooter } from './styleFooter';
+import React from "react";
+
+
+const Footer = () => {
+
+
+
+ return (
+
+
+
+
+
+ )
+}
+
+export default Footer;
\ No newline at end of file
diff --git a/src/components/Footer/styleFooter.js b/src/components/Footer/styleFooter.js
new file mode 100644
index 0000000..508d020
--- /dev/null
+++ b/src/components/Footer/styleFooter.js
@@ -0,0 +1,18 @@
+import { Button } from "@material-ui/core";
+import styled from "styled-components";
+
+
+export const ContainerFooter = styled.div`
+ display: flex;
+ width: 100%;
+ justify-content:space-around;
+ position: fixed;
+ bottom: 0;
+ height: 7vh;
+ box-shadow: 0px 0px 5px black;
+ img{
+ width: 50px;
+
+ }
+
+`
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..3e3b6a1
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,13 @@
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
+ sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+code {
+ font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
+ monospace;
+}
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 27d1650..bf6d128 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,6 +1,8 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
+import "./index.css"
+
ReactDOM.render(
From 5b12817d7e9b6fff7098fb219cd98097b9ff04ac Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Mon, 16 May 2022 19:09:15 -0300
Subject: [PATCH 08/51] Fiz login e signup
---
src/Loading/Loading.js | 14 +++++
src/Loading/styled.js | 6 ++
src/hooks/useForm.js | 4 +-
src/hooks/useUnProtectedPage.js | 10 ++--
src/pages/LoginPage/LoginForm.js | 52 +++++++++++++++++
src/pages/LoginPage/LoginPage.js | 45 ++++++---------
src/pages/LoginPage/styled.js | 81 +++++++++++++++++++++++++++
src/pages/SignUpPage/SignUpForm.js | 90 ++++++++++++++++++++++++++++++
src/pages/SignUpPage/SignUpPage.js | 15 +++++
src/pages/SignUpPage/styled.js | 75 +++++++++++++++++++++++++
src/services/services.js | 0
src/services/user.js | 39 +++++++++++++
12 files changed, 394 insertions(+), 37 deletions(-)
create mode 100644 src/Loading/Loading.js
create mode 100644 src/Loading/styled.js
delete mode 100644 src/services/services.js
create mode 100644 src/services/user.js
diff --git a/src/Loading/Loading.js b/src/Loading/Loading.js
new file mode 100644
index 0000000..859a09f
--- /dev/null
+++ b/src/Loading/Loading.js
@@ -0,0 +1,14 @@
+import React from "react";
+import { CircularProgress } from "@material-ui/core";
+import { LoadingContainer } from "./styled";
+
+
+
+const Loading = () => {
+ return (
+
+
+
+ );
+};
+export default Loading;
\ No newline at end of file
diff --git a/src/Loading/styled.js b/src/Loading/styled.js
new file mode 100644
index 0000000..f4ddc46
--- /dev/null
+++ b/src/Loading/styled.js
@@ -0,0 +1,6 @@
+import styled from "styled-components";
+
+export const LoadingContainer = styled.div`
+ display: flex;
+ justify-content: center
+ `
\ No newline at end of file
diff --git a/src/hooks/useForm.js b/src/hooks/useForm.js
index 71c4237..27028c6 100644
--- a/src/hooks/useForm.js
+++ b/src/hooks/useForm.js
@@ -3,7 +3,7 @@ import { useState } from 'react'
const useForm = (initialState) => {
const [form, setForm] = useState(initialState)
- const handleInputChange = (event) => {
+ const onChange = (event) => {
const {value, name} = event.target
setForm({...form, [name]: value})
}
@@ -12,7 +12,7 @@ const useForm = (initialState) => {
setForm(initialState)
}
- return [form, handleInputChange, clear]
+ return [form, onChange, clear]
}
export default useForm
\ No newline at end of file
diff --git a/src/hooks/useUnProtectedPage.js b/src/hooks/useUnProtectedPage.js
index f74047f..beb7ea7 100644
--- a/src/hooks/useUnProtectedPage.js
+++ b/src/hooks/useUnProtectedPage.js
@@ -1,17 +1,15 @@
-import {goToFeedPage} from "../router/coodinator"
+import { goToHome } from '../router/coordinator'
import { useEffect } from 'react'
import { useNavigate } from 'react-router-dom'
-
-
-const useUnprotectedPage = () => {
+const useUnProtectedPage = () => {
const navigate = useNavigate()
useEffect(() => {
const token = localStorage.getItem('token')
if (token){
- goToFeedPage(navigate)
+ goToHome(navigate)
}
}, [navigate])
}
-export default useUnprotectedPage
+export default useUnProtectedPage;
diff --git a/src/pages/LoginPage/LoginForm.js b/src/pages/LoginPage/LoginForm.js
index e69de29..2448b6b 100644
--- a/src/pages/LoginPage/LoginForm.js
+++ b/src/pages/LoginPage/LoginForm.js
@@ -0,0 +1,52 @@
+import React, { useState } from "react";
+import { useNavigate } from "react-router-dom";
+import useForm from "../../hooks/useForm";
+import useUnProtectedPage from "../../hooks/useUnProtectedPage";
+import { login } from "../../services/user";
+/* import { CircularProgress } from "@material-ui/core"; */
+import { InputStyle, PostButton, ButtonLetter } from "./styled";
+
+const LoginForm = () => {
+ const [ form, onChange, clear ] = useForm({ email: "", password: "" });
+ //Fazendo a função de loading ao carregar a API
+ /* const [isLoading, setIsLoading] = useState(false); */
+ const navigate = useNavigate();
+ /* useUnProtectedPage() */
+
+ //Chamar aqui na requisição por props e no arquivo da requisição (user)
+ const onSubimitForm = (event) => {
+ event.preventDefault();
+ login(form, clear, navigate /* setIsLoading */);
+ };
+
+ return (
+
+
+
+ );
+};
+
+export default LoginForm;
\ No newline at end of file
diff --git a/src/pages/LoginPage/LoginPage.js b/src/pages/LoginPage/LoginPage.js
index 8661065..52bd47b 100644
--- a/src/pages/LoginPage/LoginPage.js
+++ b/src/pages/LoginPage/LoginPage.js
@@ -1,34 +1,21 @@
import React from "react";
-import { makeStyles } from "@material-ui/core/styles";
-import TextField from "@material-ui/core/TextField";
-import Button from "@material-ui/core/Button";
+import { InputsContainer, SignUpButton, SigButtonLetter } from "./styled";
+import LoginForm from "./LoginForm";
+import { useNavigate } from "react-router-dom";
+import { goToSignupPage } from "../../router/coordinator";
-const useStyles = makeStyles((theme) => ({
- root: {
- "& > *": {
- margin: theme.spacing(1),
- width: "25ch",
- },
- },
-}));
-
-export default function LoginPage() {
- const classes = useStyles();
+const LoginPage = () => {
+ const navigate = useNavigate();
return (
-
-
-
-
-
Não possui cadastro? Clique aqui.
-
-
-
-
+
+
+
+ goToSignupPage(navigate)}>Crie uma conta!
+
+
);
-}
+};
+
+export default LoginPage;
+
diff --git a/src/pages/LoginPage/styled.js b/src/pages/LoginPage/styled.js
index e69de29..ee8ec9d 100644
--- a/src/pages/LoginPage/styled.js
+++ b/src/pages/LoginPage/styled.js
@@ -0,0 +1,81 @@
+import styled from "styled-components";
+
+export const InputsContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+ width: 80vw;
+ max-width: 450px;
+ align-items: center;
+ margin-bottom: 2%;
+`;
+
+export const InputStyle = styled.input`
+ display: flex;
+ flex-direction: column;
+ margin: 1vh;
+ height: 8vh;
+ width: 90vw;
+ box-sizing: border-box;
+ left: 0%;
+ right: 0%;
+ top: 0%;
+ bottom: 0%;
+ background: #ffffff;
+ border: 1px solid #d5d8de;
+ border-radius: 4px;
+`;
+
+export const PostButton = styled.button`
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ align-self: center;
+ padding: 2% 4%;
+ width: 90vw;
+ height: 6vh;
+ margin: 3% 0% ;
+ cursor: pointer;
+ background: linear-gradient(90deg, #ff6489 0%, #f9b24e 100%), #4088cb;
+ border: none;
+ border-radius: 27px;
+`;
+
+export const ButtonLetter = styled.div`
+ height: 23px;
+ font-style: normal;
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 23px;
+ color: #ffffff;
+ flex: none;
+ order: 0;
+ flex-grow: 0;
+`;
+
+export const SignUpButton = styled.button`
+ display: flex;
+flex-direction: row;
+justify-content: center;
+align-items: center;
+gap: 10px;
+width: 90vw;
+height: 6vh;
+left: 29px;
+top: 676px;
+cursor: pointer;
+border: 1px solid #FE7E02;
+border-radius: 27px;
+`
+
+export const SigButtonLetter = styled.div`
+ height: 23px;
+ font-style: normal;
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 23px;
+ color: #FE7E02;
+ flex: none;
+ order: 0;
+ flex-grow: 0;
+`;
\ No newline at end of file
diff --git a/src/pages/SignUpPage/SignUpForm.js b/src/pages/SignUpPage/SignUpForm.js
index e69de29..842dca9 100644
--- a/src/pages/SignUpPage/SignUpForm.js
+++ b/src/pages/SignUpPage/SignUpForm.js
@@ -0,0 +1,90 @@
+
+import React from "react";
+import { useNavigate } from "react-router-dom";
+import useForm from "../../hooks/useForm";
+/* import useUnProtectedPage from "../../hooks/useUnprotectedPage"; */
+import { signUp } from "../../services/user";
+import {
+ H1Style,
+ H4Style,
+ InputStyle,
+ InputFather,
+ CheckboxStyle,
+ PostButton,
+ ButtonLetter,
+} from "./styled";
+
+const SignUpForm = () => {
+ const [ form, onChange, clear ] = useForm({
+ name: "",
+ email: "",
+ cpf: "",
+ password: "",
+ });
+ const navigate = useNavigate();
+ /* useUnProtectedPage(); */
+
+ const onSubimitForm = (event) => {
+ console.log(form);
+ event.preventDefault();
+ signUp(form, clear, navigate /* setRightButtonText */);
+ };
+
+ return (
+
+ );
+};
+
+export default SignUpForm;
\ No newline at end of file
diff --git a/src/pages/SignUpPage/SignUpPage.js b/src/pages/SignUpPage/SignUpPage.js
index e69de29..64a07d7 100644
--- a/src/pages/SignUpPage/SignUpPage.js
+++ b/src/pages/SignUpPage/SignUpPage.js
@@ -0,0 +1,15 @@
+import React from "react";
+
+import SignUpForm from "./SignUpForm";
+
+const SignUpPage = () => {
+ /* useUnProtectedPage() */
+
+ return (
+
+
+
+ );
+};
+
+export default SignUpPage;
\ No newline at end of file
diff --git a/src/pages/SignUpPage/styled.js b/src/pages/SignUpPage/styled.js
index e69de29..2cfc45a 100644
--- a/src/pages/SignUpPage/styled.js
+++ b/src/pages/SignUpPage/styled.js
@@ -0,0 +1,75 @@
+import styled from "styled-components";
+
+export const InputFather = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ left: 0%;
+ right: 0%;
+ top: 0%;
+ bottom: 0%;
+`;
+
+export const InputStyle = styled.input`
+ display: flex;
+ flex-direction: column;
+ margin: 1vh;
+ height: 8vh;
+ width: 90%;
+ box-sizing: border-box;
+ left: 0%;
+ right: 0%;
+ top: 0%;
+ bottom: 0%;
+ background: #ffffff;
+ border: 1px solid #d5d8de;
+ border-radius: 4px;
+`;
+
+export const H1Style = styled.h1`
+ margin-left: 1%;
+ margin-bottom: 18vh;
+`;
+
+export const H4Style = styled.h6`
+ margin-left: 8%;
+ margin-right: 8%;
+ margin-bottom: 1vh;
+ justify-content: flex-start;
+`;
+
+export const CheckboxStyle = styled.div`
+ display: flex;
+ margin-left: 8%;
+ margin-right: 8%;
+ margin-bottom: 1vh;
+ justify-content: flex-start;
+`;
+
+export const PostButton = styled.button`
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ align-self: center;
+ padding: 2% 4%;
+ width: 80vw;
+ height: 7vh;
+ margin: 3%;
+ cursor: pointer;
+ background: linear-gradient(90deg, #ff6489 0%, #f9b24e 100%), #4088cb;
+ border: none;
+ border-radius: 12px;
+`;
+
+export const ButtonLetter = styled.div`
+ height: 23px;
+ font-style: normal;
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 23px;
+ color: #ffffff;
+ flex: none;
+ order: 0;
+ flex-grow: 0;
+`;
\ No newline at end of file
diff --git a/src/services/services.js b/src/services/services.js
deleted file mode 100644
index e69de29..0000000
diff --git a/src/services/user.js b/src/services/user.js
new file mode 100644
index 0000000..23732f9
--- /dev/null
+++ b/src/services/user.js
@@ -0,0 +1,39 @@
+import axios from "axios";
+import { BASE_URL } from "../constants/BASE_URL";
+import { goToHome } from "../router/coordinator";
+
+export const login = (body, clear, navigate /* setRightButtonText, setIsLoading */) => {
+ /* setIsLoading(true) */
+ axios
+ .post(`${BASE_URL}/login`, body)
+ .then((res) => {
+ console.log("Deu certo", res);
+ localStorage.setItem("token", res.data.token);
+ clear();
+ goToHome(navigate);
+ /* setRightButtonText("Logout"); */
+ /* setIsLoading(false) */
+ })
+ .catch((err) => {
+ console.log("Deu erro", err);
+ alert(err.response.data.message);
+ /* setIsLoading(false) */
+ });
+};
+
+export const signUp = (body, clear, navigate /* setRightButtonText */) => {
+ axios
+ .post(`${BASE_URL}/signup`, body)
+ .then((res) => {
+ console.log("Deu certo", res);
+ alert("Cadastro realizado com sucesso");
+ localStorage.setItem("token", res.data.token);
+ clear();
+ goToHome(navigate);
+ /* setRightButtonText("Logout"); */
+ })
+ .catch((err) => {
+ console.log("Deu erro", err.response);
+ alert("Erro no cadastro!", err.response.data.message);
+ });
+};
\ No newline at end of file
From 68e976c6fa69bfb6acb68dc83ec0c268ab05eabe Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Mon, 16 May 2022 19:16:55 -0300
Subject: [PATCH 09/51] =?UTF-8?q?pequena=20altera=C3=A7=C3=A3o?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/SignUpPage/SignUpForm.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/SignUpPage/SignUpForm.js b/src/pages/SignUpPage/SignUpForm.js
index 842dca9..d166eb8 100644
--- a/src/pages/SignUpPage/SignUpForm.js
+++ b/src/pages/SignUpPage/SignUpForm.js
@@ -60,7 +60,7 @@ const SignUpForm = () => {
type="number"
size="30"
placeholder="Cpf"
- pattern={"[0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2}"}
+ pattern={"^([0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}|[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2})$"}
title={"Digite um CPF válido"}
required
/>
From 065266471145812f781eca9a3e70cbd94557f6dc Mon Sep 17 00:00:00 2001
From: Matheus Souza
Date: Mon, 16 May 2022 19:31:00 -0300
Subject: [PATCH 10/51] =?UTF-8?q?Cria=C3=A7=C3=A3o=20de=20pagina=20do=20re?=
=?UTF-8?q?staurante?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/index.html | 1 +
src/components/CardProduto/CardProduto.js | 18 ++++++++
src/components/CardProduto/styled.js | 50 +++++++++++++++++++++++
src/pages/Restaurante/Restaurante.jsx | 37 +++++++++++++----
src/pages/Restaurante/styled.js | 39 ++++++++++++++++++
5 files changed, 138 insertions(+), 7 deletions(-)
create mode 100644 src/components/CardProduto/CardProduto.js
create mode 100644 src/components/CardProduto/styled.js
diff --git a/public/index.html b/public/index.html
index aa069f2..e6de0fa 100644
--- a/public/index.html
+++ b/public/index.html
@@ -3,6 +3,7 @@
+
{
+ return (
+
+
+
+ {props.produto.name}
+ {props.produto.description}
+ R${props.produto.price}0
+
+ adicionar
+
+ )
+}
+
+export default CardProduto
\ No newline at end of file
diff --git a/src/components/CardProduto/styled.js b/src/components/CardProduto/styled.js
new file mode 100644
index 0000000..c99c219
--- /dev/null
+++ b/src/components/CardProduto/styled.js
@@ -0,0 +1,50 @@
+import styled from 'styled-components'
+
+export const MainContainer = styled.div`
+ display: flex;
+ align-items: center;
+ width: 95%;
+ min-height: 120px;
+ background-color: white;
+ border: 1px solid #C7C7CC;
+ border-radius: 16px;
+ margin: 5px 0;
+ word-wrap: break-word;
+ color: #D1D1D6;
+ position: relative;
+ p{
+ margin: 4px 0px;
+ margin-left: 10px;
+ }
+ .titulo{
+ color: #E86E5A;
+ }
+ .preco{
+ color: black;
+ }
+`
+export const Conteudo = styled.div`
+ display: flex;
+ flex-flow: column;
+ width: 65%;
+`
+export const Banner = styled.div`
+ display: flex;
+ flex-flow: column;
+ width: 35%;
+ height: 120px;
+ border-radius: 15px 0px 0px 15px;
+ background-image: url(${(props) => props.src});
+ background-position: center;
+ background-size: cover;
+`
+export const Botao = styled.button`
+ display: flex;
+ flex-flow: column;
+ align-self: flex-end;
+ position: absolute;
+ right: 0%;
+ border-radius: 15px 0px 15px 0px;
+ border: 1px solid black;
+ font-family: 'Roboto', sans-serif;
+`
\ No newline at end of file
diff --git a/src/pages/Restaurante/Restaurante.jsx b/src/pages/Restaurante/Restaurante.jsx
index 3b6c097..3a958c3 100644
--- a/src/pages/Restaurante/Restaurante.jsx
+++ b/src/pages/Restaurante/Restaurante.jsx
@@ -1,27 +1,50 @@
import axios from 'axios';
import React, { useEffect, useState } from 'react'
+import CardProduto from '../../components/CardProduto/CardProduto';
import { BASE_URL } from '../../constants/BASE_URL';
+import { BackBanner, Banner, Local, MainContainer } from './styled';
const Restaurante = () => {
- const [listRest,setListRest] = useState()
+ const [rest,setRest] = useState({})
+ const [produtos,setProdutos] = useState([])
+ const restaurante = 7
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk1aEE1U0VyY0Q0ZzJYSVhxb01qIiwibmFtZSI6IlBhYmxvIiwiZW1haWwiOiJwYWJsb0BvaS5jb20iLCJjcGYiOiIxMTEuMTExLjExMS0xOCIsImhhc0FkZHJlc3MiOnRydWUsImFkZHJlc3MiOiJSLiBBZm9uc28gQnJheiwgMTc3LCA3MSAtIFZpbGEgTi4gQ29uY2Vpw6fDo28iLCJpYXQiOjE2NTI3MjQ5MDl9.fPCYPmYhhktxwzCFT0qC92lCq41MwbarBcISKWCBM0w"
- const pegaRest = () => {
- axios.get(`${BASE_URL}/restaurants`,{headers:{auth:token}})
+ const pegaRestDetail = () => {
+ axios.get(`${BASE_URL}/restaurants/${restaurante}`,{headers:{auth:token}})
.then((response) => {
- setListRest(response.data)
- console.log(response.data)
+ setRest(response.data.restaurant)
+ setProdutos(response.data.restaurant.products)
+ console.log(response.data.restaurant)
+ console.log(response.data.restaurant.products)
}).catch((error) => {
});
};
useEffect(()=>{
- pegaRest()
+ pegaRestDetail()
},[])
return (
- Restaurante
+
+ {rest && rest.name ?
+
+
+ {rest.name}
+ {rest.category}
+
+
{rest.deliveryTime-10} - {rest.deliveryTime} min
+
Frete R${rest.shipping},00
+
+ {rest.address}
+
+ : null}
+ {produtos.length >0 ? produtos.map((produto) => {
+ return ;
+ }) :
+ Carregando lista de produtos!
}
+
)
}
export default Restaurante
\ No newline at end of file
diff --git a/src/pages/Restaurante/styled.js b/src/pages/Restaurante/styled.js
index e69de29..7de5550 100644
--- a/src/pages/Restaurante/styled.js
+++ b/src/pages/Restaurante/styled.js
@@ -0,0 +1,39 @@
+import styled from 'styled-components'
+
+export const MainContainer = styled.div`
+ display: flex;
+ flex-flow: column;
+ align-items: center;
+ font-family: 'Roboto', sans-serif;
+ position: relative;
+ overflow: hidden;
+`
+export const Local = styled.div`
+ display: flex;
+ flex-flow: column;
+ width: 95%;
+ color: #D1D1D6;
+ p{
+ margin: 5px 15px;
+ margin-left: 0;
+ }
+ .titulo{
+ color: #E86E5A;
+ }
+ div{
+ display: flex;
+ }
+`
+export const Banner = styled.div`
+ display: flex;
+ flex-flow: column;
+ align-items: center;
+ z-index: 1;
+ position: relative;
+ width: 100%;
+ height: 150px;
+ border-radius: 15px 15px 0px 0px;
+ background-image: url(${(props) => props.src});
+ background-position: center;
+ background-size: 100% 100%;
+`
\ No newline at end of file
From 48a7af95454d81a785993ef9e6380b9f673162c7 Mon Sep 17 00:00:00 2001
From: Pablo Gomes
Date: Mon, 16 May 2022 20:35:06 -0300
Subject: [PATCH 11/51] iniciei a pagina de perfil
---
src/hooks/useRequestData.js | 2 +-
src/pages/EditarCadastro/CardOrderHistory.jsx | 23 +++++++
src/pages/EditarCadastro/EditarCadastro.jsx | 65 ++++++++++++++++++-
src/pages/EditarCadastro/styled.js | 1 +
src/router/Router.js | 4 +-
5 files changed, 90 insertions(+), 5 deletions(-)
create mode 100644 src/pages/EditarCadastro/CardOrderHistory.jsx
diff --git a/src/hooks/useRequestData.js b/src/hooks/useRequestData.js
index df9d288..9a107cc 100644
--- a/src/hooks/useRequestData.js
+++ b/src/hooks/useRequestData.js
@@ -7,7 +7,7 @@ const useRequestData = (initialData, url) => {
const getData=()=>{
axios.get(url , {
headers: {
- Authorization: localStorage.getItem('token')
+ auth : localStorage.getItem('token')
}
})
.then((response) => {
diff --git a/src/pages/EditarCadastro/CardOrderHistory.jsx b/src/pages/EditarCadastro/CardOrderHistory.jsx
new file mode 100644
index 0000000..a30e021
--- /dev/null
+++ b/src/pages/EditarCadastro/CardOrderHistory.jsx
@@ -0,0 +1,23 @@
+import React,{useState,useEffect} from "react";
+import axios from "axios";
+import {BASE_URL} from '../../constants/BASE_URL'
+
+const CardOrderHistory =()=>{
+ const [orderHistorys, setOrderHistorys] = useState([])
+
+ const getOrderHistory=()=>{
+
+
+
+
+
+ }
+
+
+ return(
+ <>
+
+ >
+ )
+}
+export default CardOrderHistory
diff --git a/src/pages/EditarCadastro/EditarCadastro.jsx b/src/pages/EditarCadastro/EditarCadastro.jsx
index 673b5e4..f9a598f 100644
--- a/src/pages/EditarCadastro/EditarCadastro.jsx
+++ b/src/pages/EditarCadastro/EditarCadastro.jsx
@@ -1,8 +1,69 @@
-import React from 'react'
+import axios from 'axios'
+import React, { useEffect, useState } from 'react'
+import {BASE_URL} from '../../constants/BASE_URL'
+import useRequestData from '../../hooks/useRequestData'
const EditarCadastro = () => {
+ const [profile, setProfile] = useState({})
+ const [address, setAddress] = useState({})
+
+const getProfile =()=>{
+const headers = {
+ headers: {
+ auth : localStorage.getItem('token')
+ }
+}
+axios
+.get(`${BASE_URL}/profile`, headers)
+.then((res)=>{
+setProfile(res.data.user)
+})
+.catch((err)=>{
+ console.log(err)
+})
+}
+
+
+const getAddress =()=>{
+ const headers = {
+ headers: {
+ auth : localStorage.getItem('token')
+ }
+ }
+ axios
+ .get(`${BASE_URL}/profile/address`, headers)
+ .then((res)=>{
+
+ setAddress(res.data.address)
+ console.log(res.data.address)
+ })
+ .catch((err)=>{
+ console.log(err)
+ })
+ }
+ useEffect(()=>{
+ getProfile()
+ getAddress()
+ },[])
+
+
+
+
+
+
return (
- EditarCadastro
+ <>
+
+
{profile.name}
+
{profile.email}
+
{profile.cpf}
+
+
+
+
Endereço Casdastrado
+
+
+ >
)
}
export default EditarCadastro
\ No newline at end of file
diff --git a/src/pages/EditarCadastro/styled.js b/src/pages/EditarCadastro/styled.js
index e69de29..45f747c 100644
--- a/src/pages/EditarCadastro/styled.js
+++ b/src/pages/EditarCadastro/styled.js
@@ -0,0 +1 @@
+import styled from "styled-components"
diff --git a/src/router/Router.js b/src/router/Router.js
index 1ecdedd..c9a3055 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -3,7 +3,7 @@ import { Routes, Route,BrowserRouter} from 'react-router-dom'
import Home from "../pages/HomePage/Home"
import Restaurante from "../pages/Restaurante/Restaurante";
import LoginPage from "../pages/LoginPage/LoginPage"
-import EditarCadastro from "../pages/SignUpPage/SignUpPage"
+import EditarCadastro from "../pages/EditarCadastro/EditarCadastro"
import SignupPage from "../pages/SignUpPage/SignUpPage"
const Router =()=>{
@@ -14,7 +14,7 @@ const Router =()=>{
}/>
}/>
}/>
- }/>
+ {/* }/> */}
}/>
{/* */}
From 43385a087033a77b685e5e2a0cd3656735a12a8f Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Mon, 16 May 2022 21:15:54 -0300
Subject: [PATCH 12/51] =?UTF-8?q?Fiz=20o=20cadastro=20de=20endere=C3=A7os?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/RegisterAddres/AddresForm.js | 110 +++++++++++++++++++++
src/pages/RegisterAddres/RegisterAddres.js | 12 +++
src/pages/RegisterAddres/styled.js | 75 ++++++++++++++
src/pages/SignUpPage/SignUpForm.js | 6 +-
src/pages/SignUpPage/SignUpPage.js | 1 -
src/router/Router.js | 43 ++++----
src/router/coordinator.js | 4 +
src/services/user.js | 32 +++++-
8 files changed, 252 insertions(+), 31 deletions(-)
create mode 100644 src/pages/RegisterAddres/AddresForm.js
create mode 100644 src/pages/RegisterAddres/RegisterAddres.js
create mode 100644 src/pages/RegisterAddres/styled.js
diff --git a/src/pages/RegisterAddres/AddresForm.js b/src/pages/RegisterAddres/AddresForm.js
new file mode 100644
index 0000000..0c08f41
--- /dev/null
+++ b/src/pages/RegisterAddres/AddresForm.js
@@ -0,0 +1,110 @@
+import React from "react";
+import { useNavigate } from "react-router-dom";
+import useForm from "../../hooks/useForm";
+/* import useUnProtectedPage from "../../hooks/useUnprotectedPage"; */
+import { registerAddres } from "../../services/user";
+import {
+ H1Style,
+ InputStyle,
+ InputFather,
+ PostButton,
+ ButtonLetter,
+} from "./styled";
+
+const AddresForm = () => {
+ const [ form, onChange, clear ] = useForm({
+ name: "",
+ email: "",
+ cpf: "",
+ password: "",
+ });
+ const navigate = useNavigate();
+ /* useUnProtectedPage(); */
+
+ const onSubimitForm = (event) => {
+ console.log(form);
+ event.preventDefault();
+ registerAddres(form, clear, navigate /* setRightButtonText */);
+ };
+
+ return (
+
+ );
+};
+
+export default AddresForm;
\ No newline at end of file
diff --git a/src/pages/RegisterAddres/RegisterAddres.js b/src/pages/RegisterAddres/RegisterAddres.js
new file mode 100644
index 0000000..feeae79
--- /dev/null
+++ b/src/pages/RegisterAddres/RegisterAddres.js
@@ -0,0 +1,12 @@
+import React from "react";
+import AddresForm from "./AddresForm";
+
+const RegisterAddres = () => {
+ return (
+
+ );
+};
+
+export default RegisterAddres;
diff --git a/src/pages/RegisterAddres/styled.js b/src/pages/RegisterAddres/styled.js
new file mode 100644
index 0000000..2cfc45a
--- /dev/null
+++ b/src/pages/RegisterAddres/styled.js
@@ -0,0 +1,75 @@
+import styled from "styled-components";
+
+export const InputFather = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ left: 0%;
+ right: 0%;
+ top: 0%;
+ bottom: 0%;
+`;
+
+export const InputStyle = styled.input`
+ display: flex;
+ flex-direction: column;
+ margin: 1vh;
+ height: 8vh;
+ width: 90%;
+ box-sizing: border-box;
+ left: 0%;
+ right: 0%;
+ top: 0%;
+ bottom: 0%;
+ background: #ffffff;
+ border: 1px solid #d5d8de;
+ border-radius: 4px;
+`;
+
+export const H1Style = styled.h1`
+ margin-left: 1%;
+ margin-bottom: 18vh;
+`;
+
+export const H4Style = styled.h6`
+ margin-left: 8%;
+ margin-right: 8%;
+ margin-bottom: 1vh;
+ justify-content: flex-start;
+`;
+
+export const CheckboxStyle = styled.div`
+ display: flex;
+ margin-left: 8%;
+ margin-right: 8%;
+ margin-bottom: 1vh;
+ justify-content: flex-start;
+`;
+
+export const PostButton = styled.button`
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ align-self: center;
+ padding: 2% 4%;
+ width: 80vw;
+ height: 7vh;
+ margin: 3%;
+ cursor: pointer;
+ background: linear-gradient(90deg, #ff6489 0%, #f9b24e 100%), #4088cb;
+ border: none;
+ border-radius: 12px;
+`;
+
+export const ButtonLetter = styled.div`
+ height: 23px;
+ font-style: normal;
+ font-weight: 700;
+ font-size: 18px;
+ line-height: 23px;
+ color: #ffffff;
+ flex: none;
+ order: 0;
+ flex-grow: 0;
+`;
\ No newline at end of file
diff --git a/src/pages/SignUpPage/SignUpForm.js b/src/pages/SignUpPage/SignUpForm.js
index d166eb8..cf98023 100644
--- a/src/pages/SignUpPage/SignUpForm.js
+++ b/src/pages/SignUpPage/SignUpForm.js
@@ -6,10 +6,8 @@ import useForm from "../../hooks/useForm";
import { signUp } from "../../services/user";
import {
H1Style,
- H4Style,
InputStyle,
InputFather,
- CheckboxStyle,
PostButton,
ButtonLetter,
} from "./styled";
@@ -32,7 +30,7 @@ const SignUpForm = () => {
return (
-
Cadastrar)
+
Cadastrar
diff --git a/src/pages/SignUpPage/SignUpPage.js b/src/pages/SignUpPage/SignUpPage.js
index 64a07d7..2a21d0a 100644
--- a/src/pages/SignUpPage/SignUpPage.js
+++ b/src/pages/SignUpPage/SignUpPage.js
@@ -1,5 +1,4 @@
import React from "react";
-
import SignUpForm from "./SignUpForm";
const SignUpPage = () => {
diff --git a/src/router/Router.js b/src/router/Router.js
index 1ecdedd..7ff30f0 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -1,24 +1,25 @@
import React from "react";
-import { Routes, Route,BrowserRouter} from 'react-router-dom'
-import Home from "../pages/HomePage/Home"
+import { Routes, Route, BrowserRouter } from "react-router-dom";
+import Home from "../pages/HomePage/Home";
import Restaurante from "../pages/Restaurante/Restaurante";
-import LoginPage from "../pages/LoginPage/LoginPage"
-import EditarCadastro from "../pages/SignUpPage/SignUpPage"
-import SignupPage from "../pages/SignUpPage/SignUpPage"
+import LoginPage from "../pages/LoginPage/LoginPage";
+import EditarCadastro from "../pages/SignUpPage/SignUpPage";
+import SignupPage from "../pages/SignUpPage/SignUpPage";
+import RegisterAddres from "../pages/RegisterAddres/RegisterAddres";
-const Router =()=>{
-
- return(
-
-
- }/>
- }/>
- }/>
- }/>
- }/>
- {/* */}
-
-
- )
-}
- export default Router
\ No newline at end of file
+const Router = () => {
+ return (
+
+
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ {/* */}
+
+
+ );
+};
+export default Router;
diff --git a/src/router/coordinator.js b/src/router/coordinator.js
index 5a2ecf5..6a3b6ab 100644
--- a/src/router/coordinator.js
+++ b/src/router/coordinator.js
@@ -29,3 +29,7 @@ export const goToDetailsPage = (navigate, id) => {
export const goToBack = (navigate) => {
navigate(-1)
}
+
+export const goToRegistrarEndereço = (navigate) => {
+ navigate("user/adicionar-endereco")
+}
diff --git a/src/services/user.js b/src/services/user.js
index 23732f9..af2fe69 100644
--- a/src/services/user.js
+++ b/src/services/user.js
@@ -1,8 +1,12 @@
import axios from "axios";
import { BASE_URL } from "../constants/BASE_URL";
-import { goToHome } from "../router/coordinator";
+import { goToHome, goToRegistrarEndereço } from "../router/coordinator";
-export const login = (body, clear, navigate /* setRightButtonText, setIsLoading */) => {
+export const login = (
+ body,
+ clear,
+ navigate /* setRightButtonText, setIsLoading */
+) => {
/* setIsLoading(true) */
axios
.post(`${BASE_URL}/login`, body)
@@ -17,7 +21,7 @@ export const login = (body, clear, navigate /* setRightButtonText, setIsLoading
.catch((err) => {
console.log("Deu erro", err);
alert(err.response.data.message);
- /* setIsLoading(false) */
+ /* setIsLoading(false) */
});
};
@@ -29,11 +33,29 @@ export const signUp = (body, clear, navigate /* setRightButtonText */) => {
alert("Cadastro realizado com sucesso");
localStorage.setItem("token", res.data.token);
clear();
- goToHome(navigate);
+ goToRegistrarEndereço(navigate);
/* setRightButtonText("Logout"); */
})
.catch((err) => {
console.log("Deu erro", err.response);
alert("Erro no cadastro!", err.response.data.message);
});
-};
\ No newline at end of file
+};
+
+export const registerAddres = (body, clear, navigate) => {
+ axios
+ .put(`${BASE_URL}/address`, body, {
+ headers: {
+ auth: localStorage.getItem("token"),
+ },
+ })
+ .then((res) => {
+ console.log("Deu certo", res);
+ alert(res.data);
+ clear();
+ goToHome(navigate);
+ })
+ .catch((err) => {
+ alert(err);
+ });
+};
From dfcde23d9844c666deeaeb2ee909995463acdc85 Mon Sep 17 00:00:00 2001
From: Pablo Gomes
Date: Tue, 17 May 2022 07:26:32 -0300
Subject: [PATCH 13/51] refatorei a pagina profile
---
src/pages/{EditarCadastro => Profile}/CardOrderHistory.jsx | 0
.../EditarCadastro.jsx => Profile/Profile.jsx} | 4 ++--
src/pages/{EditarCadastro => Profile}/styled.js | 0
src/router/Router.js | 4 ++--
src/router/coordinator.js | 4 ++--
5 files changed, 6 insertions(+), 6 deletions(-)
rename src/pages/{EditarCadastro => Profile}/CardOrderHistory.jsx (100%)
rename src/pages/{EditarCadastro/EditarCadastro.jsx => Profile/Profile.jsx} (94%)
rename src/pages/{EditarCadastro => Profile}/styled.js (100%)
diff --git a/src/pages/EditarCadastro/CardOrderHistory.jsx b/src/pages/Profile/CardOrderHistory.jsx
similarity index 100%
rename from src/pages/EditarCadastro/CardOrderHistory.jsx
rename to src/pages/Profile/CardOrderHistory.jsx
diff --git a/src/pages/EditarCadastro/EditarCadastro.jsx b/src/pages/Profile/Profile.jsx
similarity index 94%
rename from src/pages/EditarCadastro/EditarCadastro.jsx
rename to src/pages/Profile/Profile.jsx
index f9a598f..7709563 100644
--- a/src/pages/EditarCadastro/EditarCadastro.jsx
+++ b/src/pages/Profile/Profile.jsx
@@ -3,7 +3,7 @@ import React, { useEffect, useState } from 'react'
import {BASE_URL} from '../../constants/BASE_URL'
import useRequestData from '../../hooks/useRequestData'
-const EditarCadastro = () => {
+const Profile = () => {
const [profile, setProfile] = useState({})
const [address, setAddress] = useState({})
@@ -66,4 +66,4 @@ const getAddress =()=>{
>
)
}
-export default EditarCadastro
\ No newline at end of file
+export default Profile
\ No newline at end of file
diff --git a/src/pages/EditarCadastro/styled.js b/src/pages/Profile/styled.js
similarity index 100%
rename from src/pages/EditarCadastro/styled.js
rename to src/pages/Profile/styled.js
diff --git a/src/router/Router.js b/src/router/Router.js
index 0ca50ab..644e3f2 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -4,7 +4,7 @@ import Home from "../pages/HomePage/Home";
import Restaurante from "../pages/Restaurante/Restaurante";
import LoginPage from "../pages/LoginPage/LoginPage";
-import EditarCadastro from "../pages/SignUpPage/SignUpPage";
+import Profile from "../pages/Profile/Profile";
import SignupPage from "../pages/SignUpPage/SignUpPage";
import RegisterAddres from "../pages/RegisterAddres/RegisterAddres";
@@ -16,7 +16,7 @@ const Router = () => {
} />
} />
} />
- } />
+ } />
} />
{/* */}
diff --git a/src/router/coordinator.js b/src/router/coordinator.js
index 6a3b6ab..84958f6 100644
--- a/src/router/coordinator.js
+++ b/src/router/coordinator.js
@@ -19,8 +19,8 @@ export const goToSignupPage = (navigate) => {
navigate("/user/signup")
}
-export const goToEditarCadastro = (navigate) => {
- navigate("/user/editar-cadastro")
+export const goToProfile = (navigate) => {
+ navigate("/user/profile")
}
export const goToDetailsPage = (navigate, id) => {
From aa3045b31cd9749c1a9f345ea4b717c7f7b09bf9 Mon Sep 17 00:00:00 2001
From: Pablo Gomes
Date: Tue, 17 May 2022 08:42:32 -0300
Subject: [PATCH 14/51] =?UTF-8?q?adjustes=20de=20estiliza=C3=A7=C3=A3o=20n?=
=?UTF-8?q?o=20profile?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/Profile/CardOrderHistory.jsx | 45 ++++++++++++++++++--------
src/pages/Profile/Profile.jsx | 19 +++++++----
src/pages/Profile/styled.js | 31 ++++++++++++++++++
3 files changed, 75 insertions(+), 20 deletions(-)
diff --git a/src/pages/Profile/CardOrderHistory.jsx b/src/pages/Profile/CardOrderHistory.jsx
index a30e021..42b4da8 100644
--- a/src/pages/Profile/CardOrderHistory.jsx
+++ b/src/pages/Profile/CardOrderHistory.jsx
@@ -1,23 +1,40 @@
-import React,{useState,useEffect} from "react";
+import React, { useState, useEffect } from "react";
import axios from "axios";
-import {BASE_URL} from '../../constants/BASE_URL'
-
-const CardOrderHistory =()=>{
- const [orderHistorys, setOrderHistorys] = useState([])
-
- const getOrderHistory=()=>{
-
+import { BASE_URL } from '../../constants/BASE_URL'
+import {ContainerOrderHistory} from "./styled"
+const CardOrderHistory = (props) => {
- }
+ const [orderHistorys, setOrderHistorys] = useState({})
-
- return(
- <>
-
- >
+ const getOrderHistory =()=>{
+ const headers = {
+ headers: {
+ auth : localStorage.getItem('token')
+ }
+ }
+ axios
+ .get(`${BASE_URL}/orders/history`, headers)
+ .then((res)=>{
+
+ console.log(res.data)
+ })
+ .catch((err)=>{
+ console.log(err)
+ })
+ }
+
+ useEffect(()=>{
+ getOrderHistory()
+ },[])
+
+
+ return (
+
+
+
)
}
export default CardOrderHistory
diff --git a/src/pages/Profile/Profile.jsx b/src/pages/Profile/Profile.jsx
index 7709563..bdfdc53 100644
--- a/src/pages/Profile/Profile.jsx
+++ b/src/pages/Profile/Profile.jsx
@@ -2,6 +2,8 @@ import axios from 'axios'
import React, { useEffect, useState } from 'react'
import {BASE_URL} from '../../constants/BASE_URL'
import useRequestData from '../../hooks/useRequestData'
+import CardOrderHistory from "../Profile/CardOrderHistory"
+import { CardName,CardAddress,Divgrey,DivHistory} from './styled'
const Profile = () => {
const [profile, setProfile] = useState({})
@@ -23,7 +25,6 @@ setProfile(res.data.user)
})
}
-
const getAddress =()=>{
const headers = {
headers: {
@@ -33,7 +34,6 @@ const getAddress =()=>{
axios
.get(`${BASE_URL}/profile/address`, headers)
.then((res)=>{
-
setAddress(res.data.address)
console.log(res.data.address)
})
@@ -53,16 +53,23 @@ const getAddress =()=>{
return (
<>
-
+
{profile.name}
{profile.email}
{profile.cpf}
-
+
-
+
+ Histórico de pedidos
+
+
+
+
+
+
>
)
}
diff --git a/src/pages/Profile/styled.js b/src/pages/Profile/styled.js
index 45f747c..5a3e7ab 100644
--- a/src/pages/Profile/styled.js
+++ b/src/pages/Profile/styled.js
@@ -1 +1,32 @@
import styled from "styled-components"
+
+export const CardName =styled.div`
+
+
+`
+export const CardAddress =styled.div`
+display: flex;
+background-color:#eeeeee ;
+
+`
+export const DivHistory =styled.div`
+display: flex;
+justify-content: center;
+flex-direction: column;
+align-items: center;
+
+`
+
+export const Divgrey =styled.div`
+border: 0.5px solid #8e8e93;
+width: 91%;
+margin: 1em;
+`
+export const ContainerOrderHistory=styled.div`
+display: flex;
+flex-direction: column;
+height: 15vh;
+width: 90%;
+border: 2px solid #c6c6c6;
+border-radius:12px;
+`
\ No newline at end of file
From 92c9ac434062d6031f630ea0975f0808893e1ba0 Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Tue, 17 May 2022 08:48:32 -0300
Subject: [PATCH 15/51] =?UTF-8?q?Fiz=20tentativas=20de=20funcionamento=20d?=
=?UTF-8?q?a=20pagina=20de=20cadastro=20de=20endere=C3=A7os?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/HomePage/Home.jsx | 21 ++++++++++++++++-----
src/router/coordinator.js | 11 +++++++----
src/services/user.js | 19 +++++++++++++------
3 files changed, 36 insertions(+), 15 deletions(-)
diff --git a/src/pages/HomePage/Home.jsx b/src/pages/HomePage/Home.jsx
index 96c5535..5f83de3 100644
--- a/src/pages/HomePage/Home.jsx
+++ b/src/pages/HomePage/Home.jsx
@@ -1,9 +1,20 @@
-import React from 'react'
+import React from "react";
+import { useNavigate } from "react-router-dom";
+import { goToLoginPage } from "../../router/coordinator";
const Home = () => {
+ const navigate = useNavigate();
+
+ const onClickLogin = () => {
+ goToLoginPage(navigate);
+ };
+
return (
- Home
- )
-}
+
+ );
+};
-export default Home
\ No newline at end of file
+export default Home;
diff --git a/src/router/coordinator.js b/src/router/coordinator.js
index 6a3b6ab..322b8dd 100644
--- a/src/router/coordinator.js
+++ b/src/router/coordinator.js
@@ -24,12 +24,15 @@ export const goToEditarCadastro = (navigate) => {
}
export const goToDetailsPage = (navigate, id) => {
- navigate(`/restaurante/details/${id}`)
-}
-export const goToBack = (navigate) => {
- navigate(-1)
+ navigate(`/restaurante/details/${id}`)
}
export const goToRegistrarEndereço = (navigate) => {
navigate("user/adicionar-endereco")
}
+
+export const goToBack = (navigate) => {
+ navigate(-1)
+}
+
+
diff --git a/src/services/user.js b/src/services/user.js
index af2fe69..5537ad1 100644
--- a/src/services/user.js
+++ b/src/services/user.js
@@ -13,8 +13,14 @@ export const login = (
.then((res) => {
console.log("Deu certo", res);
localStorage.setItem("token", res.data.token);
+ if (res.data.user.hasAddress === true){
+ navigate.push("/")
+ /* goToHome(navigate); */
+ } else {
+ navigate.push("user/adicionar-endereco")
+ }
clear();
- goToHome(navigate);
+
/* setRightButtonText("Logout"); */
/* setIsLoading(false) */
})
@@ -29,19 +35,20 @@ export const signUp = (body, clear, navigate /* setRightButtonText */) => {
axios
.post(`${BASE_URL}/signup`, body)
.then((res) => {
- console.log("Deu certo", res);
- alert("Cadastro realizado com sucesso");
localStorage.setItem("token", res.data.token);
+ console.log("Deu certo", res.data);
+ alert("Cadastro realizado com sucesso");
clear();
- goToRegistrarEndereço(navigate);
+ /* goToRegistrarEndereço(navigate); */
/* setRightButtonText("Logout"); */
})
.catch((err) => {
console.log("Deu erro", err.response);
- alert("Erro no cadastro!", err.response.data.message);
+ alert("Erro no cadastro!", err.data);
});
};
+//requisição para registrar endereço
export const registerAddres = (body, clear, navigate) => {
axios
.put(`${BASE_URL}/address`, body, {
@@ -52,8 +59,8 @@ export const registerAddres = (body, clear, navigate) => {
.then((res) => {
console.log("Deu certo", res);
alert(res.data);
- clear();
goToHome(navigate);
+ clear();
})
.catch((err) => {
alert(err);
From 2568d90107aa5ecc44d9fbbfaad58f8411e7f8f7 Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Tue, 17 May 2022 09:41:10 -0300
Subject: [PATCH 16/51] =?UTF-8?q?Resolvi=20o=20erro=20do=20cadastro=20de?=
=?UTF-8?q?=20endere=C3=A7os=20ao=20remover=20o=20user=20do=20coordinator?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/SignUpPage/SignUpForm.js | 20 +++++++++++---------
src/router/Router.js | 4 ++--
src/router/coordinator.js | 4 ++--
src/services/user.js | 8 ++++----
4 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/src/pages/SignUpPage/SignUpForm.js b/src/pages/SignUpPage/SignUpForm.js
index cf98023..aa584c8 100644
--- a/src/pages/SignUpPage/SignUpForm.js
+++ b/src/pages/SignUpPage/SignUpForm.js
@@ -1,8 +1,7 @@
-
-import React from "react";
+/* import useUnProtectedPage from "../../hooks/useUnprotectedPage"; */
+import React, { useState } from "react";
import { useNavigate } from "react-router-dom";
import useForm from "../../hooks/useForm";
-/* import useUnProtectedPage from "../../hooks/useUnprotectedPage"; */
import { signUp } from "../../services/user";
import {
H1Style,
@@ -13,19 +12,20 @@ import {
} from "./styled";
const SignUpForm = () => {
- const [ form, onChange, clear ] = useForm({
+ const [form, onChange, clear] = useForm({
name: "",
email: "",
cpf: "",
password: "",
});
const navigate = useNavigate();
- /* useUnProtectedPage(); */
+ /* useUnProtectedPage(); */
+ const [confirm, setConfirm] = useState("")
const onSubimitForm = (event) => {
console.log(form);
event.preventDefault();
- signUp(form, clear, navigate /* setRightButtonText */);
+ signUp(form, clear, navigate/* setRightButtonText */);
};
return (
@@ -58,7 +58,9 @@ const SignUpForm = () => {
type="number"
size="30"
placeholder="Cpf"
- pattern={"^([0-9]{3}\.?[0-9]{3}\.?[0-9]{3}\-?[0-9]{2}|[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}\/?[0-9]{4}\-?[0-9]{2})$"}
+ pattern={
+ "^([0-9]{3}.?[0-9]{3}.?[0-9]{3}-?[0-9]{2}|[0-9]{2}.?[0-9]{3}.?[0-9]{3}/?[0-9]{4}-?[0-9]{2})$"
+ }
title={"Digite um CPF válido"}
required
/>
@@ -74,7 +76,7 @@ const SignUpForm = () => {
required
/>
-
+
Cadastrar
@@ -85,4 +87,4 @@ const SignUpForm = () => {
);
};
-export default SignUpForm;
\ No newline at end of file
+export default SignUpForm;
diff --git a/src/router/Router.js b/src/router/Router.js
index 644e3f2..a60679d 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -15,9 +15,9 @@ const Router = () => {
} />
} />
} />
- } />
+ } />
} />
- } />
+ } />
{/* */}
diff --git a/src/router/coordinator.js b/src/router/coordinator.js
index e7718b0..4a7d4ca 100644
--- a/src/router/coordinator.js
+++ b/src/router/coordinator.js
@@ -16,7 +16,7 @@ export const goToLoginPage = (navigate) => {
navigate("/login")
}
export const goToSignupPage = (navigate) => {
- navigate("/user/signup")
+ navigate("/signup")
}
export const goToProfile = (navigate) => {
@@ -28,7 +28,7 @@ export const goToDetailsPage = (navigate, id) => {
}
export const goToRegistrarEndereço = (navigate) => {
- navigate("user/adicionar-endereco")
+ navigate("/adicionar-endereco")
}
export const goToBack = (navigate) => {
diff --git a/src/services/user.js b/src/services/user.js
index 5537ad1..92dbbef 100644
--- a/src/services/user.js
+++ b/src/services/user.js
@@ -31,16 +31,16 @@ export const login = (
});
};
-export const signUp = (body, clear, navigate /* setRightButtonText */) => {
+//Requisição para criar um login e ir para a criação de endereços
+export const signUp = (body, clear, navigate/* setRightButtonText */) => {
axios
.post(`${BASE_URL}/signup`, body)
.then((res) => {
+ console.log(res);
localStorage.setItem("token", res.data.token);
- console.log("Deu certo", res.data);
alert("Cadastro realizado com sucesso");
clear();
- /* goToRegistrarEndereço(navigate); */
- /* setRightButtonText("Logout"); */
+ goToRegistrarEndereço(navigate);
})
.catch((err) => {
console.log("Deu erro", err.response);
From 4cbb765d730d669544d11e7a4168fad58b225410 Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Tue, 17 May 2022 10:35:03 -0300
Subject: [PATCH 17/51] So falta estilizar
---
src/pages/LoginPage/LoginForm.js | 59 ++++++++++++++------------------
src/services/user.js | 26 +++++---------
2 files changed, 34 insertions(+), 51 deletions(-)
diff --git a/src/pages/LoginPage/LoginForm.js b/src/pages/LoginPage/LoginForm.js
index 2448b6b..c97fee3 100644
--- a/src/pages/LoginPage/LoginForm.js
+++ b/src/pages/LoginPage/LoginForm.js
@@ -1,52 +1,45 @@
-import React, { useState } from "react";
+import React from "react";
import { useNavigate } from "react-router-dom";
import useForm from "../../hooks/useForm";
-import useUnProtectedPage from "../../hooks/useUnProtectedPage";
import { login } from "../../services/user";
-/* import { CircularProgress } from "@material-ui/core"; */
import { InputStyle, PostButton, ButtonLetter } from "./styled";
const LoginForm = () => {
- const [ form, onChange, clear ] = useForm({ email: "", password: "" });
- //Fazendo a função de loading ao carregar a API
- /* const [isLoading, setIsLoading] = useState(false); */
+ const [form, onChange, clear] = useForm({ email: "", password: "" });
const navigate = useNavigate();
- /* useUnProtectedPage() */
- //Chamar aqui na requisição por props e no arquivo da requisição (user)
const onSubimitForm = (event) => {
event.preventDefault();
- login(form, clear, navigate /* setIsLoading */);
+ login(form, clear, navigate);
};
return (
+
+
+
+ Continuar
+
+
);
};
-export default LoginForm;
\ No newline at end of file
+export default LoginForm;
diff --git a/src/services/user.js b/src/services/user.js
index 92dbbef..02fcaba 100644
--- a/src/services/user.js
+++ b/src/services/user.js
@@ -2,37 +2,27 @@ import axios from "axios";
import { BASE_URL } from "../constants/BASE_URL";
import { goToHome, goToRegistrarEndereço } from "../router/coordinator";
-export const login = (
- body,
- clear,
- navigate /* setRightButtonText, setIsLoading */
-) => {
- /* setIsLoading(true) */
+export const login = (body, clear, navigate) => {
axios
.post(`${BASE_URL}/login`, body)
.then((res) => {
- console.log("Deu certo", res);
+ console.log("Deu certo", res.data);
localStorage.setItem("token", res.data.token);
- if (res.data.user.hasAddress === true){
- navigate.push("/")
- /* goToHome(navigate); */
+ if (res.data.user.hasAddress === true) {
+ goToHome(navigate)
} else {
- navigate.push("user/adicionar-endereco")
+ goToRegistrarEndereço(navigate)
}
clear();
-
- /* setRightButtonText("Logout"); */
- /* setIsLoading(false) */
})
.catch((err) => {
console.log("Deu erro", err);
alert(err.response.data.message);
- /* setIsLoading(false) */
});
};
//Requisição para criar um login e ir para a criação de endereços
-export const signUp = (body, clear, navigate/* setRightButtonText */) => {
+export const signUp = (body, clear, navigate /* setRightButtonText */) => {
axios
.post(`${BASE_URL}/signup`, body)
.then((res) => {
@@ -40,7 +30,7 @@ export const signUp = (body, clear, navigate/* setRightButtonText */) => {
localStorage.setItem("token", res.data.token);
alert("Cadastro realizado com sucesso");
clear();
- goToRegistrarEndereço(navigate);
+ goToRegistrarEndereço(navigate);
})
.catch((err) => {
console.log("Deu erro", err.response);
@@ -48,7 +38,7 @@ export const signUp = (body, clear, navigate/* setRightButtonText */) => {
});
};
-//requisição para registrar endereço
+//Requisição para registrar endereço
export const registerAddres = (body, clear, navigate) => {
axios
.put(`${BASE_URL}/address`, body, {
From 45394b154819955b3f1f07eab637f3b675dac5b9 Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Tue, 17 May 2022 10:55:50 -0300
Subject: [PATCH 18/51] =?UTF-8?q?Fiz=20o=20bot=C3=A3o=20do=20footer?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/App.js | 17 ++++++++---------
src/components/Footer/Footer.js | 9 +++++++--
src/pages/HomePage/Home.jsx | 2 ++
src/router/Router.js | 4 ++--
4 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/src/App.js b/src/App.js
index a209d22..d9a1586 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,15 +1,14 @@
-import React from 'react';
-import Router from './router/Router';
-import Footer from './components/Footer/Footer';
-
+import React from "react";
+import Router from "./router/Router";
+import Footer from "./components/Footer/Footer";
+import { BrowserRouter } from "react-router-dom";
function App() {
return (
-
-
LabeFood
-
-
-
+
+
+
+
);
}
diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js
index 47e5739..aa956d7 100644
--- a/src/components/Footer/Footer.js
+++ b/src/components/Footer/Footer.js
@@ -3,17 +3,22 @@ import home from "../../assets/img/home.jpg"
import carrinho from "../../assets/img/carrinho.jpg"
import { ButtonFooter, ContainerFooter } from './styleFooter';
import React from "react";
+import { useNavigate } from "react-router-dom";
+import { goToHome, goToProfile } from "../../router/coordinator";
const Footer = () => {
+ const navigate = useNavigate()
+
+
return (
-
+
goToHome(navigate)} alt='icone-home' src={home} />
-
+
goToProfile(navigate)} alt='icone-perfil' src={profile} />
)
}
diff --git a/src/pages/HomePage/Home.jsx b/src/pages/HomePage/Home.jsx
index 5f83de3..e7cccfa 100644
--- a/src/pages/HomePage/Home.jsx
+++ b/src/pages/HomePage/Home.jsx
@@ -1,5 +1,6 @@
import React from "react";
import { useNavigate } from "react-router-dom";
+import Footer from "../../components/Footer/Footer";
import { goToLoginPage } from "../../router/coordinator";
const Home = () => {
@@ -13,6 +14,7 @@ const Home = () => {
);
};
diff --git a/src/router/Router.js b/src/router/Router.js
index a60679d..480c8b0 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -10,7 +10,7 @@ import RegisterAddres from "../pages/RegisterAddres/RegisterAddres";
const Router = () => {
return (
-
+
} />
} />
@@ -20,7 +20,7 @@ const Router = () => {
} />
{/* */}
-
+
);
};
export default Router;
From 0414f24b39f829051ae0e3f252dfaf92b867ec63 Mon Sep 17 00:00:00 2001
From: servuloccsilva
Date: Tue, 17 May 2022 11:11:06 -0300
Subject: [PATCH 19/51] Card Restaurantes iniciado e renderizados na Home
---
.../CardRestaurante/CardRestaurante.js | 20 +++
src/components/CardRestaurante/styled.js | 50 +++++++
src/pages/HomePage/Home.jsx | 128 ++++++++++++++++--
3 files changed, 185 insertions(+), 13 deletions(-)
create mode 100644 src/components/CardRestaurante/CardRestaurante.js
create mode 100644 src/components/CardRestaurante/styled.js
diff --git a/src/components/CardRestaurante/CardRestaurante.js b/src/components/CardRestaurante/CardRestaurante.js
new file mode 100644
index 0000000..3951cc3
--- /dev/null
+++ b/src/components/CardRestaurante/CardRestaurante.js
@@ -0,0 +1,20 @@
+import React from 'react'
+import { Banner, Botao, Conteudo, MainContainer } from './styled'
+
+const CardRestaurante = (props) => {
+ console.log(props)
+ return (
+
+
+
+ {props.nome}
+ Oiieieieiee
+ {/* {props.restaurante.description}
*/}
+ {/* R${props.restaurante.price}0
*/}
+
+ adicionar
+
+ )
+}
+
+export default CardRestaurante
\ No newline at end of file
diff --git a/src/components/CardRestaurante/styled.js b/src/components/CardRestaurante/styled.js
new file mode 100644
index 0000000..c99c219
--- /dev/null
+++ b/src/components/CardRestaurante/styled.js
@@ -0,0 +1,50 @@
+import styled from 'styled-components'
+
+export const MainContainer = styled.div`
+ display: flex;
+ align-items: center;
+ width: 95%;
+ min-height: 120px;
+ background-color: white;
+ border: 1px solid #C7C7CC;
+ border-radius: 16px;
+ margin: 5px 0;
+ word-wrap: break-word;
+ color: #D1D1D6;
+ position: relative;
+ p{
+ margin: 4px 0px;
+ margin-left: 10px;
+ }
+ .titulo{
+ color: #E86E5A;
+ }
+ .preco{
+ color: black;
+ }
+`
+export const Conteudo = styled.div`
+ display: flex;
+ flex-flow: column;
+ width: 65%;
+`
+export const Banner = styled.div`
+ display: flex;
+ flex-flow: column;
+ width: 35%;
+ height: 120px;
+ border-radius: 15px 0px 0px 15px;
+ background-image: url(${(props) => props.src});
+ background-position: center;
+ background-size: cover;
+`
+export const Botao = styled.button`
+ display: flex;
+ flex-flow: column;
+ align-self: flex-end;
+ position: absolute;
+ right: 0%;
+ border-radius: 15px 0px 15px 0px;
+ border: 1px solid black;
+ font-family: 'Roboto', sans-serif;
+`
\ No newline at end of file
diff --git a/src/pages/HomePage/Home.jsx b/src/pages/HomePage/Home.jsx
index 5f83de3..1cfd8f2 100644
--- a/src/pages/HomePage/Home.jsx
+++ b/src/pages/HomePage/Home.jsx
@@ -1,20 +1,122 @@
-import React from "react";
+import axios from "axios"
+import React, { useEffect, useState } from "react";
+import { BASE_URL } from "../../constants/BASE_URL"
+import styled from "styled-components";
import { useNavigate } from "react-router-dom";
import { goToLoginPage } from "../../router/coordinator";
+import CardRestaurante from "../../components/CardRestaurante/CardRestaurante"
+
+
+
+const MainContainerFeed = styled.div`
+ width: 100%;
+ max-width: 350px;
+ /* background-color: red; */
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+`
+const Cards = styled.div`
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin-top: 24px;
+`
+
+const CreatingPost = styled.div`
+`
+
+// const CardRestaurante = styled.div`
+// `
+
+// let iconStyles = { color: "#7869bf", fontSize: "2em", cursor: "pointer" };
+
+
+// ----------------------------------------------------------------------------
+
+
const Home = () => {
- const navigate = useNavigate();
+
+ const [restaurantes, setRestaurantes] = useState([])
+
+ const navigate = useNavigate();
+
+ const onClickLogin = () => {
+ goToLoginPage(navigate);
+ };
+
+
+ useEffect(()=>{
+ getRestaurants()
+ },[])
+
+
+ const getRestaurants = () => {
+ const tokenTeste = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk1aEE1U0VyY0Q0ZzJYSVhxb01qIiwibmFtZSI6IlBhYmxvIiwiZW1haWwiOiJwYWJsb0BvaS5jb20iLCJjcGYiOiIxMTEuMTExLjExMS0xOCIsImhhc0FkZHJlc3MiOnRydWUsImFkZHJlc3MiOiJSLiBBZm9uc28gQnJheiwgMTc3LCA3MSAtIFZpbGEgTi4gQ29uY2Vpw6fDo28iLCJpYXQiOjE2NTI3MjQ5MDl9.fPCYPmYhhktxwzCFT0qC92lCq41MwbarBcISKWCBM0w"
+
+ const headers = {
+ headers: {
+ // auth: localStorage.getItem('token')
+ auth: tokenTeste
+ }
+ }
+ axios.get(`${BASE_URL}/restaurants`, headers)
+ .then((res)=>{
+ setRestaurantes(res.data.restaurants)
+ console.log(res.data)
+ })
+ .catch((res)=>{
+ console.log(res);
+ })
+ }
+
+
+ const mapeandoRestaurantes = restaurantes.map((restaurante)=>{
+ return (
+
+ )
+ })
+
+
+console.log(restaurantes)
+ return (
+
+
+
+
+
+ {mapeandoRestaurantes.length>0 ? mapeandoRestaurantes: Loading ...
}
+ Home
+
+ {/* {restaurantes.length>0 ? restaurantes.map((restaurante)=>{
+ return (
+
+ )
+ }) : Loading ...
} */}
- const onClickLogin = () => {
- goToLoginPage(navigate);
- };
- return (
-
- );
-};
+ {/* {restaurantes.name}
*/}
+
+
+
+
+ )
+}
-export default Home;
+export default Home
\ No newline at end of file
From 4e8d71aa152a679458cbc888ec7e9c0a2a2557ba Mon Sep 17 00:00:00 2001
From: Pablo Gomes
Date: Tue, 17 May 2022 12:39:25 -0300
Subject: [PATCH 20/51] =?UTF-8?q?funcionalidades=20de=20edi=C3=A7ao=20de?=
=?UTF-8?q?=20dados=20nominais=20ok?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package-lock.json | 15 ++++
package.json | 1 +
src/pages/Profile/AddresEdditPage.jsx | 9 ++
src/pages/Profile/CardOrderHistory.jsx | 1 -
src/pages/Profile/Profile.jsx | 112 ++++++++++++-------------
src/pages/Profile/ProfileEdditPage.jsx | 68 +++++++++++++++
src/pages/Profile/styled.js | 57 +++++++++++--
src/router/Router.js | 6 +-
src/router/coordinator.js | 6 ++
9 files changed, 209 insertions(+), 66 deletions(-)
create mode 100644 src/pages/Profile/AddresEdditPage.jsx
create mode 100644 src/pages/Profile/ProfileEdditPage.jsx
diff --git a/package-lock.json b/package-lock.json
index bc75a80..2e75c79 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,7 @@
"axios": "^0.27.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
+ "react-icons": "^4.3.1",
"react-router-dom": "^6.3.0",
"react-scripts": "3.4.1",
"styled-components": "^5.3.5"
@@ -13553,6 +13554,14 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz",
"integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA=="
},
+ "node_modules/react-icons": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz",
+ "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -28783,6 +28792,12 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz",
"integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA=="
},
+ "react-icons": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz",
+ "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==",
+ "requires": {}
+ },
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
diff --git a/package.json b/package.json
index 5a58c3c..28d5a7e 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
"axios": "^0.27.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
+ "react-icons": "^4.3.1",
"react-router-dom": "^6.3.0",
"react-scripts": "3.4.1",
"styled-components": "^5.3.5"
diff --git a/src/pages/Profile/AddresEdditPage.jsx b/src/pages/Profile/AddresEdditPage.jsx
new file mode 100644
index 0000000..00c47ee
--- /dev/null
+++ b/src/pages/Profile/AddresEdditPage.jsx
@@ -0,0 +1,9 @@
+import React from 'react'
+
+const AddresEdditPage = () => {
+ return (
+ AddresEdditPage
+ )
+}
+
+export default AddresEdditPage
\ No newline at end of file
diff --git a/src/pages/Profile/CardOrderHistory.jsx b/src/pages/Profile/CardOrderHistory.jsx
index 42b4da8..36d1c73 100644
--- a/src/pages/Profile/CardOrderHistory.jsx
+++ b/src/pages/Profile/CardOrderHistory.jsx
@@ -30,7 +30,6 @@ const CardOrderHistory = (props) => {
getOrderHistory()
},[])
-
return (
diff --git a/src/pages/Profile/Profile.jsx b/src/pages/Profile/Profile.jsx
index bdfdc53..ddb9cc9 100644
--- a/src/pages/Profile/Profile.jsx
+++ b/src/pages/Profile/Profile.jsx
@@ -1,76 +1,70 @@
import axios from 'axios'
import React, { useEffect, useState } from 'react'
-import {BASE_URL} from '../../constants/BASE_URL'
-import useRequestData from '../../hooks/useRequestData'
+import { BASE_URL } from '../../constants/BASE_URL'
import CardOrderHistory from "../Profile/CardOrderHistory"
-import { CardName,CardAddress,Divgrey,DivHistory} from './styled'
+import { MainProfile, ContainerCardName, ContainerButtonName, CardName, ContainerCardAddress, CardAddress, ContainerButtonAdress, Divgrey, DivHistory } from './styled'
+import { ImPencil } from "react-icons/im"
+import { goToEdditAddress,goToEdditProfile } from '../../router/coordinator'
+import { useNavigate } from 'react-router-dom'
const Profile = () => {
const [profile, setProfile] = useState({})
- const [address, setAddress] = useState({})
+ const navigate = useNavigate()
-const getProfile =()=>{
-const headers = {
- headers: {
- auth : localStorage.getItem('token')
- }
-}
-axios
-.get(`${BASE_URL}/profile`, headers)
-.then((res)=>{
-setProfile(res.data.user)
-})
-.catch((err)=>{
- console.log(err)
-})
-}
-
-const getAddress =()=>{
- const headers = {
- headers: {
- auth : localStorage.getItem('token')
+ const getProfile = () => {
+ const headers = {
+ headers: {
+ auth: localStorage.getItem('token')
+ }
}
+ axios
+ .get(`${BASE_URL}/profile`, headers)
+ .then((res) => {
+ setProfile(res.data.user)
+ })
+ .catch((err) => {
+ console.log(err)
+ })
}
- axios
- .get(`${BASE_URL}/profile/address`, headers)
- .then((res)=>{
- setAddress(res.data.address)
- console.log(res.data.address)
- })
- .catch((err)=>{
- console.log(err)
- })
- }
- useEffect(()=>{
- getProfile()
- getAddress()
- },[])
-
+
+ useEffect(() => {
+ getProfile()
+ }, [])
-
return (
- <>
-
- {profile.name}
- {profile.email}
- {profile.cpf}
-
-
-
- Endereço Casdastrado
-
-
- Histórico de pedidos
-
-
-
-
-
-
- >
+
+
+
+ {profile.name && profile.name}
+ {profile.email && profile.email}
+ {profile.cpf && profile.cpf}
+
+
+ goToEdditProfile(navigate)} />
+
+
+
+
+
+ Endereço Casdastrado
+ {profile.address && profile.address}
+
+
+ goToEdditProfile(navigate)} />
+
+
+ Histórico de pedidos
+
+
+
+
+
+
+
+
)
}
export default Profile
\ No newline at end of file
diff --git a/src/pages/Profile/ProfileEdditPage.jsx b/src/pages/Profile/ProfileEdditPage.jsx
new file mode 100644
index 0000000..10a6860
--- /dev/null
+++ b/src/pages/Profile/ProfileEdditPage.jsx
@@ -0,0 +1,68 @@
+import React from 'react'
+import {ContainerProfileEddit, ProfileEdditForm} from "./styled"
+import useForm from "../../hooks/useForm"
+import {BASE_URL} from "../../constants/BASE_URL"
+import useRequestData from "../../hooks/useRequestData"
+import axios from 'axios'
+
+const ProfileEdditPage = () => {
+ /* const [perfil, getPerfil] = useRequestData({},`${BASE_URL}/profile`)
+ */
+ const [form,onChange,clear] = useForm({name:"", email:"",cpf:""})
+ console.log(form)
+
+const putUpdateProfile =()=>{
+ const headers = {
+ headers: {
+ auth: localStorage.getItem('token')
+ }
+ }
+axios
+.put(`${BASE_URL}/profile`,form, headers)
+.then((res)=>{
+ clear()
+ console.log(res)
+})
+.catch((err)=>{
+ console.log(err)
+})
+
+}
+
+
+ const onSubmit =(e)=>{
+ e.preventDefault()
+ putUpdateProfile()
+ console.log("oi")
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default ProfileEdditPage
\ No newline at end of file
diff --git a/src/pages/Profile/styled.js b/src/pages/Profile/styled.js
index 5a3e7ab..3bb85eb 100644
--- a/src/pages/Profile/styled.js
+++ b/src/pages/Profile/styled.js
@@ -1,13 +1,41 @@
import styled from "styled-components"
-export const CardName =styled.div`
+export const MainProfile=styled.main`
+display: flex;
+flex-direction: column;
+width: 100%;
+
+`
+export const ContainerCardName =styled.div`
+display: flex;
+justify-content: space-between;
+`
+export const CardName =styled.div`
+width: 90%;
+`
+export const ContainerButtonName=styled.div`
+width: 10%;
+padding-top:16px;
+align-items: center;
+`
+export const ContainerCardAddress =styled.div`
+display: flex;
`
export const CardAddress =styled.div`
display: flex;
+flex-direction: column;
background-color:#eeeeee ;
-
+width: 90%;
+span{
+ color:#c7c7cc
+}
+`
+export const ContainerButtonAdress =styled.div`
+background-color:#eeeeee ;
+width: 10%;
+padding-top:20px;
`
export const DivHistory =styled.div`
display: flex;
@@ -19,9 +47,12 @@ align-items: center;
export const Divgrey =styled.div`
border: 0.5px solid #8e8e93;
-width: 91%;
-margin: 1em;
+display: flex;
+width: 95%;
+margin-bottom: 1em;
+
`
+// component CardOrder
export const ContainerOrderHistory=styled.div`
display: flex;
flex-direction: column;
@@ -29,4 +60,20 @@ height: 15vh;
width: 90%;
border: 2px solid #c6c6c6;
border-radius:12px;
-`
\ No newline at end of file
+`
+
+//Profile eddit page
+
+export const ContainerProfileEddit=styled.main`
+display: flex;
+flex-direction: column;
+justify-content: center;
+align-items: center;
+width:100%;
+min-height: 80vh;
+`
+export const ProfileEdditForm=styled.form`
+display: flex;
+flex-direction: column;
+`
+
diff --git a/src/router/Router.js b/src/router/Router.js
index 644e3f2..1a7291b 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -7,6 +7,9 @@ import LoginPage from "../pages/LoginPage/LoginPage";
import Profile from "../pages/Profile/Profile";
import SignupPage from "../pages/SignUpPage/SignUpPage";
import RegisterAddres from "../pages/RegisterAddres/RegisterAddres";
+import ProfileEdditPage from "../pages/Profile/ProfileEdditPage";
+import AddresEdditPage from "../pages/Profile/AddresEdditPage";
+
const Router = () => {
return (
@@ -17,8 +20,9 @@ const Router = () => {
} />
} />
} />
+ } />
+ } />
} />
- {/* */}
);
diff --git a/src/router/coordinator.js b/src/router/coordinator.js
index e7718b0..56bf6d3 100644
--- a/src/router/coordinator.js
+++ b/src/router/coordinator.js
@@ -34,5 +34,11 @@ export const goToRegistrarEndereço = (navigate) => {
export const goToBack = (navigate) => {
navigate(-1)
}
+export const goToEdditProfile = (navigate) => {
+ navigate("/user/profile/eddit-profile")
+}
+export const goToEdditAddress = (navigate) => {
+ navigate("/user/profile/eddit-address")
+}
From a693a940136b978eba6fd85d36ed288b526bebb2 Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Tue, 17 May 2022 12:42:08 -0300
Subject: [PATCH 21/51] =?UTF-8?q?pequena=20altera=C3=A7=C3=A3o?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/HomePage/Home.jsx | 5 -----
1 file changed, 5 deletions(-)
diff --git a/src/pages/HomePage/Home.jsx b/src/pages/HomePage/Home.jsx
index 70ae6e9..1e69518 100644
--- a/src/pages/HomePage/Home.jsx
+++ b/src/pages/HomePage/Home.jsx
@@ -7,8 +7,6 @@ import Footer from "../../components/Footer/Footer";
import { goToLoginPage } from "../../router/coordinator";
import CardRestaurante from "../../components/CardRestaurante/CardRestaurante"
-
-
const MainContainerFeed = styled.div`
width: 100%;
max-width: 350px;
@@ -38,7 +36,6 @@ const CreatingPost = styled.div`
// ----------------------------------------------------------------------------
-
const Home = () => {
const [restaurantes, setRestaurantes] = useState([])
@@ -74,7 +71,6 @@ const Home = () => {
})
}
-
const mapeandoRestaurantes = restaurantes.map((restaurante)=>{
return (
{
)
})
-
console.log(restaurantes)
return (
From e45c9193e68ccee138ffc07517530fd75764a70b Mon Sep 17 00:00:00 2001
From: Pablo Gomes
Date: Tue, 17 May 2022 12:49:24 -0300
Subject: [PATCH 22/51] =?UTF-8?q?atualizei=20o=20botao=20de=20ir=20pra=20p?=
=?UTF-8?q?agina=20de=20edi=C3=A7ao=20de=20endere=C3=A7o?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/pages/Profile/Profile.jsx | 2 +-
src/router/Router.js | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/pages/Profile/Profile.jsx b/src/pages/Profile/Profile.jsx
index ddb9cc9..97506c5 100644
--- a/src/pages/Profile/Profile.jsx
+++ b/src/pages/Profile/Profile.jsx
@@ -53,7 +53,7 @@ const Profile = () => {
{profile.address && profile.address}
- goToEdditProfile(navigate)} />
+ goToEdditAddress(navigate)} />
Histórico de pedidos
diff --git a/src/router/Router.js b/src/router/Router.js
index 46cb906..297fb76 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -24,7 +24,6 @@ const Router = () => {
} />
} />
} />
-
);
From c7348ef11424aa0dad9d8c24b96b8a08ac5803c0 Mon Sep 17 00:00:00 2001
From: willmarques09
Date: Tue, 17 May 2022 13:45:39 -0300
Subject: [PATCH 23/51] carrinho
---
src/App.js | 18 +++--
src/components/Footer/Footer.js | 23 ++++--
src/components/Footer/styleFooter.js | 5 ++
src/hooks/useRequestData.js | 2 +-
src/pages/cartPage/CartPage.js | 80 +++++++++++++++++++++
src/pages/cartPage/styled.js | 100 +++++++++++++++++++++++++++
src/router/Router.js | 12 +++-
src/router/coordinator.js | 4 ++
8 files changed, 223 insertions(+), 21 deletions(-)
create mode 100644 src/pages/cartPage/CartPage.js
create mode 100644 src/pages/cartPage/styled.js
diff --git a/src/App.js b/src/App.js
index a209d22..b49640c 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,16 +1,14 @@
-import React from 'react';
-import Router from './router/Router';
-import Footer from './components/Footer/Footer';
-
+import React from "react";
+import Router from "./router/Router";
+import Footer from "./components/Footer/Footer";
+import { BrowserRouter } from "react-router-dom";
function App() {
return (
-
-
LabeFood
-
-
-
+
+
+
);
}
-export default App;
+export default App;
\ No newline at end of file
diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js
index 47e5739..14b103b 100644
--- a/src/components/Footer/Footer.js
+++ b/src/components/Footer/Footer.js
@@ -1,19 +1,28 @@
-import profile from "../../assets/img/profile.jpg";
-import home from "../../assets/img/home.jpg"
-import carrinho from "../../assets/img/carrinho.jpg"
-import { ButtonFooter, ContainerFooter } from './styleFooter';
import React from "react";
+import { useNavigate } from "react-router-dom";
+import carrinho from "../../assets/img/carrinho.jpg";
+import home from "../../assets/img/home.jpg";
+import profile from "../../assets/img/profile.jpg";
+import { goToHome, goToProfile } from '../../router/coordinator';
+import { ContainerFooter } from './styleFooter';
const Footer = () => {
+
+ const navigate = useNavigate();
+
+
+
+
+
return (
-
-
-
+
goToHome(navigate)} alt='icone-home' src={home} />
+
+
goToProfile(navigate)} alt='icone-perfil' src={profile} />
)
}
diff --git a/src/components/Footer/styleFooter.js b/src/components/Footer/styleFooter.js
index 508d020..526dfbd 100644
--- a/src/components/Footer/styleFooter.js
+++ b/src/components/Footer/styleFooter.js
@@ -16,3 +16,8 @@ export const ContainerFooter = styled.div`
}
`
+export const ButtonFooter = styled(Button)`
+ width: 120px;
+ height: 49px;
+ padding: 10px 46px 9px 47px;
+`
\ No newline at end of file
diff --git a/src/hooks/useRequestData.js b/src/hooks/useRequestData.js
index 9a107cc..143b62a 100644
--- a/src/hooks/useRequestData.js
+++ b/src/hooks/useRequestData.js
@@ -26,4 +26,4 @@ const useRequestData = (initialData, url) => {
return [data, getData]
}
-export default useRequestData
\ No newline at end of file
+export default useRequestData;
\ No newline at end of file
diff --git a/src/pages/cartPage/CartPage.js b/src/pages/cartPage/CartPage.js
new file mode 100644
index 0000000..59fb2e9
--- /dev/null
+++ b/src/pages/cartPage/CartPage.js
@@ -0,0 +1,80 @@
+import axios from "axios";
+import React from "react";
+import { BASE_URL } from "../../constants/BASE_URL";
+import {
+ Button, CartContainer,
+ ContainerAddress, ContainerH5,
+ ContainerPrice,
+ ContainerTotal, FormOfPayment, FormPayment, H5Styled, InputStyled, LabelStyled, PAddress
+} from "../cartPage/styled";
+
+
+
+const CartPage = () => {
+
+
+
+ const confirmPedido = () => {
+ axios
+ .post(`${BASE_URL}/restaurants/order` )
+ .then( () => {
+ alert("pedido confirmado")
+ })
+ .catch( (err) => {
+ alert(err.response.data.message)
+ })
+ }
+
+
+
+
+
+ return (
+
+
+
Meu carrinho
+
+
+
+ Endereço de entrega
+
+
+
+
+ carrinho vazio
+
+
+
+
+ SUBTOTAL
+
+
+
+
+
+
+
+ Forma de pagamento
+
+
+
+
+ Dinheiro
+
+
+
+
+
+ Cartão de crédito
+
+
+
+
+
+
+
+
+ );
+};
+
+export default CartPage;
\ No newline at end of file
diff --git a/src/pages/cartPage/styled.js b/src/pages/cartPage/styled.js
new file mode 100644
index 0000000..7f534c9
--- /dev/null
+++ b/src/pages/cartPage/styled.js
@@ -0,0 +1,100 @@
+import styled from 'styled-components';
+
+export const CartContainer = styled.div`
+display: flex;
+align-items: center;
+flex-direction: column;
+gap: 30px;
+`
+export const ContainerAddress = styled.div`
+display: flex;
+align-items: left;
+flex-direction: column;
+gap: 10px;
+justify-content: center;
+background-color: #e5e4e2;
+width: 100%;
+height: 10vh;
+padding: 10px;
+`
+
+export const PAddress = styled.p`
+color: lightgrey;
+font-size: 16px;
+font-weight: bold;
+font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+letter-spacing: 1px;
+margin-left: 10px;
+gap: 5px;
+`
+
+export const Address = styled.p`
+color: black;
+font-size: 16px;
+font-weight: bold;
+font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+margin-left: 10px;
+`
+
+export const ContainerTotal = styled.div`
+display: flex;
+gap: 300px;
+`
+export const ContainerH5 = styled.div`
+display: flex;
+align-items: left;
+justify-content: left;
+`
+
+export const H5Styled = styled.h5`
+color: grey;
+`
+
+export const ContainerPrice = styled.div`
+display: flex;
+align-items: flex-end;
+justify-content: center;
+flex-direction: column;
+width: 60%;
+`
+
+
+export const FormOfPayment = styled.p`
+width: 96%;
+border-bottom: 2px solid grey;
+padding-bottom: 5px;
+font-weight: 550;
+`
+export const FormPayment = styled.form`
+display: flex;
+align-items: flex-start;
+justify-content: center;
+flex-direction: column;
+width: 96%;
+gap: 5px;
+`
+
+export const InputStyled = styled.input`
+margin-right: 5px;
+`
+
+export const LabelStyled = styled.label`
+font-weight: bold;
+gap: 10px;
+`
+export const Button = styled.button`
+outline: none;
+width: 60%;
+height: 5vh;
+text-decoration: none;
+color: black;
+background-color: #e8222e;
+border: none;
+font-weight: bold;
+font-size: 14px;
+padding: 5px;
+font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+&&:hover{
+ background-color: #d12310;
+}
+`
diff --git a/src/router/Router.js b/src/router/Router.js
index 644e3f2..201a278 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -1,5 +1,5 @@
import React from "react";
-import { Routes, Route, BrowserRouter } from "react-router-dom";
+import { Routes, Route } from "react-router-dom";
import Home from "../pages/HomePage/Home";
import Restaurante from "../pages/Restaurante/Restaurante";
@@ -7,10 +7,11 @@ import LoginPage from "../pages/LoginPage/LoginPage";
import Profile from "../pages/Profile/Profile";
import SignupPage from "../pages/SignUpPage/SignUpPage";
import RegisterAddres from "../pages/RegisterAddres/RegisterAddres";
+import CartPage from "../pages/cartPage/CartPage"
const Router = () => {
return (
-
+
} />
} />
@@ -19,8 +20,13 @@ const Router = () => {
} />
} />
{/* */}
+
+
+
+
+ } />
-
+
);
};
export default Router;
diff --git a/src/router/coordinator.js b/src/router/coordinator.js
index e7718b0..623f3a2 100644
--- a/src/router/coordinator.js
+++ b/src/router/coordinator.js
@@ -31,6 +31,10 @@ export const goToRegistrarEndereço = (navigate) => {
navigate("user/adicionar-endereco")
}
+export const goToCartPage = (navigate) => {
+ navigate("/cart")
+}
+
export const goToBack = (navigate) => {
navigate(-1)
}
From e3e68ed580f53b72b74da9d669d7f7f91f18b747 Mon Sep 17 00:00:00 2001
From: servuloccsilva
Date: Tue, 17 May 2022 14:07:12 -0300
Subject: [PATCH 24/51] Cards do restaurante quase completos
---
.../CardRestaurante/CardRestaurante.js | 6 ++---
src/components/CardRestaurante/styled.js | 18 +++++++-------
src/pages/HomePage/Home.jsx | 24 ++++++-------------
3 files changed, 20 insertions(+), 28 deletions(-)
diff --git a/src/components/CardRestaurante/CardRestaurante.js b/src/components/CardRestaurante/CardRestaurante.js
index 3951cc3..f1bed58 100644
--- a/src/components/CardRestaurante/CardRestaurante.js
+++ b/src/components/CardRestaurante/CardRestaurante.js
@@ -8,11 +8,11 @@ const CardRestaurante = (props) => {
{props.nome}
- Oiieieieiee
- {/* {props.restaurante.description}
*/}
+
+ Frete: R${props.shipping}
+ {(props.deliveryTime)} min
{/* R${props.restaurante.price}0
*/}
- adicionar
)
}
diff --git a/src/components/CardRestaurante/styled.js b/src/components/CardRestaurante/styled.js
index c99c219..cb3a143 100644
--- a/src/components/CardRestaurante/styled.js
+++ b/src/components/CardRestaurante/styled.js
@@ -2,16 +2,18 @@ import styled from 'styled-components'
export const MainContainer = styled.div`
display: flex;
+ flex-direction: column;
align-items: center;
- width: 95%;
- min-height: 120px;
+ width: 99%;
+ max-width: px;
+ /* max-height: 250px; */
background-color: white;
- border: 1px solid #C7C7CC;
+ border: 0.8px solid #C7C7CC;
border-radius: 16px;
- margin: 5px 0;
+ /* margin: 5px 0; */
word-wrap: break-word;
color: #D1D1D6;
- position: relative;
+ /* position: relative; */
p{
margin: 4px 0px;
margin-left: 10px;
@@ -26,14 +28,14 @@ export const MainContainer = styled.div`
export const Conteudo = styled.div`
display: flex;
flex-flow: column;
- width: 65%;
+ width: 100%;
`
export const Banner = styled.div`
display: flex;
flex-flow: column;
- width: 35%;
+ width: 100%;
height: 120px;
- border-radius: 15px 0px 0px 15px;
+ border-radius: 16px 16px 0px 0px;
background-image: url(${(props) => props.src});
background-position: center;
background-size: cover;
diff --git a/src/pages/HomePage/Home.jsx b/src/pages/HomePage/Home.jsx
index 1cfd8f2..d0d86bc 100644
--- a/src/pages/HomePage/Home.jsx
+++ b/src/pages/HomePage/Home.jsx
@@ -23,6 +23,8 @@ const Cards = styled.div`
justify-content: center;
align-items: center;
margin-top: 24px;
+ width: 100%;
+
`
const CreatingPost = styled.div`
@@ -81,6 +83,9 @@ const Home = () => {
restaurante = {restaurante}
nome = {restaurante.name}
logo = {restaurante.logoUrl}
+ description = {restaurante.description}
+ shipping = {restaurante.shipping}
+ deliveryTime = {restaurante.deliveryTime}
/>
)
})
@@ -96,23 +101,8 @@ console.log(restaurantes)
{mapeandoRestaurantes.length>0 ? mapeandoRestaurantes: Loading ...
}
Home
- {/* {restaurantes.length>0 ? restaurantes.map((restaurante)=>{
- return (
-
- )
- }) : Loading ...
} */}
-
-
- {/* {restaurantes.name}
*/}
-
+
+
From 1740b1dea761d89bb9a476cf3944dd6e27d1d301 Mon Sep 17 00:00:00 2001
From: Pablo Gomes
Date: Tue, 17 May 2022 14:15:45 -0300
Subject: [PATCH 25/51] linkei a pagina de cadastros ao profile
---
src/pages/Profile/AddresEdditPage.jsx | 9 ---------
src/pages/Profile/Profile.jsx | 4 ++--
src/router/Router.js | 6 +-----
3 files changed, 3 insertions(+), 16 deletions(-)
delete mode 100644 src/pages/Profile/AddresEdditPage.jsx
diff --git a/src/pages/Profile/AddresEdditPage.jsx b/src/pages/Profile/AddresEdditPage.jsx
deleted file mode 100644
index 00c47ee..0000000
--- a/src/pages/Profile/AddresEdditPage.jsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import React from 'react'
-
-const AddresEdditPage = () => {
- return (
- AddresEdditPage
- )
-}
-
-export default AddresEdditPage
\ No newline at end of file
diff --git a/src/pages/Profile/Profile.jsx b/src/pages/Profile/Profile.jsx
index 97506c5..50a5eb1 100644
--- a/src/pages/Profile/Profile.jsx
+++ b/src/pages/Profile/Profile.jsx
@@ -4,7 +4,7 @@ import { BASE_URL } from '../../constants/BASE_URL'
import CardOrderHistory from "../Profile/CardOrderHistory"
import { MainProfile, ContainerCardName, ContainerButtonName, CardName, ContainerCardAddress, CardAddress, ContainerButtonAdress, Divgrey, DivHistory } from './styled'
import { ImPencil } from "react-icons/im"
-import { goToEdditAddress,goToEdditProfile } from '../../router/coordinator'
+import { goToRegistrarEndereço,goToEdditProfile } from '../../router/coordinator'
import { useNavigate } from 'react-router-dom'
const Profile = () => {
@@ -53,7 +53,7 @@ const Profile = () => {
{profile.address && profile.address}
- goToEdditAddress(navigate)} />
+ goToRegistrarEndereço(navigate)} />
Histórico de pedidos
diff --git a/src/router/Router.js b/src/router/Router.js
index dd27adc..44c8b81 100644
--- a/src/router/Router.js
+++ b/src/router/Router.js
@@ -8,8 +8,6 @@ import SignupPage from "../pages/SignUpPage/SignUpPage";
import RegisterAddres from "../pages/RegisterAddres/RegisterAddres";
import CartPage from "../pages/cartPage/CartPage"
import ProfileEdditPage from "../pages/Profile/ProfileEdditPage";
-import AddresEdditPage from "../pages/Profile/AddresEdditPage";
-
const Router = () => {
@@ -22,10 +20,8 @@ const Router = () => {
} />
} />
} />
- } />
- } />
+ } />
} />
- } />
);
From d0613a4c2cf380ea42a4dac292a5f1553244510c Mon Sep 17 00:00:00 2001
From: Rodrigo Santos
Date: Tue, 17 May 2022 14:35:50 -0300
Subject: [PATCH 26/51] =?UTF-8?q?Fiz=20as=20estiliza=C3=A7=C3=B5es=20do=20?=
=?UTF-8?q?login,=20signup=20e=20cadastro=20de=20endere=C3=A7o=20usando=20?=
=?UTF-8?q?MUI?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/assets/img/logo.png | Bin 0 -> 25903 bytes
src/pages/LoginPage/LoginForm.js | 24 ++++--
src/pages/LoginPage/styled.js | 7 +-
src/pages/RegisterAddres/AddresForm.js | 73 ++++++++++------
src/pages/RegisterAddres/styled.js | 7 +-
src/pages/SignUpPage/SignUpForm.js | 111 ++++++++++++++++++++-----
src/pages/SignUpPage/styled.js | 46 ++--------
7 files changed, 177 insertions(+), 91 deletions(-)
create mode 100644 src/assets/img/logo.png
diff --git a/src/assets/img/logo.png b/src/assets/img/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2c6b2df617db2bdd05e027bd050fd13df39f113
GIT binary patch
literal 25903
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