summaryrefslogtreecommitdiffstats
path: root/frontend/components
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/components')
-rw-r--r--frontend/components/Cart.js65
-rw-r--r--frontend/components/Nav.js24
-rw-r--r--frontend/components/Order.js1
-rw-r--r--frontend/components/Page.js33
-rw-r--r--frontend/components/TakeMyMoney.js5
-rw-r--r--frontend/components/UIContext.js25
6 files changed, 78 insertions, 75 deletions
diff --git a/frontend/components/Cart.js b/frontend/components/Cart.js
index 0a77754..7dbea8f 100644
--- a/frontend/components/Cart.js
+++ b/frontend/components/Cart.js
@@ -1,11 +1,10 @@
import React from 'react';
-import { Query } from 'react-apollo';
+import { Mutation, Query } from 'react-apollo';
import styled from 'styled-components';
import TakeMyMoney from './TakeMyMoney';
import formatMoney from '../lib/formatMoney';
-import { UIContext } from './UIContext';
import CartItem from './CartItem';
-import { CURRENT_USER_QUERY } from '../queries/index';
+import { CURRENT_USER_QUERY, LOCAL_STATE_QUERY, TOGGLE_CART_MUTATION } from '../queries/index';
import calcTotalPrice from '../lib/calcTotalPrice';
const CartStyles = styled.div`
@@ -74,37 +73,43 @@ const CloseButton = styled.button`
`;
const Cart = props => (
- <UIContext.Consumer>
- {context => (
- <Query query={CURRENT_USER_QUERY}>
- {({ data: { me }, error, loading }) => {
- if (loading || error || !me) return null;
- return (
- <CartStyles open={context.state.isCartOpen}>
- <header>
- <CloseButton title="close" onClick={context.toggle}>
- &times;
- </CloseButton>
+ <Mutation mutation={TOGGLE_CART_MUTATION}>
+ {toggle => (
+ <Query query={LOCAL_STATE_QUERY}>
+ {({ data }) => (
+ <Query query={CURRENT_USER_QUERY}>
+ {({ data: { me }, error, loading }) => {
+ if (loading || error || !me) return null;
+ return (
+ <CartStyles open={data.cartOpen}>
+ <header>
+ <CloseButton title="close" onClick={toggle}>
+ &times;
+ </CloseButton>
- <Supreme>{me.name}'s Cart.</Supreme>
- <p>
- You have {me.cart.length} item{me.cart.length === 1 ? '' : 's'} in your cart.
- </p>
- </header>
+ <Supreme>{me.name}'s Cart.</Supreme>
+ <p>
+ You have {me.cart.length} item{me.cart.length === 1 ? '' : 's'} in your cart.
+ </p>
+ </header>
- <CartUl>{me.cart.map(cartItem => <CartItem key={cartItem.id} cartItem={cartItem} />)}</CartUl>
- <footer>
- <p>{formatMoney(calcTotalPrice(me.cart))}</p>
- <TakeMyMoney>
- <button>Checkout</button>
- </TakeMyMoney>
- </footer>
- </CartStyles>
- );
- }}
+ <CartUl>
+ {me.cart.map(cartItem => <CartItem key={cartItem.id} cartItem={cartItem} />)}
+ </CartUl>
+ <footer>
+ <p>{formatMoney(calcTotalPrice(me.cart))}</p>
+ <TakeMyMoney>
+ <button>Checkout</button>
+ </TakeMyMoney>
+ </footer>
+ </CartStyles>
+ );
+ }}
+ </Query>
+ )}
</Query>
)}
- </UIContext.Consumer>
+ </Mutation>
);
export default Cart;
diff --git a/frontend/components/Nav.js b/frontend/components/Nav.js
index 80f91c6..eea29cb 100644
--- a/frontend/components/Nav.js
+++ b/frontend/components/Nav.js
@@ -2,10 +2,10 @@ import React, { Fragment } from 'react';
import Link from 'next/link';
import styled from 'styled-components';
import { Query } from 'react-apollo';
-import { CURRENT_USER_QUERY } from '../queries/index';
+import { CURRENT_USER_QUERY, LOCAL_STATE_QUERY } from '../queries/index';
import CartCount from './CartCount';
import Signout from './Signout';
-import { UIContext } from './UIContext';
+import { ApolloConsumer } from 'react-apollo';
const StyledUl = styled.ul`
margin: 0;
@@ -69,10 +69,13 @@ const StyledUl = styled.ul`
`;
class Nav extends React.Component {
+ componentDidMount() {
+ console.log('NAV MOUNTED');
+ }
render() {
return (
<Query query={CURRENT_USER_QUERY} ssr={false}>
- {({ data: { me } }) => (
+ {({ data: { me }, refetch }) => (
<StyledUl>
<Link prefetch href="/items">
<a>Shop</a>
@@ -96,7 +99,7 @@ class Nav extends React.Component {
<a>My Account</a>
</Link>
<Signout />
- <UIContext>
+ {/* <UIContext>
{context => (
<button onClick={context.toggle}>
My Cart
@@ -106,7 +109,18 @@ class Nav extends React.Component {
/>
</button>
)}
- </UIContext>
+ </UIContext> */}
+ <ApolloConsumer>
+ {cache => (
+ <button onClick={() => cache.writeData({ data: { cartOpen: true } })}>
+ My Cart
+ <CartCount
+ className="cart-count"
+ count={me.cart.reduce((tally, cartItem) => tally + cartItem.quantity, 0)}
+ />
+ </button>
+ )}
+ </ApolloConsumer>
</Fragment>
)}
</StyledUl>
diff --git a/frontend/components/Order.js b/frontend/components/Order.js
index 603aae5..b38254f 100644
--- a/frontend/components/Order.js
+++ b/frontend/components/Order.js
@@ -60,7 +60,6 @@ class Order extends Component {
<Head>
<title>Sick Fits - Order {order.id}</title>
</Head>
- <Dump order={order} />
<p>
<span>Order Id:</span>
<span>{order.id}</span>
diff --git a/frontend/components/Page.js b/frontend/components/Page.js
index 031536b..3c6e3b1 100644
--- a/frontend/components/Page.js
+++ b/frontend/components/Page.js
@@ -3,8 +3,8 @@ import styled, { ThemeProvider, injectGlobal } from 'styled-components';
import PropTypes from 'prop-types';
import Header from './Header';
import Meta from './Meta';
-import { UIProvider } from './UIContext';
-// Global Style
+import { client } from '../lib/withData';
+import { CURRENT_USER_QUERY } from '../queries';
const theme = {
red: '#FF0000',
@@ -50,17 +50,24 @@ const StyledPage = styled.div`
background: white;
`;
-const Page = ({ children }) => (
- <UIProvider>
- <ThemeProvider theme={theme}>
- <StyledPage className="main">
- <Meta />
- <Header />
- <Inner>{children}</Inner>
- </StyledPage>
- </ThemeProvider>
- </UIProvider>
-);
+class Page extends React.Component {
+ componentDidMount() {
+ // console.log('ComponentDidMount');
+ // When the page loads, re-refetch the current user query
+ // client.query({ query: CURRENT_USER_QUERY, fetchPolicy: 'network-only' });
+ }
+ render() {
+ return (
+ <ThemeProvider theme={theme}>
+ <StyledPage className="main">
+ <Meta />
+ <Header />
+ <Inner>{this.props.children}</Inner>
+ </StyledPage>
+ </ThemeProvider>
+ );
+ }
+}
Page.propTypes = {
children: PropTypes.node.isRequired,
};
diff --git a/frontend/components/TakeMyMoney.js b/frontend/components/TakeMyMoney.js
index 6adf866..593c610 100644
--- a/frontend/components/TakeMyMoney.js
+++ b/frontend/components/TakeMyMoney.js
@@ -32,7 +32,10 @@ class TakeMyMoney extends Component {
{({ data: { me } }) => {
if (!me || !me.cart.length) return null;
return (
- <Mutation mutation={CREATE_ORDER_MUTATION}>
+ <Mutation
+ mutation={CREATE_ORDER_MUTATION}
+ refetchQueries={[{ query: CURRENT_USER_QUERY }]}
+ >
{createOrder => (
<StripeCheckout
amount={calcTotalPrice(me.cart)}
diff --git a/frontend/components/UIContext.js b/frontend/components/UIContext.js
deleted file mode 100644
index 103475e..0000000
--- a/frontend/components/UIContext.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-
-const UIContext = React.createContext();
-
-class UIProvider extends React.Component {
- displayName: 'OMGME';
-
- state = {
- isCartOpen: false,
- };
- render() {
- return (
- <UIContext.Provider
- value={{
- state: this.state,
- toggle: () => this.setState({ isCartOpen: !this.state.isCartOpen }),
- }}
- >
- {this.props.children}
- </UIContext.Provider>
- );
- }
-}
-
-export { UIContext, UIProvider };