From cd0b07b3adb36fb5ec098f9e511ab45d774fee7b Mon Sep 17 00:00:00 2001 From: Wes Bos Date: Tue, 30 Jan 2018 12:41:01 -0500 Subject: Move to Prisma Backend --- components/AddToCart.js | 100 ----------------------------------- components/Cart.js | 46 ---------------- components/CartList.js | 114 ---------------------------------------- components/ChaChing.js | 56 -------------------- components/Count.js | 37 ------------- components/CreateItem.js | 128 --------------------------------------------- components/ErrorMessage.js | 32 ------------ components/Header.js | 42 --------------- components/Item.js | 61 --------------------- components/Items.js | 97 ---------------------------------- components/LoginAuth0.js | 76 --------------------------- components/Meta.js | 24 --------- components/Nav.js | 46 ---------------- components/OrderList.js | 52 ------------------ components/Page.js | 24 --------- components/Pagination.js | 43 --------------- components/Search.js | 68 ------------------------ components/Signup.js | 94 --------------------------------- components/SingleItem.js | 36 ------------- components/TakeMyMoney.js | 43 --------------- components/UpdateItem.js | 75 -------------------------- 21 files changed, 1294 deletions(-) delete mode 100644 components/AddToCart.js delete mode 100644 components/Cart.js delete mode 100644 components/CartList.js delete mode 100644 components/ChaChing.js delete mode 100644 components/Count.js delete mode 100644 components/CreateItem.js delete mode 100644 components/ErrorMessage.js delete mode 100644 components/Header.js delete mode 100644 components/Item.js delete mode 100644 components/Items.js delete mode 100644 components/LoginAuth0.js delete mode 100644 components/Meta.js delete mode 100644 components/Nav.js delete mode 100644 components/OrderList.js delete mode 100644 components/Page.js delete mode 100644 components/Pagination.js delete mode 100644 components/Search.js delete mode 100644 components/Signup.js delete mode 100644 components/SingleItem.js delete mode 100644 components/TakeMyMoney.js delete mode 100644 components/UpdateItem.js (limited to 'components') diff --git a/components/AddToCart.js b/components/AddToCart.js deleted file mode 100644 index e46a1f5..0000000 --- a/components/AddToCart.js +++ /dev/null @@ -1,100 +0,0 @@ -import { Component } from 'react'; -import { ADD_TO_CART_MUTATION, CURRENT_USER_QUERY, SINGLE_ITEM_QUERY } from '../queries'; -import { removeFromCartEnhancer, userEnhancer } from '../enhancers'; -import { graphql, compose } from 'react-apollo'; -import Transition from 'react-transition-group/Transition'; -import makeImage from '../lib/image'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; - -const JumpImg = styled.img` - border: 0 solid black; - max-width: 100px; - transition: all 0.5s; - position: fixed; - left: ${props => props.x}px; - top: -100%; - &.jump-entered { - border-color: green; - transform-origin: 0 0; - transform: scale(0); - top: ${props => props.y}px; - left: ${props => props.x}px; - } - &.jump-entering { - border-color: yellow; - top: ${props => props.y}px; - left: ${props => props.x}px; - } - &.jump-exited { - border-color: red; - } - &.jump-exiting { - border-color: yellow; - } -`; - -class AddToCart extends Component { - static propTypes = { - currentUserQuery: PropTypes.object, - }; - - componentDidMount() { - this.props.currentUserQuery.refetch(); - } - - addToCart = async () => { - const res = await this.props.addToCart({ - variables: { - userId: this.props.currentUserQuery.user.id, - itemId: this.props.id, - }, - }); - this.props.currentUserQuery.refetch(); - console.log(res); - }; - - removeFromCart = async () => { - const res = await this.props.removeFromCart({ - variables: { - userId: this.props.currentUserQuery.user.id, - itemId: this.props.id, - }, - }); - this.props.currentUserQuery.refetch(); - console.log(res); - }; - - render() { - const user = this.props.currentUserQuery.user; - // TODO WTF - if (!user || this.props.singleItemQuery.loading || !this.props.singleItemQuery.Item) return

Loading...

; - const cartIds = user.cart.map(item => item.id); - const image = this.props.singleItemQuery.Item.image || {}; - const isInCart = cartIds.includes(this.props.id); - const { x, y } = document.querySelector('.cart').getBoundingClientRect(); - return ( -
- {isInCart ? ( - - ) : ( - - )} - - {status => } - -
- ); - } -} - -const createOrderEnhancer = graphql(ADD_TO_CART_MUTATION, { name: 'addToCart' }); -const singleItemEnhancer = graphql(SINGLE_ITEM_QUERY, { - name: 'singleItemQuery', - options: ({ id }) => ({ - variables: { - id, - }, - }), -}); -export default compose(userEnhancer, createOrderEnhancer, removeFromCartEnhancer, singleItemEnhancer)(AddToCart); diff --git a/components/Cart.js b/components/Cart.js deleted file mode 100644 index 88b072c..0000000 --- a/components/Cart.js +++ /dev/null @@ -1,46 +0,0 @@ -import { Component } from 'react'; -import { graphql, compose } from 'react-apollo'; -import styled from 'styled-components'; -import { CURRENT_USER_QUERY } from '../queries'; -import formatMoney from '../lib/formatMoney.js'; -import ChaChing from './ChaChing'; - -const CartStyles = styled.div` - background: white; - border-radius: 10px; - padding: 20px; - overflow: hidden; - display: flex; - align-items: center; -`; - -class Cart extends Component { - componentDidMount() { - // This fetches the new data, but doesn't populate the user via props - // this.props.currentUserQuery.refetch(); - // This fetches the new data, and populates the user via props - setTimeout(this.props.currentUserQuery.refetch, 1); - } - - render() { - // Check for loading state.. - const { loading, error } = this.props.currentUserQuery; - const { user } = this.props.currentUserQuery; - if (loading || error || !user) return

Cart Loading...

; - const total = user.cart.reduce((a, b) => a + b.price, 0); - - return ( - - There - {user.cart.length === 1 ? ' is ' : 'are '} - - {user.cart.length === 1 ? ' item ' : ' items '} - in your cart totaling - - - ); - } -} - -const userEnhancer = graphql(CURRENT_USER_QUERY, { name: 'currentUserQuery' }); -export default compose(userEnhancer)(Cart); diff --git a/components/CartList.js b/components/CartList.js deleted file mode 100644 index b54aa39..0000000 --- a/components/CartList.js +++ /dev/null @@ -1,114 +0,0 @@ -import { Component } from 'react'; -import withData from '../lib/withData'; -import Items from '../components/Items'; -import Signup from '../components/Signup'; -import LoginAuth0 from '../components/LoginAuth0'; -import Page from '../components/Page'; -import { USER_ORDERS_QUERY, GET_CART_STATE } from '../queries'; -import { graphql, compose } from 'react-apollo'; -import has from 'lodash.has'; -import get from 'lodash.get'; -import styled from 'styled-components'; -import formatMoney from '../lib/formatMoney'; -import makeImage from '../lib/image'; -import TakeMyMoney from './TakeMyMoney'; -import { removeFromCartEnhancer } from '../enhancers'; -import { CURRENT_USER_QUERY } from '../queries'; -import PropTypes from 'prop-types'; - -const CartStyles = styled.div` - padding: 20px; - position: relative; - background: white; - position: fixed; - height: 100%; - top: 0; - right: 0; - bottom: 0; - transform: translateX(100%); - transition: all 0.3s; - box-shadow: 0 0 10px 3px rgba(0, 0, 0, 0.2); - z-index: 5; - ${props => props.open && `transform: translateX(0);`}; - .toggleOpen { - position: absolute; - top: 0; - left: 0; - transform: translateX(-100%); - } -`; - -class CartList extends Component { - static contextTypes = { - client: PropTypes.object, - }; - - componentDidMount() { - setTimeout(this.props.currentUserQuery.refetch, 1); - // Set the cart state to be closed - this.context.client.writeQuery({ - query: GET_CART_STATE, - data: { ui: { isCartOpen: true, __typename: 'Network' } }, - }); - } - - toggleOpen = () => { - this.props.uiQuery.updateQuery(() => ({ ui: { isCartOpen: false, __typename: 'Network' } })); - }; - - render() { - if (this.props.loading) { - return

Loading....

; - } - - if (this.props.error) { - return

Error....

; - } - - // if (!has(this.props, 'currentUserQuery.user.cart')) { - // return

Don't have it yet!

; - // } - // OMG Clean this up - let { user = {} } = this.props.currentUserQuery || {}; - if (!user) user = {}; - const cart = user.cart || []; - const userId = user.id; - // const userId = this.props.currentUserQuery.user.id; - - const total = cart.reduce((a, b) => a + b.price, 0); - return ( - - -

{cart.length} Items

- - - - - -
- ); - } -} - -const userEnhancer = graphql(CURRENT_USER_QUERY, { name: 'currentUserQuery' }); -const uiEnhancer = graphql(GET_CART_STATE, { name: 'uiQuery' }); -export default compose(userEnhancer, removeFromCartEnhancer, uiEnhancer)(CartList); diff --git a/components/ChaChing.js b/components/ChaChing.js deleted file mode 100644 index 5874c27..0000000 --- a/components/ChaChing.js +++ /dev/null @@ -1,56 +0,0 @@ -import TransitionGroup from 'react-transition-group/TransitionGroup'; -import Transition from 'react-transition-group/Transition'; -import styled from 'styled-components'; - -const CartCount = styled.div` - padding: 10px; - transition: all 0.5s; - display: inline-block; - background: white; - background: linear-gradient(to bottom, #eeeeee 0%, #eeeeee 100%); - transform: translateY(100%); - z-index: 1; - position: relative; - &.cart-entering { - background: green; - transform: translateY(100%); - } - &.cart-entered { - transform: translateY(0); - } - &.cart-exiting { - position: absolute; - z-index: 0; - left: 0; - transform: translateY(-100%); - } -`; - -const ChaChingStyles = styled.div` - position: relative; - display: inline-block; - overflow: hidden; -`; - -const ChaChing = ({ amount }) => ( - - - - {status => ( - - {amount} - - )} - - - -); - -export default ChaChing; diff --git a/components/Count.js b/components/Count.js deleted file mode 100644 index 800a902..0000000 --- a/components/Count.js +++ /dev/null @@ -1,37 +0,0 @@ -import React, { Component } from 'react' -import { graphql, gql } from 'react-apollo' - -import { ALL_ITEMS_QUERY } from '../queries'; - -class Count extends Component { - - render() { - - // 1 - if (this.props.allLinksQuery && this.props.allLinksQuery.loading) { - return
Loading
- } - - // 2 - if (this.props.allLinksQuery && this.props.allLinksQuery.error) { - return
Error
- } - - // 3 - const itemsToRender = this.props.allLinksQuery.allItems - - return ( -
-

