Skip to content

Instantly share code, notes, and snippets.

@alanfoandrade
Created November 14, 2019 17:51
Show Gist options
  • Save alanfoandrade/7d2e7f03fa887c29d4cd7a81ac1a6716 to your computer and use it in GitHub Desktop.
Save alanfoandrade/7d2e7f03fa887c29d4cd7a81ac1a6716 to your computer and use it in GitHub Desktop.
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { MdAddShoppingCart } from 'react-icons/md';
import { formatPriceBrl } from '../../util/format';
import api from '../../services/api';
import * as CartActions from '../../store/modules/cart/actions';
import { ProductList } from './styles';
class Home extends Component {
state = {
products: [],
};
async componentDidMount() {
const response = await api.get('products');
const data = response.data.map(product => ({
...product,
priceFormatted: formatPriceBrl(product.price),
}));
this.setState({ products: data });
}
handleAddProduct = product => {
const { addToCart } = this.props;
addToCart(product);
};
render() {
const { products } = this.state;
const { amount } = this.props;
return (
<ProductList>
{products.map(product => (
<li key={product.id}>
<img src={product.image} alt="Tênis" />
<strong>{product.title}</strong>
<span>{product.priceFormatted}</span>
<button
type="button"
onClick={() => this.handleAddProduct(product)}
>
<div>
<MdAddShoppingCart size={16} color="#FFF" />{' '}
{amount[product.id] || 0}
</div>
<span>ADICIONAR AO CARRINHO</span>
</button>
</li>
))}
</ProductList>
);
}
}
const mapStateToProps = state => ({
amount: state.cart.reduce((amount, product) => {
amount[product.id] = product.amount;
return amount;
}, {}),
});
const mapDispatchToProps = dispatch =>
bindActionCreators(CartActions, dispatch);
export default connect(mapStateToProps, mapDispatchToProps)(Home);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment