summaryrefslogtreecommitdiffstats
path: root/frontend/components/Items.js
diff options
context:
space:
mode:
authorWes Bos <wesbos@gmail.com>2018-03-22 16:29:31 -0400
committerWes Bos <wesbos@gmail.com>2018-03-22 16:29:31 -0400
commita6af043686e4375d7944e91cae3d5b63c59edab0 (patch)
treef814d412b14a2a47f56c933ce38f458055f2f83b /frontend/components/Items.js
parent93495ce146c4e81ecfab3a0bca99460e75a759da (diff)
Migrate to render props
Diffstat (limited to 'frontend/components/Items.js')
-rw-r--r--frontend/components/Items.js59
1 files changed, 39 insertions, 20 deletions
diff --git a/frontend/components/Items.js b/frontend/components/Items.js
index 1b0c8bb..1f4918f 100644
--- a/frontend/components/Items.js
+++ b/frontend/components/Items.js
@@ -1,9 +1,20 @@
import React from 'react';
-import { compose } from 'react-apollo';
+import { Query } from 'react-apollo';
import styled from 'styled-components';
+import PropTypes from 'prop-types';
import Pagination from './Pagination';
import Item from './Item';
-import { itemEnhancer } from '../enhancers/enhancers';
+import { perPage } from '../config';
+import { ALL_ITEMS_QUERY } from '../queries/index';
+
+// export const itemEnhancer = graphql(ALL_ITEMS_QUERY, {
+// name: 'itemsQuery',
+// options({ page }) {
+// return {
+// variables: ,
+// };
+// },
+// });
const Items = styled.div`
display: grid;
@@ -18,30 +29,38 @@ const Center = styled.div`
`;
class ItemList extends React.Component {
- something() {}
+ static propTypes = {
+ page: PropTypes.number.isRequired,
+ };
+ componentDidUpdate(lastProps) {
+ if (lastProps.page === this.props.page) return;
+ // update the query
+ console.log('This fires, and should update the query');
+ }
render() {
- const { loading, error } = this.props.itemsQuery;
- // 1
- if (loading) {
- return <div>Loading</div>;
- }
-
- // 2
- if (error) {
- console.log(this.props.itemsQuery.error);
- return <div>Error</div>;
- }
- // 3
- const itemsToRender = this.props.itemsQuery.items;
-
return (
- <Center>
+ <Center key={this.props.page}>
<Pagination page={this.props.page} />
- <Items key={this.props.page}>{itemsToRender.map((item, i) => <Item key={item.id} item={item} />)}</Items>
+ <Query
+ query={ALL_ITEMS_QUERY}
+ variables={{
+ skip: this.props.page * perPage - perPage,
+ first: perPage,
+ }}
+ >
+ {({ data, error, loading, variables }) => {
+ if (loading) return <div>Loading</div>;
+ if (error) return <div>Error</div>;
+ return (
+ <Items key={this.props.page}>{data.items.map((item, i) => <Item key={item.id} item={item} />)}</Items>
+ );
+ }}
+ </Query>
<Pagination page={this.props.page} />
</Center>
);
}
}
-export default compose(itemEnhancer)(ItemList);
+// export default compose(itemEnhancer)(ItemList);
+export default ItemList;