diff options
| author | Wes Bos <wesbos@gmail.com> | 2018-03-22 16:29:31 -0400 |
|---|---|---|
| committer | Wes Bos <wesbos@gmail.com> | 2018-03-22 16:29:31 -0400 |
| commit | a6af043686e4375d7944e91cae3d5b63c59edab0 (patch) | |
| tree | f814d412b14a2a47f56c933ce38f458055f2f83b /frontend/components/TakeMyMoney.js | |
| parent | 93495ce146c4e81ecfab3a0bca99460e75a759da (diff) | |
Migrate to render props
Diffstat (limited to 'frontend/components/TakeMyMoney.js')
| -rw-r--r-- | frontend/components/TakeMyMoney.js | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/frontend/components/TakeMyMoney.js b/frontend/components/TakeMyMoney.js index 011451a..20fc334 100644 --- a/frontend/components/TakeMyMoney.js +++ b/frontend/components/TakeMyMoney.js @@ -1,16 +1,23 @@ import { Component } from 'react'; import StripeCheckout from 'react-stripe-checkout'; -import { compose } from 'react-apollo'; +import { compose, 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'; -import { userEnhancer, createOrderEnhancer } from '../enhancers/enhancers'; +import { CREATE_ORDER_MUTATION, CURRENT_USER_QUERY } from '../queries'; + +function totalItems(cart) { + return cart.reduce((tally, cartItem) => tally + cartItem.quantity, 0); +} + +function total(cart) { + return cart.reduce((tally, cartItem) => tally + cartItem.item.price * cartItem.quantity, 0); +} class TakeMyMoney extends Component { - onToken = async res => { + onToken = async (res, createOrder) => { NProgress.start(); - const order = await this.props.createOrder({ + const order = await createOrder({ variables: { token: res.id, }, @@ -18,29 +25,33 @@ class TakeMyMoney extends Component { // Route them to that order page const { id } = order.data.createOrder; Router.push({ - pathname: `/order/${id}`, + pathname: `/order`, query: { id }, }); }; - + // TODO - refetchQueries after an order is created render() { - const { me } = this.props.currentUser; - if (!me || !me.cart.length) return null; - const total = me.cart.reduce((tally, cartItem) => tally + cartItem.item.price * cartItem.quantity, 0); - const totalItems = me.cart.reduce((tally, cartItem) => tally + cartItem.quantity, 0); return ( - <StripeCheckout - amount={total} - name="Sick Fits Haul" - description={`Order of ${totalItems} Items From Sick Fits`} - image={me.cart[0].item.image} - token={this.onToken} - stripeKey="pk_lclTtThFp8CnO3QtEZSd8HA9mFUps" - currency="USD" - email={me.email} - > - {this.props.children} - </StripeCheckout> + <Query query={CURRENT_USER_QUERY}> + {({ data: { me } }) => ( + <Mutation mutation={CREATE_ORDER_MUTATION}> + {createOrder => ( + <StripeCheckout + amount={total(me.cart)} + name="Sick Fits Haul" + description={`Order of ${totalItems(me.cart)} Items From Sick Fits`} + image={me.cart[0].item.image} + token={res => this.onToken(res, createOrder)} + stripeKey="pk_lclTtThFp8CnO3QtEZSd8HA9mFUps" + currency="USD" + email={me.email} + > + {this.props.children} + </StripeCheckout> + )} + </Mutation> + )} + </Query> ); } } @@ -50,5 +61,7 @@ TakeMyMoney.propTypes = { createOrder: PropTypes.func.isRequired, }; -export default compose(userEnhancer, createOrderEnhancer)(TakeMyMoney); -export { TakeMyMoney }; +// export default compose(userEnhancer, createOrderEnhancer)(TakeMyMoney); +// export { TakeMyMoney }; + +export default TakeMyMoney; |
