Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
7361631
Commit inicial
rpontosalgado Aug 19, 2020
2d14db9
Adicionando código das funções iniciais do projeto.
rpontosalgado Aug 19, 2020
0d81b2b
Merge pull request #1 from future4code/robertodeabreusalgado
alicepsz98 Aug 19, 2020
17cd9cc
Organizamos os itens de cada componente
alicepsz98 Aug 19, 2020
e57cf9e
Merge pull request #2 from future4code/Alice-Souza
mahmilitello Aug 19, 2020
3ad25b1
Imagens adicionadas
alicepsz98 Aug 20, 2020
d8fa35b
Fizemos outras funções
alicepsz98 Aug 20, 2020
05fd0f9
Merge pull request #3 from future4code/Alice-Souza
rpontosalgado Aug 20, 2020
2e44427
importamos as imagens
alicepsz98 Aug 20, 2020
84c4598
Merge pull request #4 from future4code/Alice-Souza
rpontosalgado Aug 20, 2020
1fec7f3
Adicionando funções e layout básico.
rpontosalgado Aug 20, 2020
a3b3e97
Merge pull request #5 from future4code/robertodeabreusalgado
mahmilitello Aug 20, 2020
e3f5876
layout iniciado
mahmilitello Aug 20, 2020
3d1fa78
Merge pull request #6 from future4code/marcela-layout
mahmilitello Aug 20, 2020
dcb89a6
Implementação das funções
alicepsz98 Aug 20, 2020
5a0ae86
Merge pull request #7 from future4code/Alice-Souza
mahmilitello Aug 20, 2020
4bcd5c5
Adicionando implementações: abre/fecha carrinho, carrinho não abre au…
rpontosalgado Aug 21, 2020
6e00c75
Adicionando implementação dos filtros.
rpontosalgado Aug 21, 2020
e46a6c8
Merge pull request #8 from future4code/robertodeabreusalgado
alicepsz98 Aug 21, 2020
fbcfa4c
Função deletar
alicepsz98 Aug 21, 2020
77ab8c6
Merge pull request #9 from future4code/Alice-Souza
rpontosalgado Aug 21, 2020
833b055
Estilização de alguns itens do Carrinhho e Armazenamento local.
rpontosalgado Aug 21, 2020
01f24d8
Armazenamento local e Estilização dos produtos no carrinho.
rpontosalgado Aug 21, 2020
3e53f40
Merge pull request #10 from future4code/robertodeabreusalgado
alicepsz98 Aug 21, 2020
de670f3
Otimizando estilo e layout.
rpontosalgado Aug 21, 2020
ccc76d5
Merge pull request #11 from future4code/robertodeabreusalgado
mahmilitello Aug 21, 2020
720585e
LabeLitos finalizado
alicepsz98 Aug 21, 2020
dac4e7a
Merge pull request #12 from future4code/Alice-Souza
alicepsz98 Aug 21, 2020
570234b
Add files via upload
alicepsz98 Aug 21, 2020
e4870f6
Fizemos o readme
alicepsz98 Aug 21, 2020
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
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,22 @@
Sejam bem vindos ao Labe-commerce, esse repositório contém um esqueleto de app React e um .gitignore.
## *LabeLitos - Projeto Labenu*
> Feito com React - Por Marcela Militello, Roberto Salgado e Alice Souza.
### Link > [wiry-force.surge.sh](http://wiry-force.surge.sh/)
### O que funciona:
- Responsividade
- Salva e Recupera conteúdo do carrinho usando o LocalStorage
- Home
- Mostra todos os produtos
- Produtos:
- Têm um botão que permite adicioná-los ao carrinho
- São exibidos o nome, preço e imagem em um card
- Carrinho
- Mostra todos os produtos e quantidades adicionadas
- Capacidade de remover itens do carrinho
- Mostra o valor total do carrinho
- Filtro
- Por valor mínimo e máximo
- Por nome do produto
### Imagens:
![Labelitos2](https://github.com/future4code/jackson-labe-commerce1/blob/master/labelitos1.png)
![Labelitos3](https://github.com/future4code/jackson-labe-commerce1/blob/master/labelitos2.png)
![Labelitos4](https://github.com/future4code/jackson-labe-commerce1/blob/master/labelitos3.png)
Binary file added labelitos.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labelitos1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labelitos2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added labelitos3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13,963 changes: 13,963 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.1.1"
},
"scripts": {
"start": "react-scripts start",
Expand Down
3 changes: 2 additions & 1 deletion public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
name="description"
content="Web site created using create-react-app"
/>
<link href="https://fonts.googleapis.com/css2?family=Lobster&display=swap" rel="stylesheet" />
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
Expand All @@ -24,7 +25,7 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
<title>LabeLitos</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
Expand Down
38 changes: 0 additions & 38 deletions src/App.css

This file was deleted.

276 changes: 251 additions & 25 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,252 @@
import React from 'react';
import logo from './logo.svg';
import './App.css';

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>
);
}

export default App;
import {Cabecalho} from './assets/components/Cabecalho';
import {Card} from './assets/components/Card';
import {Carrinho} from './assets/components/Carrinho';
import {Filtro} from './assets/components/Filtro';
import {Rodape} from './assets/components/Rodape';
import {
AppContainer,
MainContainer,
Cards,
HeaderCards,
BotaoCarrinho,
CarrinhoContainer
} from './assets/components/Styled';
import bendego from './assets/img/bendego.jpg';
import condritoBrecha from './assets/img/condrito-brecha.jpg';
import condrulesAustralian from './assets/img/condrules-australian.jpg';
import parkForest from './assets/img/park-forest.jpg';
import sikhoteAlin from './assets/img/sikhote-alin.jpg';
import varreSai from './assets/img/varre-sai.jpg';
import viscenio from './assets/img/viscenio.jpg';
import tatahouine from './assets/img/tatahouine.jpg';
import botaoCarrinho from './assets/img/shopping-white.svg';
import iconeDeletar from './assets/img/delete.svg';

const produtos = [
{
id: 1,
titulo: "Bendegó",
preco: 100,
imagem: bendego,
quantidade: 1
},
{
id: 2,
titulo: "Condrito Brecha",
preco: 150,
imagem: condritoBrecha,
quantidade: 1
},
{
id: 3,
titulo: "Côndrules",
preco: 300,
imagem: condrulesAustralian,
quantidade: 1
},
{
id: 4,
titulo: "Park Forest",
preco: 200,
imagem: parkForest,
quantidade: 1
},
{
id: 5,
titulo: "Sikhote-Alin",
preco: 400,
imagem: sikhoteAlin,
quantidade: 1
},
{
id: 6,
titulo: "Tatahouine",
preco: 250,
imagem: tatahouine,
quantidade: 1
},
{
id: 7,
titulo: "Varre-sai",
preco: 350,
imagem: varreSai,
quantidade: 1
},
{
id: 8,
titulo: "Viscenio",
preco: 280,
imagem: viscenio,
quantidade: 1
}
]

export default class App extends React.Component {
state = {
produtos,
carrinho: [],
buscaValor: '',
ordemValor: '',
totalCarrinho: 0,
carrinhoAberto: false,
filtros: {
minimoValor: 0,
maximoValor: 0
}
};

componentDidUpdate() {
localStorage.setItem('carrinho', JSON.stringify(this.state.carrinho))
}

componentDidMount() {
this.setState({carrinho: JSON.parse(localStorage.getItem('carrinho')) || []})
}

onChangeBusca = (event) => {
this.setState({ buscaValor: event.target.value })
};

atualizarFiltro = (novoValorFiltro) => {
this.setState ({
filtros: {
...this.state.filtros,
...novoValorFiltro
}
})
}

filtrarProdutos() {
const {produtos, filtros, buscaValor} = this.state
let produtosFiltrados = produtos.filter(produto => {
return produto.titulo.toLowerCase().indexOf(buscaValor.toLowerCase()) > -1
}).filter(produto => {
return produto.preco < (filtros.maximoValor || Infinity)
}).filter(produto => {
return produto.preco > (filtros.minimoValor || 0)
})
return produtosFiltrados
};

onChangeOrdem = (event) => {
let listaOrdenada = [];
if (event.target.value === 'crescente') {
listaOrdenada = [...this.state.produtos];
listaOrdenada.sort ((a, b) => {
return a.preco - b.preco;
})
}
if ( event.target.value === 'decrescente' ) {
listaOrdenada = [...this.state.produtos];
listaOrdenada.sort ((b, a) => {
return a.preco - b.preco;
})
}
this.setState({ produtos: listaOrdenada })
};

abrirCarrinho = () => {
this.setState({carrinhoAberto: !this.state.carrinhoAberto});
};

adicionarCarrinho = (id) => {
const produtoSelecionado = this.state.produtos.find(produto => {
return produto.id === id
})
const posicaoDoProdutoNoCarrinho = this.state.carrinho.findIndex(produto => {
return produto.id === id
});
const existeNoCarrinho = posicaoDoProdutoNoCarrinho > -1
let carrinhoExpectativa = [...this.state.carrinho]
if (existeNoCarrinho) {
carrinhoExpectativa = carrinhoExpectativa.map(produto => {
if (produto.id === id ) {
return {
...produto,
quantidade: produto.quantidade + 1
}
}
return produto
})
} else {
carrinhoExpectativa.push(produtoSelecionado)
}
this.setState({carrinho: carrinhoExpectativa})
};

deletarProdutoCarrinho = (id) => {
const carrinhoRealidade = this.state.carrinho.filter(produto => {
return (produto.id === id) ? false : true
});
this.setState({carrinho: carrinhoRealidade});
};

renderCarrinho = () => {
let resultado = 0;
this.state.carrinho.forEach(produto => {
if (produto) {
resultado += (produto.preco * produto.quantidade)
}
});
return (
<CarrinhoContainer>
<h2>Carrinho</h2>
{this.state.carrinho.map(produto => {
if (produto.quantidade > 0 ) {
return <Carrinho
tituloProduto={produto.titulo}
quantidadeProduto={produto.quantidade}
clickDeletarProduto={() => this.deletarProdutoCarrinho(produto.id)}
iconeDeletar={iconeDeletar}
/>
}
})}
<p><strong>Total: R$ {resultado},00</strong></p>
</CarrinhoContainer>
)
};

render () {
const produtosFiltrados = this.filtrarProdutos()

return (
<AppContainer>
<Cabecalho/>
<MainContainer carrinhoAberto={ this.state.carrinhoAberto }>
<Filtro
onChangeFiltro={ this.atualizarFiltro }
valorBusca={ this.state.buscaValor }
mudarBusca={ this.onChangeBusca }
/>
<div>
<HeaderCards>
<p>Quantidade de produtos: { produtosFiltrados.length } </p>
<select onChange={this.onChangeOrdem}>
<option value='crescente'>Preço: crescente</option>
<option value='decrescente'>Preço: decrescente</option>
</select>
</HeaderCards>
<Cards>
{ produtosFiltrados.map(produto => {
return (
<Card
srcImg={produto.imagem}
tituloCard={produto.titulo}
precoCard={produto.preco}
clickAddCarrinho={() => this.adicionarCarrinho(produto.id)}
/>
)
}) }
</Cards>
</div>
{this.state.carrinhoAberto && this.renderCarrinho()}
</MainContainer>
<Rodape/>
<BotaoCarrinho onClick={this.abrirCarrinho}>
<img alt='Icone carrinho' src={botaoCarrinho} />
</BotaoCarrinho>
</AppContainer>
);
};
};
13 changes: 13 additions & 0 deletions src/assets/components/Cabecalho.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import React from 'react';
import {Header} from './Styled';

export class Cabecalho extends React.Component{
render(){
return (
<Header>
<h1>LabeLitos</h1>
<h3>Não são pedras! São Labelitos!</h3>
</Header>
);
};
};
15 changes: 15 additions & 0 deletions src/assets/components/Card.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import React from 'react';
import {ImagemCard, CardProduto} from './Styled';

export class Card extends React.Component{
render(){
return (
<CardProduto>
<ImagemCard src={this.props.srcImg}/>
<h2>{this.props.tituloCard}</h2>
<h3>R$ {this.props.precoCard},00</h3>
<button onClick={this.props.clickAddCarrinho}>Adicionar ao carrinho</button>
</CardProduto>
);
};
};
Loading
Loading