Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
7cdc15a
instalacao app react
diegomiyabara Jun 24, 2020
8b81540
componentização completa
diegomiyabara Jun 24, 2020
5ac2407
Merge pull request #1 from future4code/componentizacao
LucasAMiranda Jun 24, 2020
d706a48
Estilização e componentização
Jailsom-Nogueira Jun 24, 2020
e45b2da
renderização condicional do carrinho feita
diegomiyabara Jun 24, 2020
6baa508
Merge pull request #2 from future4code/renderizacao-condicional
LucasAMiranda Jun 24, 2020
84d3806
Inicio de Funcionalidades(Lucas-Mirand)OK
LucasAMiranda Jun 25, 2020
668ba1b
Merge pull request #3 from future4code/InicioFuncionalidades
diegomiyabara Jun 25, 2020
554685b
..
diegomiyabara Jun 25, 2020
99673b7
Merge branch 'master' of https://github.com/future4code/turing-labe-c…
diegomiyabara Jun 25, 2020
58b16cc
soma valores incompleto
Jailsom-Nogueira Jun 25, 2020
201019c
Merge pull request #4 from future4code/soma-valores-produtos
LucasAMiranda Jun 25, 2020
b166fc9
Merge branch 'master' of https://github.com/future4code/turing-labe-c…
diegomiyabara Jun 25, 2020
4240fda
correção de bugs funcionalidade 1
diegomiyabara Jun 25, 2020
22a530f
Merge pull request #5 from future4code/Carrinho-Diego
Jailsom-Nogueira Jun 25, 2020
7474118
envia valores para cart, mas não os itens - Jailsom
Jailsom-Nogueira Jun 25, 2020
06d8c83
Merge pull request #6 from future4code/funcionalidade-botao-jailsom
diegomiyabara Jun 25, 2020
3980488
adiciona item ao carrinho e apaga, sucesso
Jailsom-Nogueira Jun 26, 2020
d6f8802
Merge pull request #7 from future4code/tentativas-jailsom
LucasAMiranda Jun 26, 2020
633948c
entrega obrigatória
Jailsom-Nogueira Jun 26, 2020
ba4d373
Merge pull request #8 from future4code/tentativas-jailsom
Jailsom-Nogueira Jun 26, 2020
1599259
filtro crescente e decrescente funcionado com bug
diegomiyabara Jun 26, 2020
5cfc964
Funcionalidade de filtro por preço crescente e decrescente funcionando
diegomiyabara Jun 26, 2020
c44a554
conflitos
diegomiyabara Jun 26, 2020
311cb95
conflito 2
diegomiyabara Jun 26, 2020
39c7ac0
correcao
diegomiyabara Jun 26, 2020
969f08e
correcao
diegomiyabara Jun 26, 2020
fb173f2
Merge branch 'master' into tentativa-diego
diegomiyabara Jun 26, 2020
98bdc27
Merge pull request #9 from future4code/tentativa-diego
LucasAMiranda Jun 26, 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
13,974 changes: 13,974 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
236 changes: 214 additions & 22 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,218 @@
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>
);
import styled from 'styled-components'
import Home from './Components/Home'
import Filter from './Components/Filter'
import Cart from './Components/Cart'

const ContainerPai = styled.div`
display: flex;
box-sizing: border-box;
padding: 8px;
`;

const ButtonCart = styled.div`
display: flex;
justify-content: center;
align-items: center;
position: fixed;
bottom: 20px;
right: 20px;
width: 80px;
height: 80px;
background-color: white;
box-shadow: rgba(0, 0, 0, 0.35) 0px 0px 5px;
cursor: pointer;
border-radius: 50%;
transition: all 0.5s ease 0s;
`

const ButtonImage = styled.img`
width: 90%;
`

const CartItem = styled.p`
margin: 2px;
border-bottom: 1px dashed black;
padding-bottom: 4px;
`

const Limpar = styled.button`
background-color: blue;
`

const listProducts = [
{
id: 1,
title: 'Foguete Lucas',
price: 50,
url: 'https://picsum.photos/200/200?a=1',
},
{
id: 2,
title: 'Foguete Jailsom',
price: 60,
url: 'https://picsum.photos/200/200?a=2',
},
{
id: 3,
title: 'Foguete Diego',
price: 70,
url: 'https://picsum.photos/200/200?a=3',
},
{
id: 4,
title: 'Foguete Vinicius',
price: 80,
url: 'https://picsum.photos/200/200?a=4',
},
{
id: 5,
title: 'Foguete Miranda',
price: 40,
url: 'https://picsum.photos/200/200?a=5',
},
{
id: 6,
title: 'Foguete Nogueira',
price: 30,
url: 'https://picsum.photos/200/200?a=6',
},
{
id: 7,
title: 'Foguete Miyabara',
price: 20,
url: 'https://picsum.photos/200/200?a=7',
},
{
id: 8,
title: 'Foguete Fredeanelle',
price: 10,
url: 'https://picsum.photos/200/200?a=8',
},
]

