From 169b0953ad91f22bb3b2bf2d80d87ebfbe30d45d Mon Sep 17 00:00:00 2001 From: Wes Bos Date: Thu, 22 Mar 2018 21:11:15 -0400 Subject: yay --- frontend/components/Dump.js | 19 ++++++++ frontend/components/ErrorMessage.js | 10 ++++ frontend/components/Items.js | 16 +------ frontend/components/Pagination.js | 3 +- frontend/components/Signup.js | 7 ++- frontend/components/SingleItem.js | 40 ++++++++-------- frontend/components/TakeMyMoney.js | 50 +++++++++---------- frontend/components/UpdateItem.js | 96 ++++++++++++++++++------------------- frontend/lib/catchError.js | 8 ---- frontend/lib/initApollo-OLD.js | 92 ----------------------------------- frontend/pages/admin/update.js | 1 - frontend/queries/index.js | 10 ++-- 12 files changed, 129 insertions(+), 223 deletions(-) create mode 100644 frontend/components/Dump.js delete mode 100644 frontend/lib/catchError.js delete mode 100644 frontend/lib/initApollo-OLD.js (limited to 'frontend') diff --git a/frontend/components/Dump.js b/frontend/components/Dump.js new file mode 100644 index 0000000..f281281 --- /dev/null +++ b/frontend/components/Dump.js @@ -0,0 +1,19 @@ +const Dump = props => ( +
+ {Object.keys(props).map(prop => ( +
+        {prop} 💩
+        {JSON.stringify(props[prop], '', ' ')}
+      
+ ))} +
+); + +export default Dump; diff --git a/frontend/components/ErrorMessage.js b/frontend/components/ErrorMessage.js index ed5d031..c473731 100644 --- a/frontend/components/ErrorMessage.js +++ b/frontend/components/ErrorMessage.js @@ -20,6 +20,16 @@ const StyledError = styled.div` const DisplayError = ({ error }) => { if (!error || !error.message) return null; + if (error.networkError && error.networkError.result && error.networkError.result.errors.length) { + return error.networkError.result.errors.map(error => ( + +

+ Shoot! + {error.message} +

+
+ )); + } return (

diff --git a/frontend/components/Items.js b/frontend/components/Items.js index 1f4918f..36491e6 100644 --- a/frontend/components/Items.js +++ b/frontend/components/Items.js @@ -7,15 +7,6 @@ import Item from './Item'; import { perPage } from '../config'; import { ALL_ITEMS_QUERY } from '../queries/index'; -// export const itemEnhancer = graphql(ALL_ITEMS_QUERY, { -// name: 'itemsQuery', -// options({ page }) { -// return { -// variables: , -// }; -// }, -// }); - const Items = styled.div` display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); @@ -48,12 +39,10 @@ class ItemList extends React.Component { first: perPage, }} > - {({ data, error, loading, variables }) => { + {({ data, error, loading }) => { if (loading) return

Loading
; if (error) return
Error
; - return ( - {data.items.map((item, i) => )} - ); + return {data.items.map(item => )}; }} @@ -62,5 +51,4 @@ class ItemList extends React.Component { } } -// export default compose(itemEnhancer)(ItemList); export default ItemList; diff --git a/frontend/components/Pagination.js b/frontend/components/Pagination.js index 138e1b2..d42c807 100644 --- a/frontend/components/Pagination.js +++ b/frontend/components/Pagination.js @@ -1,9 +1,8 @@ import React from 'react'; -import { compose, Query } from 'react-apollo'; +import { Query } from 'react-apollo'; import styled from 'styled-components'; import Link from 'next/link'; import PropTypes from 'prop-types'; -import { itemEnhancer } from '../enhancers/enhancers'; import { perPage } from '../config'; import { ALL_ITEMS_QUERY } from '../queries/index'; diff --git a/frontend/components/Signup.js b/frontend/components/Signup.js index 314d0ab..4adc1ad 100644 --- a/frontend/components/Signup.js +++ b/frontend/components/Signup.js @@ -1,8 +1,7 @@ import React, { Component } from 'react'; -import { graphql, compose, Mutation } from 'react-apollo'; -import { SIGNUP_MUTATION, CURRENT_USER_QUERY } from '../queries'; +import { Mutation } from 'react-apollo'; +import { SIGNUP_MUTATION } from '../queries'; import Form from './styles/Form'; -import catchError from '../lib/catchError'; import Error from './ErrorMessage'; class Signup extends Component { @@ -20,7 +19,7 @@ class Signup extends Component { render() { return ( - {(signup, { data, loading, error }) => ( + {(signup, { loading, error }) => (
{ e.preventDefault(); diff --git a/frontend/components/SingleItem.js b/frontend/components/SingleItem.js index 5a6373f..d4bec4f 100644 --- a/frontend/components/SingleItem.js +++ b/frontend/components/SingleItem.js @@ -1,23 +1,25 @@ -import { compose } from 'react-apollo'; -import { singleItemEnhancer } from '../enhancers/enhancers'; +import { Query } from 'react-apollo'; +import PropTypes from 'prop-types'; +import { SINGLE_ITEM_QUERY } from '../queries/index'; -const SingleItem = ({ findItem: { error, loading, items } }) => { - if (loading) return

Loading...

; - if (error) return

Error...

; - const item = items[0]; +const SingleItem = props => ( + + {({ data: { items }, loading, error }) => { + if (loading || error) return null; + const [item] = items; + return ( +
+ {item.title} +

Viewing {item.title}

+

{item.description}

+
+ ); + }} +
+); - if (!item) { - return

No Item Found

; - } - - return ( -
- {item.title} -

Viewing {item.title}

-

{item.description}

-
- ); +SingleItem.propTypes = { + id: PropTypes.string.isRequired, }; -export default compose(singleItemEnhancer)(SingleItem); -export { SingleItem }; +export default SingleItem; diff --git a/frontend/components/TakeMyMoney.js b/frontend/components/TakeMyMoney.js index 20fc334..e52b08c 100644 --- a/frontend/components/TakeMyMoney.js +++ b/frontend/components/TakeMyMoney.js @@ -1,9 +1,8 @@ import { Component } from 'react'; import StripeCheckout from 'react-stripe-checkout'; -import { compose, Mutation, Query } from 'react-apollo'; +import { Mutation, Query } from 'react-apollo'; import Router from 'next/router'; import NProgress from 'nprogress'; -import PropTypes from 'prop-types'; import { CREATE_ORDER_MUTATION, CURRENT_USER_QUERY } from '../queries'; function totalItems(cart) { @@ -33,35 +32,30 @@ class TakeMyMoney extends Component { render() { return ( - {({ data: { me } }) => ( - - {createOrder => ( - this.onToken(res, createOrder)} - stripeKey="pk_lclTtThFp8CnO3QtEZSd8HA9mFUps" - currency="USD" - email={me.email} - > - {this.props.children} - - )} - - )} + {({ data: { me } }) => { + if (!me || !me.cart.length) return null; + return ( + + {createOrder => ( + this.onToken(res, createOrder)} + stripeKey="pk_lclTtThFp8CnO3QtEZSd8HA9mFUps" + currency="USD" + email={me.email} + > + {this.props.children} + + )} + + ); + }} ); } } -TakeMyMoney.propTypes = { - currentUser: PropTypes.object.isRequired, - createOrder: PropTypes.func.isRequired, -}; - -// export default compose(userEnhancer, createOrderEnhancer)(TakeMyMoney); -// export { TakeMyMoney }; - export default TakeMyMoney; diff --git a/frontend/components/UpdateItem.js b/frontend/components/UpdateItem.js index 4841006..4292d41 100644 --- a/frontend/components/UpdateItem.js +++ b/frontend/components/UpdateItem.js @@ -1,16 +1,15 @@ import React, { Component } from 'react'; -import { graphql, gql, compose } from 'react-apollo'; -import { SINGLE_ITEM_QUERY, UPDATE_LINK_MUTATION } from '../queries'; +import { Query, Mutation } from 'react-apollo'; +import { SINGLE_ITEM_QUERY, UPDATE_ITEM_MUTATION } from '../queries'; import Form from './styles/Form'; - -import { singleItemEnhancer } from '../enhancers/enhancers'; +import Error from './ErrorMessage'; +import Dump from './Dump'; class UpdateItem extends Component { state = { item: {}, }; - saveToState = e => { let { name, value, type } = e.target; if (type === 'number') { @@ -22,64 +21,63 @@ class UpdateItem extends Component { this.setState({ item }); }; - updateItem = async e => { + updateItem = async (e, updateItemMutation) => { + console.log('Updating Item'); e.preventDefault(); - // pull the values from state - const { description, title } = this.state; - const { id } = this.props; - // create a mutation - // TODO: handle any errors. If you send an extra field it should break -how do we display those errors if they are currently only visible via the network tab? - // turn loading on - this.setState({ loading: true }); - const res = await this.props.updateItem({ + + const res = await updateItemMutation({ // pass in those variables from state variables: { - ...this.props.findItem.items[0], + id: this.props.id, ...this.state.item, }, }); console.log(res); - this.setState({ loading: false }); }; render() { - if (this.props.findItem.loading) { - return

Loading...

; - } - - const item = this.props.findItem.items[0]; return ( -
- -

Edit {item.title}

- {this.state.loading ? 'LOADING...' : 'Ready!'} -
- + + {({ data: { items } }) => { + if (!items || !items.length) return

Item Not Found

; + const [item] = items; + return ( + + {(updateItemMutation, { error, loading }) => ( + this.updateItem(e, updateItemMutation)}> + +

Edit {item.title}

+
+ -