Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
5129a0d
em andamento
VieiraMeloRoberta Jul 17, 2022
0f48c76
Merge pull request #1 from future4code/roberta-ecommerce
VieiraMeloRoberta Jul 17, 2022
95ea138
Alteração feita nas importações
Guilherme-Azevedo-Melim Jul 18, 2022
6351e81
Estilização
VieiraMeloRoberta Jul 19, 2022
2a8c7b8
Merge branch 'master' into roberta-ecommerce
sterx17 Jul 19, 2022
5e2a857
Merge pull request #2 from future4code/roberta-ecommerce
VieiraMeloRoberta Jul 19, 2022
801e19f
<feat>: inclusão da feature Filtro ao projeto
sterx17 Jul 20, 2022
76ef052
Estilização separada por components
Guilherme-Azevedo-Melim Jul 20, 2022
bd6a245
Merge pull request #3 from future4code/Stephany-Filtro
Guilherme-Azevedo-Melim Jul 21, 2022
4343d64
<conflict>: correção de conflitos na branch guilhermer-carrinho
sterx17 Jul 21, 2022
f8017f6
Merge pull request #4 from future4code/guilhermer-carrinho
sterx17 Jul 21, 2022
319fae2
testando commits na nova maquina
sterx17 Jul 21, 2022
c03e788
Merge pull request #5 from future4code/Stephany-Filtro
sterx17 Jul 21, 2022
4532e53
<style>:ajustes visuais nos cards
sterx17 Jul 21, 2022
bbfdbab
<style>: ajustes de estilos do card e modificação do mock de dados
sterx17 Jul 22, 2022
cb691d9
<surge> inclusão do link surge para a entrega
sterx17 Jul 23, 2022
a9ac36d
Merge pull request #7 from future4code/Stephany-Filtro
sterx17 Jul 23, 2022
e5a8c87
ordenação feita
Guilherme-Azevedo-Melim Jul 23, 2022
08341a1
<feat>: inclusão do localStorage/useEffect no carrinho
sterx17 Jul 23, 2022
fe89bcd
<fix>: correção de comportamento dos filtros
sterx17 Jul 23, 2022
24bf78e
Merge pull request #9 from future4code/Stephany-Filtro
Guilherme-Azevedo-Melim Jul 23, 2022
cba86c6
Merge pull request #8 from future4code/Stephany-LocalStorage
Guilherme-Azevedo-Melim Jul 23, 2022
190b507
Merge pull request #6 from future4code/Stephany-EstiloCards
Guilherme-Azevedo-Melim Jul 23, 2022
7989f5d
<feat>: inclusão da ordenação da Home
sterx17 Jul 24, 2022
c1cbe81
<feat> inclusão da ordenação: incompleto. ajustes no header também
sterx17 Jul 24, 2022
63258e0
Merge pull request #10 from future4code/Stephany-Ordenacao
sterx17 Jul 24, 2022
fd9e374
Update README.md
sterx17 Jul 24, 2022
c026acf
finalizado
Guilherme-Azevedo-Melim Jul 25, 2022
6a3d8f5
Merge branch 'master' into guilhermer-carrinho
sterx17 Jul 26, 2022
6a218a4
Merge pull request #11 from future4code/guilhermer-carrinho
sterx17 Jul 26, 2022
82795bd
Update README.md
sterx17 Jul 26, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
Sejam bem vindos ao Labe-commerce, esse repositório contém um esqueleto de app React e um .gitignore.
Sejam bem vindos ao AstroHouse Viagens. Esse repositório contém um mock de dados e a estrutura do website por trás da loja de viagens espaciais número 1 do Astrodev.

Link do Surge: http://taboo-use.surge.sh
15,594 changes: 15,594 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"@testing-library/user-event": "^7.1.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-scripts": "3.4.1"
"react-scripts": "3.4.1",
"styled-components": "^5.3.5"
},
"scripts": {
"start": "react-scripts start",
Expand Down
7 changes: 7 additions & 0 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
name="description"
content="Web site created using create-react-app"
/>
<!--FONT-->
<link
rel="stylesheet"
href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css"
integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p"
crossorigin="anonymous"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
Expand Down
38 changes: 0 additions & 38 deletions src/App.css
Original file line number Diff line number Diff line change
@@ -1,38 +0,0 @@
.App {
text-align: center;
}

.App-logo {
height: 40vmin;
pointer-events: none;
}

@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}