class App extends React.Component {
state ={
cart: false,
inputValorMin: '',
inputValorMax: '' ,
somaTotal: 0,
ordemProducts:'crescente',
products: listProducts,
title: '',
selectedProduct: [
{
id: ''
}
] //só produtos selecionados pelo usuário
}

onClickCart = () => {
this.setState({cart: !this.state.cart})
}



deletarMensagem = mensagemParaDeletar => {
const novaListaDeMensagem = this.state.arrayMensagem.filter(item => {
return item.mensagem !== mensagemParaDeletar;
});

this.setState({
arrayMensagem: novaListaDeMensagem
});

};

onClickAddProduct = (id) => {
const preco = this.state.products.filter((product) =>{//lista de produtos
if(id === product.id){
this.setState({somaTotal: this.state.somaTotal + product.price})
const newTitle = { //guardando o titulo em um objeto
id: product.id,
title: product.title, //titulo no elemento do objeto
timesInCart: 1
}
const itensCarrinho = this.state.selectedProduct.filter((product) =>{//só produtos selecionados pelo usuário
if(id === product.id){
newTitle.timesInCart += 1
}
})
const newProductsArray = [newTitle, ...this.state.selectedProduct] //novo array que recebe o novo objeto
this.setState({selectedProduct: newProductsArray}) //add ao nosso antigo array
return this.state.somaTotal
}
})
}


onClickClear = (id) => {
const limpezaProfunda = this.state.selectedProduct.filter(item => {//passa em todos os produtos do carrinho
return item.id !== id;
});
this.setState({selectedProduct: limpezaProfunda});//pega o array vazio e atribui a lista de produtos do carrinho
};

onChangeOrdemProdutos = (event) => {
this.setState({ordemProducts: event.target.value})
switch (this.state.ordemProducts){
case 'crescente':
return this.setState({products: this.state.products.sort(function(a, b){
return b.price - a.price
})})
case 'decrescente':
return this.setState({products: this.state.products.sort(function(a, b){
return a.price - b.price
})})
default:
return this.setState({products: this.state.products})
}
}

render(){
const renderiza = () => {

if(this.state.cart){
return (
<Cart
total = {this.state.somaTotal}

selectedProduct = {this.state.selectedProduct.map((produto, index) => { //envia o titulo no estado
if(produto.id !== ''){
return <CartItem key={index}>
<strong>{produto.timesInCart}x </strong>
<strong>{produto.title} </strong>
<Limpar onClick={() => this.onClickClear(produto.id)}>X</Limpar>
</CartItem>
}
})}
/>
)
}
}
return (
<ContainerPai>
<Filter

/>
<Home
products={this.state.products}
productsLenght={this.state.products.length}
onClickAddProduct={this.onClickAddProduct}
onChangeOrdemProdutos={this.onChangeOrdemProdutos}
ordemProducts={this.state.ordemProducts}

/>
{renderiza()}
<ButtonCart onClick={this.onClickCart}>
<ButtonImage
src="https://w7.pngwing.com/pngs/785/236/png-transparent-fire-and-shopping-cart-illustration-shopping-cart-icon-flame-shopping-cart-icon-text-camera-icon-logo.png"
alt="carrinho-de-compra" />
</ButtonCart>
</ContainerPai>

);
}
}

export default App;
23 changes: 23 additions & 0 deletions src/Components/CardProduct.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import React from 'react';
import styled from 'styled-components'


const ContainerCard = styled.div`
padding: 4px;
`

class CardProduct extends React.Component {

render(){

return (
<ContainerCard>
<img src={this.props.url} alt="" width="100%"/>
<p>{this.props.title}</p>
<p>USD {this.props.price}</p>
</ContainerCard>
);
}
}

export default CardProduct;
27 changes: 27 additions & 0 deletions src/Components/Cart.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import React from 'react';
import styled from 'styled-components';

const ContainerFilter = styled.div`
display: flex;
flex-direction: column;
height: 90vh;
border: 1px solid black;
padding: 16px;
box-sizing: border-box;
width: 20%;
`

class Cart extends React.Component {

render(){
return (
<ContainerFilter>
<h1>Carrinho: </h1>
{this.props.selectedProduct}
<p>Total: <b>USD {this.props.total}</b></p>
</ContainerFilter>
);
}
}

export default Cart;
49 changes: 49 additions & 0 deletions src/Components/Filter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import React from 'react';
import styled from 'styled-components'

const ContainerFilter = styled.div`
display: flex;
flex-direction: column;
height: 90vh;
border: 1px solid black;
padding: 16px;
box-sizing: border-box;
width: 20%;
`

class Filter extends React.Component {
state ={
inputValorMin: '',
inputValorMax: '',
inputBusca: ''
};

handleInputChangeMin = event =>{
this.setState({inputValorMin: event.target.value})
};

handleInputChangeMax = event =>{
this.setState({inputValorMax: event.target.value})
};

handleInputChangeSearch = event =>{
this.setState({inputBusca: event.target.value})
}


render(){
return (
<ContainerFilter>
<h1>Filtros:</h1>
<label>Valor Maximo:</label>
<input type="number" value={this.state.inputValorMax} onChange={this.handleInputChangeMax}/>
<label>Valor Mínimo:</label>
<input type="number" value={this.state.inputValorMin} onChange={this.handleInputChangeMin}/>
<label>Buscar produto</label>
<input type="text" value={this.state.inputBusca} onChange={this.handleInputChangeSearch} />
</ContainerFilter>
);
}
}

export default Filter;
Loading
Loading