summaryrefslogtreecommitdiffstats
path: root/stepped-solutions/51/frontend/components/TakeMyMoney.js
diff options
context:
space:
mode:
authorWes Bos <wesbos@gmail.com>2018-08-22 16:47:49 -0400
committerWes Bos <wesbos@gmail.com>2018-08-22 16:47:49 -0400
commit9876e7dfca6fa2bbf6ac383eeb8e2c82e05c2164 (patch)
tree3307dbf546a8e3ad027074c11069f8658dc36340 /stepped-solutions/51/frontend/components/TakeMyMoney.js
parent5d4fca10187c8ffff19161ec2b3b02814789a3b2 (diff)
orders
Diffstat (limited to 'stepped-solutions/51/frontend/components/TakeMyMoney.js')
-rwxr-xr-xstepped-solutions/51/frontend/components/TakeMyMoney.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/stepped-solutions/51/frontend/components/TakeMyMoney.js b/stepped-solutions/51/frontend/components/TakeMyMoney.js
new file mode 100755
index 0000000..be37df5
--- /dev/null
+++ b/stepped-solutions/51/frontend/components/TakeMyMoney.js
@@ -0,0 +1,72 @@
+import React from 'react';
+import StripeCheckout from 'react-stripe-checkout';
+import { Mutation } from 'react-apollo';
+import Router from 'next/router';
+import NProgress from 'nprogress';
+import PropTypes from 'prop-types';
+import gql from 'graphql-tag';
+import calcTotalPrice from '../lib/calcTotalPrice';
+import Error from './ErrorMessage';
+import User, { CURRENT_USER_QUERY } from './User';
+
+const CREATE_ORDER_MUTATION = gql`
+ mutation createOrder($token: String!) {
+ createOrder(token: $token) {
+ id
+ charge
+ total
+ items {
+ id
+ title
+ }
+ }
+ }
+`;
+
+function totalItems(cart) {
+ return cart.reduce((tally, cartItem) => tally + cartItem.quantity, 0);
+}
+
+class TakeMyMoney extends React.Component {
+ onToken = (res, createOrder) => {
+ console.log('On Token Called!');
+ console.log(res.id);
+ // manually call the mutation once we have the stripe token
+ createOrder({
+ variables: {
+ token: res.id,
+ },
+ }).catch(err => {
+ alert(err.message);
+ });
+ };
+ render() {
+ return (
+ <User>
+ {({ data: { me } }) => (
+ <Mutation
+ mutation={CREATE_ORDER_MUTATION}
+ refetchQueries={[{ query: CURRENT_USER_QUERY }]}
+ >
+ {createOrder => (
+ <StripeCheckout
+ amount={calcTotalPrice(me.cart)}
+ name="Sick Fits"
+ description={`Order of ${totalItems(me.cart)} items!`}
+ image={me.cart[0].item && me.cart[0].item.image}
+ stripeKey="pk_test_Vtknn6vSdcZWSG2JWvEiWSqC"
+ currency="USD"
+ email={me.email}
+ token={res => this.onToken(res, createOrder)}
+ >
+ {this.props.children}
+ </StripeCheckout>
+ )}
+ </Mutation>
+ )}
+ </User>
+ );
+ }
+}
+
+export default TakeMyMoney;