.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}

.App-link {
color: #61dafb;
}

@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
94 changes: 72 additions & 22 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,76 @@
import React from 'react';
import logo from './logo.svg';
import './App.css';
import React, { useState , useEffect} from "react";
import Produtos from "./components/Produtos/Produtos";
import Navbar from "./components/Navbar/Navbar";
import Carrinho from "./components/Carrinho/Carrinho";
import { Filtro } from "./components/Filtro/Filtro";
import lista from "./components/MockDados/MockDados";

const carrinhoLocal = JSON.parse(localStorage.getItem('carrinho') || '[] ')

const App = () => {
// código pertencente ao componente Filtro começa aqui
const [inputNome, setInputNome] = useState('')
const [inputMinValor, setInputMinValor] = useState(-Infinity)
const [inputMaxValor, setInputMaxValor] = useState(Infinity)

const [ordenacao, setOrdenacao] = useState('title')

const handleInputNome = (e) => {
setInputNome(e.target.value)
}

const handleInputMinValor = (e) => {
setInputMinValor(e.target.value)
}

const handleInputMaxValor = (e) => {
setInputMaxValor(e.target.value)
}

const handleOrdenacao = (e) =>{
setOrdenacao(e.target.value)
}

// código pertencente ao componente Filtro termina aqui

const [compra, setCompra] = useState(true);
const [carrinho, setCarrinho] = useState(carrinhoLocal);

useEffect(() => {
localStorage.setItem('carrinho', JSON.stringify(carrinho))
}, [carrinho])


const handleClick = (item) => {
if (carrinho.indexOf(item) !== -1) return;
setCarrinho([...carrinho, item]);
};

const handleChange = (item, d) => {
const escolher = carrinho.indexOf(item);
const car = carrinho;
car[escolher].qtd += d;

if (car[escolher].qtd === 0) car[escolher].qtd = 1;
setCarrinho([...car]);
};

// useEffect(() => {
// console.log("carrinho");
//}, [carrinho]);

function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
<React.Fragment>
<Navbar setCompra={setCompra} size={carrinho.length} />
<Filtro mockDeDados={lista} inputNome={inputNome} inputMinValor={inputMinValor} inputMaxValor={inputMaxValor} handleOrdenacao={handleOrdenacao} handleInputNome={handleInputNome} handleInputMinValor={handleInputMinValor} handleInputMaxValor={handleInputMaxValor}/>

{compra ? (
<Produtos inputNome={inputNome} ordenacao={ordenacao} inputMinValor={inputMinValor} inputMaxValor={inputMaxValor} handleClick={handleClick} />
) : (
<Carrinho carrinho={carrinho} setCarrinho={setCarrinho} handleChange={handleChange} />
)}
</React.Fragment>
);
}
};

export default App;
export default App;
23 changes: 23 additions & 0 deletions src/components/Card/Card.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import React from "react";
import { Cardes, BotaoCard, Preco, Identificacao, Image, Nome, Tag, Flex } from "./styled";

const Cards = ({ item, handleClick }) => {
const { id, preco, foto, nome } = item;
return (
<Cardes>
<div>
<Image src={foto} alt="" />
</div>
<Flex>
<Tag>
<Identificacao>{id}</Identificacao>
<Nome>{nome}</Nome>
<Preco>R${preco}</Preco>
</Tag>
<BotaoCard onClick={() => handleClick(item)}>Adicionar ao carrinho</BotaoCard>
</Flex>
</Cardes>
);
};

export default Cards;
58 changes: 58 additions & 0 deletions src/components/Card/styled.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import styled from "styled-components";


