From 8a5825d52271d712ec7c8348447d433067e13ef2 Mon Sep 17 00:00:00 2001 From: Wes Bos Date: Thu, 13 Sep 2018 14:18:56 -0400 Subject: DONE --- .../frontend/components/AddToCart.js | 68 ---------- finished-application/frontend/components/Cart.js | 74 ----------- .../frontend/components/CartCount.js | 64 --------- .../frontend/components/CartItem.js | 53 -------- .../frontend/components/CreateItem.js | 148 --------------------- .../frontend/components/DeleteItem.js | 71 ---------- finished-application/frontend/components/Dump.js | 19 --- .../frontend/components/EditUser.js | 81 ----------- .../frontend/components/ErrorMessage.js | 51 ------- finished-application/frontend/components/Header.js | 71 ---------- finished-application/frontend/components/Item.js | 53 -------- finished-application/frontend/components/Items.js | 74 ----------- .../frontend/components/LoadingItem.js | 22 --- finished-application/frontend/components/Meta.js | 16 --- finished-application/frontend/components/Nav.js | 59 -------- finished-application/frontend/components/Order.js | 98 -------------- .../frontend/components/OrderList.js | 93 ------------- finished-application/frontend/components/Page.js | 67 ---------- .../frontend/components/Pagination.js | 76 ----------- .../frontend/components/Permissions.js | 133 ------------------ .../frontend/components/PleaseSignIn.js | 46 ------- .../frontend/components/RemoveFromCart.js | 57 -------- finished-application/frontend/components/Reset.js | 85 ------------ .../frontend/components/ResetRequest.js | 55 -------- finished-application/frontend/components/Search.js | 99 -------------- finished-application/frontend/components/Signin.js | 79 ----------- .../frontend/components/Signout.js | 25 ---- finished-application/frontend/components/Signup.js | 93 ------------- .../frontend/components/SingleItem.js | 77 ----------- .../frontend/components/TakeMyMoney.js | 83 ------------ .../frontend/components/UpdateItem.js | 105 --------------- finished-application/frontend/components/User.js | 45 ------- .../frontend/components/styles/CartStyles.js | 47 ------- .../frontend/components/styles/CloseButton.js | 13 -- .../frontend/components/styles/DropDown.js | 47 ------- .../frontend/components/styles/Form.js | 71 ---------- .../frontend/components/styles/ItemStyles.js | 39 ------ .../frontend/components/styles/NavStyles.js | 64 --------- .../frontend/components/styles/OrderItemStyles.js | 44 ------ .../frontend/components/styles/OrderStyles.js | 38 ------ .../frontend/components/styles/PaginationStyles.js | 27 ---- .../frontend/components/styles/PriceTag.js | 17 --- .../frontend/components/styles/SickButton.js | 20 --- .../frontend/components/styles/Supreme.js | 13 -- .../frontend/components/styles/Table.js | 31 ----- .../frontend/components/styles/Title.js | 20 --- 46 files changed, 2731 deletions(-) delete mode 100644 finished-application/frontend/components/AddToCart.js delete mode 100644 finished-application/frontend/components/Cart.js delete mode 100644 finished-application/frontend/components/CartCount.js delete mode 100644 finished-application/frontend/components/CartItem.js delete mode 100644 finished-application/frontend/components/CreateItem.js delete mode 100644 finished-application/frontend/components/DeleteItem.js delete mode 100644 finished-application/frontend/components/Dump.js delete mode 100644 finished-application/frontend/components/EditUser.js delete mode 100644 finished-application/frontend/components/ErrorMessage.js delete mode 100644 finished-application/frontend/components/Header.js delete mode 100644 finished-application/frontend/components/Item.js delete mode 100644 finished-application/frontend/components/Items.js delete mode 100644 finished-application/frontend/components/LoadingItem.js delete mode 100644 finished-application/frontend/components/Meta.js delete mode 100644 finished-application/frontend/components/Nav.js delete mode 100644 finished-application/frontend/components/Order.js delete mode 100644 finished-application/frontend/components/OrderList.js delete mode 100644 finished-application/frontend/components/Page.js delete mode 100644 finished-application/frontend/components/Pagination.js delete mode 100644 finished-application/frontend/components/Permissions.js delete mode 100644 finished-application/frontend/components/PleaseSignIn.js delete mode 100644 finished-application/frontend/components/RemoveFromCart.js delete mode 100644 finished-application/frontend/components/Reset.js delete mode 100644 finished-application/frontend/components/ResetRequest.js delete mode 100644 finished-application/frontend/components/Search.js delete mode 100644 finished-application/frontend/components/Signin.js delete mode 100644 finished-application/frontend/components/Signout.js delete mode 100644 finished-application/frontend/components/Signup.js delete mode 100644 finished-application/frontend/components/SingleItem.js delete mode 100644 finished-application/frontend/components/TakeMyMoney.js delete mode 100644 finished-application/frontend/components/UpdateItem.js delete mode 100644 finished-application/frontend/components/User.js delete mode 100644 finished-application/frontend/components/styles/CartStyles.js delete mode 100644 finished-application/frontend/components/styles/CloseButton.js delete mode 100644 finished-application/frontend/components/styles/DropDown.js delete mode 100644 finished-application/frontend/components/styles/Form.js delete mode 100644 finished-application/frontend/components/styles/ItemStyles.js delete mode 100644 finished-application/frontend/components/styles/NavStyles.js delete mode 100644 finished-application/frontend/components/styles/OrderItemStyles.js delete mode 100644 finished-application/frontend/components/styles/OrderStyles.js delete mode 100644 finished-application/frontend/components/styles/PaginationStyles.js delete mode 100644 finished-application/frontend/components/styles/PriceTag.js delete mode 100644 finished-application/frontend/components/styles/SickButton.js delete mode 100644 finished-application/frontend/components/styles/Supreme.js delete mode 100644 finished-application/frontend/components/styles/Table.js delete mode 100644 finished-application/frontend/components/styles/Title.js (limited to 'finished-application/frontend/components') diff --git a/finished-application/frontend/components/AddToCart.js b/finished-application/frontend/components/AddToCart.js deleted file mode 100644 index 03242a4..0000000 --- a/finished-application/frontend/components/AddToCart.js +++ /dev/null @@ -1,68 +0,0 @@ -import { Component } from 'react'; -import { Mutation } from 'react-apollo'; -import PropTypes from 'prop-types'; -import gql from 'graphql-tag'; -import User, { CURRENT_USER_QUERY } from './User'; - -const ADD_TO_CART_MUTATION = gql` - mutation addToCart($id: ID!) { - addToCart(id: $id) { - id - quantity - item { - id - price - description - image - title - } - } - } -`; - -class AddToCart extends Component { - static propTypes = { - id: PropTypes.string.isRequired, - }; - - update = (cache, payload) => { - const newCartItem = payload.data.addToCart; - const data = cache.readQuery({ query: CURRENT_USER_QUERY }); - - const existingIndex = data.me.cart.findIndex(cartItem => cartItem.id === newCartItem.id); - if (existingIndex >= 0) { - // already in cache, just replace it - data.me.cart = [ - ...data.me.cart.slice(0, existingIndex), - newCartItem, - ...data.me.cart.slice(existingIndex + 1), - ]; - } else { - data.me.cart = [...data.me.cart, newCartItem]; - } - cache.writeQuery({ query: CURRENT_USER_QUERY, data }); - }; - - render() { - const { id } = this.props; - return ( - - {({ data: { me }, loading }) => { - if (!me || loading) return null; - return ( - - {(addToCart, { loading }) => ( - - )} - - ); - }} - - ); - } -} - -export default AddToCart; -export { ADD_TO_CART_MUTATION }; diff --git a/finished-application/frontend/components/Cart.js b/finished-application/frontend/components/Cart.js deleted file mode 100644 index 7e8a9c5..0000000 --- a/finished-application/frontend/components/Cart.js +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react'; -import { Mutation, Query } from 'react-apollo'; -import { adopt } from 'react-adopt'; -import gql from 'graphql-tag'; -import TakeMyMoney from './TakeMyMoney'; -import formatMoney from '../lib/formatMoney'; -import CartItem from './CartItem'; -import { CURRENT_USER_QUERY } from './User'; -import calcTotalPrice from '../lib/calcTotalPrice'; -import Error from './ErrorMessage'; -import CartStyles from './styles/CartStyles'; -import Supreme from './styles/Supreme'; -import CloseButton from './styles/CloseButton'; -import SickButton from './styles/SickButton'; - -const LOCAL_STATE_QUERY = gql` - query { - cartOpen @client - } -`; - -const TOGGLE_CART_MUTATION = gql` - mutation { - toggleCart @client - } -`; - -const Composed = adopt({ - toggleCart: ({ render }) => ( - - {(mutate, result) => render({ mutate, result })} - - ), - localState: ({ render }) => , - currentUser: ({ render }) => ( - - ), -}); - -const Cart = () => ( - - {({ toggleCart, localState, currentUser }) => { - const { data: { me }, error, loading } = currentUser; - if (loading) return

Loading...

; - if (error) return ; - if (!me) return null; - return ( - -
- - × - - - {me.name}'s Cart. -

- You have {me.cart.length} item{me.cart.length === 1 ? '' : 's'} in your cart. -

-
- -
    {me.cart.map(cartItem => )}
-
-

{formatMoney(calcTotalPrice(me.cart))}

- - Checkout - -
-
- ); - }} -
-); - -export default Cart; -export { LOCAL_STATE_QUERY, TOGGLE_CART_MUTATION }; diff --git a/finished-application/frontend/components/CartCount.js b/finished-application/frontend/components/CartCount.js deleted file mode 100644 index ae51f20..0000000 --- a/finished-application/frontend/components/CartCount.js +++ /dev/null @@ -1,64 +0,0 @@ -import styled from 'styled-components'; -import { TransitionGroup, CSSTransition } from 'react-transition-group'; -import PropTypes from 'prop-types'; - -const Dot = styled.div` - background: ${props => props.theme.red}; - color: white; - border-radius: 50%; - padding: 0.5rem; - line-height: 2rem; - min-width: 3rem; - margin-left: 1rem; - font-weight: 100; - font-feature-settings: 'tnum'; - font-variant-numeric: tabular-nums; -`; - -const AnimationStyles = styled.span` - position: relative; - .count { - display: block; - position: relative; - transition: all 0.4s; - backface-visibility: hidden; - } - .count-enter { - transform: rotateX(0.5turn); - } - - .count-enter-active { - transform: rotateX(0); - } - - .count-exit { - top: 0; - position: absolute; - transform: rotateX(0); - } - - .count-exit-active { - transform: rotateX(0.5turn); - } -`; - -const CartCount = ({ count }) => ( - - - - {count} - - - -); - -CartCount.propTypes = { - count: PropTypes.number.isRequired, -}; -export default CartCount; diff --git a/finished-application/frontend/components/CartItem.js b/finished-application/frontend/components/CartItem.js deleted file mode 100644 index 6c6d575..0000000 --- a/finished-application/frontend/components/CartItem.js +++ /dev/null @@ -1,53 +0,0 @@ -import styled from 'styled-components'; -import PropTypes from 'prop-types'; -import formatMoney from '../lib/formatMoney'; -import RemoveFromCart from './RemoveFromCart'; - -const CartItemStyles = styled.li` - padding: 1rem 0; - border-bottom: 1px solid ${props => props.theme.lightgrey}; - display: grid; - align-items: center; - grid-template-columns: auto 1fr auto; - img { - margin-right: 10px; - } - h3 { - margin: 0; - } - p { - margin: 0; - } -`; - -const CartItem = ({ cartItem }) => { - if (!cartItem.item) - return ( - -

Ack! That Item is gone!

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

{cartItem.item.title}

-

- {formatMoney(cartItem.quantity * cartItem.item.price)} - {' β€” '} - - {cartItem.quantity} × {formatMoney(cartItem.item.price)} each - -

-
- -
- ); -}; - -CartItem.propTypes = { - cartItem: PropTypes.object.isRequired, -}; - -export default CartItem; diff --git a/finished-application/frontend/components/CreateItem.js b/finished-application/frontend/components/CreateItem.js deleted file mode 100644 index 503b3cb..0000000 --- a/finished-application/frontend/components/CreateItem.js +++ /dev/null @@ -1,148 +0,0 @@ -import React, { Component } from 'react'; -import { Mutation } from 'react-apollo'; -import Router from 'next/router'; -import wait from 'waait'; -import gql from 'graphql-tag'; -import Error from './ErrorMessage'; -import Form from './styles/Form'; -import formatMoney from '../lib/formatMoney'; -import { ALL_ITEMS_QUERY } from './Items'; -import { PAGINATION_QUERY } from './Pagination'; - -const CREATE_ITEM_MUTATION = gql` - mutation CREATE_ITEM_MUTATION( - $description: String! - $title: String! - $price: Int! - $image: String - $largeImage: String - ) { - createItem( - description: $description - title: $title - price: $price - image: $image - largeImage: $largeImage - ) { - id - } - } -`; - -class CreateItem extends Component { - state = { - title: '', - description: '', - image: '', - largeImage: '', - price: 0, - }; - - handleChange = e => { - const { name, value, type } = e.target; - const val = type === 'number' ? parseFloat(value) : value; - this.setState({ [name]: val }); - }; - - uploadFile = async e => { - this.setState({ loading: true }); - const files = e.currentTarget.files; - const data = new FormData(); - data.append('file', files[0]); - data.append('upload_preset', 'sickfits'); - - // use the file endpoint - const res = await fetch('https://api.cloudinary.com/v1_1/wesbos/image/upload', { - method: 'POST', - body: data, - }); - const file = await res.json(); - this.setState({ - image: file.secure_url, - largeImage: file.eager[0].secure_url, - loading: false, - }); - }; - - render() { - return ( - - {(createItem, { loading, error }) => ( -
{ - e.preventDefault(); - const { data: { createItem: item } } = await createItem(); - // we wait 0 ms so it puts the router push at the end of the call stack. This ensures that refetchQueries runs before we unmount the component :) - await wait(); - Router.push({ - pathname: `/item`, - query: { id: item.id }, - }); - }} - > -

Sell an Item.

- -
- - - -