From ff7fc88e36bb66a47327fa2c7e8513b222e539ef Mon Sep 17 00:00:00 2001 From: Wes Bos Date: Wed, 27 Jun 2018 13:02:25 -0400 Subject: Video 21 --- .../21/frontend/components/DeleteItem.js | 48 +++++++++++++++++++++ stepped-solutions/21/frontend/components/Item.js | 49 ++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100755 stepped-solutions/21/frontend/components/DeleteItem.js create mode 100755 stepped-solutions/21/frontend/components/Item.js (limited to 'stepped-solutions/21/frontend/components') diff --git a/stepped-solutions/21/frontend/components/DeleteItem.js b/stepped-solutions/21/frontend/components/DeleteItem.js new file mode 100755 index 0000000..4d9bd2b --- /dev/null +++ b/stepped-solutions/21/frontend/components/DeleteItem.js @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; +import { Mutation } from 'react-apollo'; +import gql from 'graphql-tag'; +import { ALL_ITEMS_QUERY } from './Items'; + +const DELETE_ITEM_MUTATION = gql` + mutation DELETE_ITEM_MUTATION($id: ID!) { + deleteItem(id: $id) { + id + } + } +`; + +class DeleteItem extends Component { + update = (cache, payload) => { + // manually update the cache on the client, so it matches the server + // 1. Read the cache for the items we want + const data = cache.readQuery({ query: ALL_ITEMS_QUERY }); + console.log(data, payload); + // 2. Filter the deleted itemout of the page + data.items = data.items.filter(item => item.id !== payload.data.deleteItem.id); + // 3. Put the items back! + cache.writeQuery({ query: ALL_ITEMS_QUERY, data }); + }; + render() { + return ( + + {(deleteItem, { error }) => ( + + )} + + ); + } +} + +export default DeleteItem; diff --git a/stepped-solutions/21/frontend/components/Item.js b/stepped-solutions/21/frontend/components/Item.js new file mode 100755 index 0000000..a40439b --- /dev/null +++ b/stepped-solutions/21/frontend/components/Item.js @@ -0,0 +1,49 @@ +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'; + +export default class Item extends Component { + static propTypes = { + item: PropTypes.object.isRequired, + }; + + render() { + const { item } = this.props; + return ( + + {item.image && {item.title}} + + + <Link + href={{ + pathname: '/item', + query: { id: item.id }, + }} + > + <a>{item.title}</a> + </Link> + + {formatMoney(item.price)} +

{item.description}

+ +
+ + Edit ✏️ + + + Delete This Item +
+
+ ); + } +} -- cgit v1.3