diff options
| author | gabrhr <[email protected]> | 2022-04-20 10:19:29 -0500 |
|---|---|---|
| committer | gabrhr <[email protected]> | 2022-04-20 10:19:29 -0500 |
| commit | e13e630cd6e4fc0b1ff92098a28a770794c7bb9a (patch) | |
| tree | e68ad2f947d1b3ec454529b35f37ca2f223e5431 /front/odiparpack/app/components/Cart | |
| parent | 457816ac1129fcc6019d2fc795b6693ee6776d59 (diff) | |
| download | DP1_project-e13e630cd6e4fc0b1ff92098a28a770794c7bb9a.tar.gz DP1_project-e13e630cd6e4fc0b1ff92098a28a770794c7bb9a.tar.bz2 DP1_project-e13e630cd6e4fc0b1ff92098a28a770794c7bb9a.zip | |
AƱadir plantilla
Base para front
Diffstat (limited to 'front/odiparpack/app/components/Cart')
| -rw-r--r-- | front/odiparpack/app/components/Cart/Cart.js | 137 | ||||
| -rw-r--r-- | front/odiparpack/app/components/Cart/cart-jss.js | 38 |
2 files changed, 175 insertions, 0 deletions
diff --git a/front/odiparpack/app/components/Cart/Cart.js b/front/odiparpack/app/components/Cart/Cart.js new file mode 100644 index 0000000..d477a51 --- /dev/null +++ b/front/odiparpack/app/components/Cart/Cart.js @@ -0,0 +1,137 @@ +import React, { Fragment } from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import DeleteIcon from '@material-ui/icons/Delete'; +import ShoppingCartIcon from '@material-ui/icons/ShoppingCart'; +import Type from 'ba-styles/Typography.scss'; +import { + Menu, + Typography, + Button, + ListSubheader, + List, + ListItem, + ListItemText, + ListItemSecondaryAction, + IconButton, + Divider, +} from '@material-ui/core'; +import styles from './cart-jss'; + + +class Cart extends React.Component { + render() { + const { + classes, + anchorEl, + close, + dataCart, + removeItem, + totalPrice, + checkout + } = this.props; + + const getCartItem = dataArray => dataArray.map((item, index) => ( + <Fragment key={index.toString()}> + <ListItem> + <figure> + <img src={item.get('thumbnail')} alt="thumb" /> + </figure> + <ListItemText + primary={item.get('name')} + secondary={`Quantity: ${item.get('quantity')} Item - USD ${item.get('price') * item.get('quantity')}`} + className={classes.itemText} + /> + <ListItemSecondaryAction> + <IconButton aria-label="Comments" onClick={() => removeItem(item)}> + <DeleteIcon /> + </IconButton> + </ListItemSecondaryAction> + </ListItem> + <li> + <Divider /> + </li> + </Fragment> + )); + return ( + <Menu + id="cart-menu" + anchorEl={anchorEl} + anchorOrigin={{ + vertical: 'top', + horizontal: 'right', + }} + transformOrigin={{ + vertical: 'top', + horizontal: 'right', + }} + open={Boolean(anchorEl)} + onClose={close} + className={classes.cartPanel} + > + <List + component="ul" + subheader={( + <ListSubheader component="div"> + <ShoppingCartIcon /> + {' '} +Total: + {' '} + {dataCart.size} + {' '} +Unique items in Cart + </ListSubheader> + )} + className={classes.cartWrap} + > + { + dataCart.size < 1 ? ( + <div className={classes.empty}> + <Typography variant="subtitle1">Empty Cart</Typography> + <Typography variant="caption">Your shopping items will be listed here</Typography> + </div> + ) : ( + <Fragment> + {getCartItem(dataCart)} + <ListItem className={classes.totalPrice}> + <Typography variant="subtitle1"> + Total : + {' '} + <span className={Type.bold}> +$ + {totalPrice} + </span> + </Typography> + </ListItem> + <li> + <Divider /> + </li> + <ListItem> + <Button fullWidth className={classes.button} variant="contained" onClick={() => checkout()} color="secondary"> + Checkout + </Button> + </ListItem> + </Fragment> + ) + } + </List> + </Menu> + ); + } +} + +Cart.propTypes = { + classes: PropTypes.object.isRequired, + dataCart: PropTypes.object.isRequired, + anchorEl: PropTypes.object, + close: PropTypes.func.isRequired, + removeItem: PropTypes.func.isRequired, + checkout: PropTypes.func.isRequired, + totalPrice: PropTypes.number.isRequired, +}; + +Cart.defaultProps = { + anchorEl: null, +}; + +export default withStyles(styles)(Cart); diff --git a/front/odiparpack/app/components/Cart/cart-jss.js b/front/odiparpack/app/components/Cart/cart-jss.js new file mode 100644 index 0000000..aef71cd --- /dev/null +++ b/front/odiparpack/app/components/Cart/cart-jss.js @@ -0,0 +1,38 @@ +const styles = theme => ({ + totalPrice: { + background: theme.palette.grey[200], + textAlign: 'right', + display: 'block' + }, + cartWrap: { + [theme.breakpoints.up('sm')]: { + width: 400, + }, + '&:focus': { + outline: 'none' + } + }, + itemText: { + marginRight: 30, + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + width: 220 + }, + cartPanel: { + '& figure': { + width: 120, + height: 70, + overflow: 'hidden', + '& img': { + maxWidth: '100%' + } + } + }, + empty: { + textAlign: 'center', + padding: 20 + } +}); + +export default styles; |