export const Cardes = styled.div`
width: 85%;
margin: 2vh auto;
background-color: rgba(0, 0, 0,1);
border-radius: 5px;
`
export const Flex = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: 2vh;
`;

export const Image = styled.img`
width: 100%;
border-radius: 5px;
`
export const Tag = styled.div`
display: flex;
flex-direction: row;
margin-bottom: 2vh;
`;

export const Identificacao = styled.p`
font-weight: bold;
margin: 0;
display: none;
`

export const Nome = styled.p`
color: white;
font-weight: bold;
margin: 0 5px 0 0;
`

export const Preco = styled.p`
color: white;
margin: 0;
`

export const BotaoCard = styled.button`
width: 100%;
padding: 5px 10px;
border: none;
font-weight: bold;
background-color: skyblue;
outline: none;
cursor: pointer;

:active{
background-color: black;
color: white;
}
`
52 changes: 52 additions & 0 deletions src/components/Carrinho/Carrinho.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import React, { useState, useEffect } from "react";
// import "../Styles/Carrinho.css";
import { BotaoAddItem, ContePai, ImagemItens, Itens, NomeItem, ImagemENome, Preco, Remover, FraseDoTotal, ValorTotal, ConteTotal } from "./styled";


const Carrinho = ({ carrinho, setCarrinho, handleChange }) => {
const [preco, setPreco] = useState(0);

const handleRemover = (id) => {
const car = carrinho.filter((item) => item.id !== id);
setCarrinho(car);
handlePreco();
};

const handlePreco = () => {
let selecao = 0;
carrinho.map((item) => (selecao += item.qtd * item.preco));
setPreco(selecao);
};

useEffect(() => {
handlePreco();
});

return (
<ContePai>
{carrinho.map((item) => (
<Itens key={item.id}>
<ImagemENome>
<ImagemItens src={item.foto} alt="" />
<NomeItem>{item.nome}</NomeItem>
</ImagemENome>
<div>
<BotaoAddItem onClick={() => handleChange(item, 1)}>+</BotaoAddItem>
<BotaoAddItem>{item.qtd}</BotaoAddItem>
<BotaoAddItem onClick={() => handleChange(item, -1)}>-</BotaoAddItem>
</div>
<div>
<Preco>R${item.preco},00</Preco>
<Remover onClick={() => handleRemover(item.id)}>Remover</Remover>
</div>
</Itens>
))}
<ConteTotal>
<FraseDoTotal>Preço total do seu carrinho</FraseDoTotal>
<ValorTotal>R${preco},00</ValorTotal>
</ConteTotal>
</ContePai>
);
};

export default Carrinho;
78 changes: 78 additions & 0 deletions src/components/Carrinho/styled.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import styled from "styled-components";

export const ContePai = styled.div`
width: 60%;
margin: 10vh auto 0 auto;
`

export const Itens = styled.div`
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 20px;
border-bottom: 2px solid #000;
padding-bottom: 5px;
`

export const ImagemENome = styled.div`
display: flex;
width: 400px;
`

export const ImagemItens = styled.img`
width: 75px;
border-radius: 10px;
// height: ;
`

export const NomeItem = styled.p`
font-weight: bold;
margin-left: 10px;
`

export const BotaoAddItem = styled.button`
padding: 5px 10px;
font-weight: bold;
margin-right: 5px;
`

export const Preco = styled.span`
background-color: lightgreen;
padding: 5px 10px;
border-radius: 5px;
margin-right: 10px;
`

export const Remover = styled.button`
padding: 5px 10px;
font-weight: bold;
letter-spacing: 2px;
border: none;
outline: none;
color: white;
background-color: #000;
border-radius: 5px;
cursor: pointer;

:hover{
background-color: rgb(245, 28, 61);
}
`

export const FraseDoTotal = styled.span`
font-size: 2rem;
color: #000;
font-weight: bold;
letter-spacing: 2px;
`

export const ValorTotal = styled.div`
font-size: 2rem;
color: green;
font-weight: bold;
`

export const ConteTotal = styled.div`
display: flex;
justify-content: space-between;
`
Loading