There are {itemsToRender.length} items for sale

-
- ) - } - -} - -// 1 - -// We export the graphQL HOC - this will fetch the data and inject it into the Count compeont via props - -export { ALL_ITEMS_QUERY } -export default graphql(ALL_ITEMS_QUERY, { name: 'allLinksQuery' }) (Count) diff --git a/components/CreateItem.js b/components/CreateItem.js deleted file mode 100644 index 27b62e5..0000000 --- a/components/CreateItem.js +++ /dev/null @@ -1,128 +0,0 @@ -import React, { Component } from 'react'; -import { graphql, gql } from 'react-apollo'; -import { ALL_ITEMS_QUERY, CREATE_ITEM_MUTATION } from '../queries'; -import ErrorMessage from './ErrorMessage'; -import makeImage from '../lib/image'; -import { fileEndpoint } from '../config'; - -class CreateLink extends Component { - state = { - description: '', - title: '', - image: '', - price: 0, - fullPrice: 0, - loading: false, - error: { - message: '', - }, - }; - - componentWillReceiveProps(nextProps) { - console.log(nextProps); - } - - uploadFile = async e => { - this.setState({ loading: true }); - const files = e.currentTarget.files; - - const data = new FormData(); - data.append('data', files[0]); - - // use the file endpoint - const res = await fetch(fileEndpoint, { - method: 'POST', - body: data, - }); - const file = await res.json(); - this.setState({ image: file.id, loading: false }); - }; - - _createLink = async e => { - e.preventDefault(); - // pull the values from state - const { description, title, image, price, fullPrice } = this.state; - // create a mutation - // TODO: handle any errors - // turn loading on - this.setState({ loading: true }); - try { - const res = await this.props.createItemMutation({ - // pass in those variables from state - variables: { - description, - title, - price: parseInt(price), - fullPrice, - imageId: image, - }, - }); - } catch (error) { - this.setState({ error }); - console.log(error); - } - this.setState({ loading: false }); - }; - - render() { - return ( -
- {this.state.loading ? 'LOADING...' : 'Ready!'} - - this.setState({ error: {} })} /> -
-

- Image - -

-

- Title - this.setState({ title: e.target.value })} - type="text" - placeholder="Title" - /> -

- -