diff options
Diffstat (limited to 'stepped-solutions/41/frontend/components')
| -rwxr-xr-x | stepped-solutions/41/frontend/components/AddToCart.js | 29 | ||||
| -rwxr-xr-x | stepped-solutions/41/frontend/components/Item.js | 50 |
2 files changed, 79 insertions, 0 deletions
diff --git a/stepped-solutions/41/frontend/components/AddToCart.js b/stepped-solutions/41/frontend/components/AddToCart.js new file mode 100755 index 0000000..0625a9c --- /dev/null +++ b/stepped-solutions/41/frontend/components/AddToCart.js @@ -0,0 +1,29 @@ +import React from 'react'; +import { Mutation } from 'react-apollo'; +import gql from 'graphql-tag'; + +const ADD_TO_CART_MUTATION = gql` + mutation addToCart($id: ID!) { + addToCart(id: $id) { + id + quantity + } + } +`; + +class AddToCart extends React.Component { + render() { + const { id } = this.props; + return ( + <Mutation + mutation={ADD_TO_CART_MUTATION} + variables={{ + id, + }} + > + {addToCart => <button onClick={addToCart}>Add To Cart 🛒</button>} + </Mutation> + ); + } +} +export default AddToCart; diff --git a/stepped-solutions/41/frontend/components/Item.js b/stepped-solutions/41/frontend/components/Item.js new file mode 100755 index 0000000..2741dcf --- /dev/null +++ b/stepped-solutions/41/frontend/components/Item.js @@ -0,0 +1,50 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import Link from 'next/link'; +import Title from './styles/Title'; +import ItemStyles from './styles/ItemStyles'; +import PriceTag from './styles/PriceTag'; +import formatMoney from '../lib/formatMoney'; +import DeleteItem from './DeleteItem'; +import AddToCart from './AddToCart'; + +export default class Item extends Component { + static propTypes = { + item: PropTypes.object.isRequired, + }; + + render() { + const { item } = this.props; + return ( + <ItemStyles> + {item.image && <img src={item.image} alt={item.title} />} + + <Title> + <Link + href={{ + pathname: '/item', + query: { id: item.id }, + }} + > + <a>{item.title}</a> + </Link> + </Title> + <PriceTag>{formatMoney(item.price)}</PriceTag> + <p>{item.description}</p> + + <div className="buttonList"> + <Link + href={{ + pathname: 'update', + query: { id: item.id }, + }} + > + <a>Edit ✏️</a> + </Link> + <AddToCart id={item.id} /> + <DeleteItem id={item.id}>Delete This Item</DeleteItem> + </div> + </ItemStyles> + ); + } +} |
