From 1450e579c67e3d969cb099dfe6c1cefd1e313fb5 Mon Sep 17 00:00:00 2001 From: Wes Bos Date: Fri, 15 Sep 2017 14:26:13 -0400 Subject: yep --- components/Items.js | 126 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 87 insertions(+), 39 deletions(-) (limited to 'components/Items.js') diff --git a/components/Items.js b/components/Items.js index 7d07643..d212ead 100644 --- a/components/Items.js +++ b/components/Items.js @@ -1,29 +1,30 @@ import { Component } from 'react' -import { graphql, compose } from 'react-apollo' +import { withApollo, graphql, compose } from 'react-apollo' import UpdateItem from './UpdateItem'; import Link from 'next/link'; import styled from 'styled-components'; import TakeMyMoney from './TakeMyMoney'; +import AddToCart from './AddToCart'; +import Pagination from './Pagination'; import formatMoney from '../lib/formatMoney'; import makeImage from '../lib/image'; +import slugify from 'slugify'; import { ALL_ITEMS_QUERY, DELETE_ITEM_MUTATION } from '../queries'; const Title = styled.h1` - font-size: 50px; + font-size: 10px; `; - - const Items = styled.div` display: grid; - grid-template-columns: repeat(4, calc(25% - 20px)); + grid-template-columns: repeat(4, calc(33% - 20px)); grid-gap: 20px; `; const Item = styled.div` background: #f3f3f3; - padding: 20px; + padding: 5px; img { width: 100%; } @@ -31,51 +32,91 @@ const Item = styled.div` class ItemList extends Component { + componentDidMount() { + this.prefetchNextItems(this.props.page); + } + + componentWillReceiveProps(nextProps) { + // update the next items if the page prop changed + if(this.props.page !== nextProps.page) { + this.prefetchNextItems(nextProps.page); + } + } + + prefetchNextItems = (currentPage) => { + const page = currentPage + 1; + console.log(`Prefetching Next items! Page ${page}`); + this.props.client.query({ + query: ALL_ITEMS_QUERY, + variables: { + skip: (page * 3) - 3 + } + }) + } + render() { + console.log("CLIENTTT!!", this.props.client); // 1 - if (this.props.allLinksQuery && this.props.allLinksQuery.loading) { + if (this.props.allItemsQuery && this.props.allItemsQuery.loading) { return
Loading
} // 2 - if (this.props.allLinksQuery && this.props.allLinksQuery.error) { - console.log(this.props.allLinksQuery.error) + if (this.props.allItemsQuery && this.props.allItemsQuery.error) { + console.log(this.props.allItemsQuery.error) return
Error
} // 3 - const itemsToRender = this.props.allLinksQuery.allItems + const itemsToRender = this.props.allItemsQuery.allItems; return ( - +
+ Items For Sale - {itemsToRender.map((item,i) => ( - - { item.image ? : null } -

{item.title}

-

{item.description}

- - Edit {item.id} - - - - - - - -
- ))} - + + {itemsToRender.map((item,i) => ( + + { item.image ? : null } +

+ + {item.title} + +

+ +

{item.description}

+ + Edit ✏️ + + + + + + + + + +
+ ))} +
+ +
) } @@ -86,7 +127,14 @@ class ItemList extends Component { // We export the graphQL HOC - this will fetch the data and inject it into the ItemList compeont via props // Create some Enhancers -const itemsEnahncer = graphql(ALL_ITEMS_QUERY, { name: 'allLinksQuery' }); +const itemsEnahncer = graphql(ALL_ITEMS_QUERY, { name: 'allItemsQuery', options({ page }) { + return { + variables: { + skip: (page * 3) - 3 + }, + } +}}); + const deleteItemEnhancer = graphql(DELETE_ITEM_MUTATION, { name: 'removeItemMutation', options: { @@ -105,4 +153,4 @@ const deleteItemEnhancer = graphql(DELETE_ITEM_MUTATION, { } }); -export default compose(itemsEnahncer, deleteItemEnhancer)(ItemList) +export default withApollo(compose(itemsEnahncer, deleteItemEnhancer)(ItemList)); -- cgit v1.3