summaryrefslogtreecommitdiffstats
path: root/stepped-solutions/24/frontend/components/Items.js
diff options
context:
space:
mode:
Diffstat (limited to 'stepped-solutions/24/frontend/components/Items.js')
-rwxr-xr-xstepped-solutions/24/frontend/components/Items.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/stepped-solutions/24/frontend/components/Items.js b/stepped-solutions/24/frontend/components/Items.js
new file mode 100755
index 0000000..9b5426c
--- /dev/null
+++ b/stepped-solutions/24/frontend/components/Items.js
@@ -0,0 +1,61 @@
+import React, { Component } from 'react';
+import { Query } from 'react-apollo';
+import gql from 'graphql-tag';
+import styled from 'styled-components';
+import Item from './Item';
+import Pagination from './Pagination';
+import { perPage } from '../config';
+
+const ALL_ITEMS_QUERY = gql`
+ query ALL_ITEMS_QUERY($skip: Int = 0, $first: Int = ${perPage}) {
+ items(first: $first, skip: $skip, orderBy: createdAt_DESC) {
+ id
+ title
+ price
+ description
+ image
+ largeImage
+ }
+ }
+`;
+
+const Center = styled.div`
+ text-align: center;
+`;
+
+const ItemsList = styled.div`
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 60px;
+ max-width: ${props => props.theme.maxWidth};
+ margin: 0 auto;
+`;
+
+class Items extends Component {
+ render() {
+ return (
+ <Center>
+ <Pagination page={this.props.page} />
+ <Query
+ query={ALL_ITEMS_QUERY}
+ // fetchPolicy="network-only"
+ variables={{
+ skip: this.props.page * perPage - perPage,
+ }}
+ >
+ {({ data, error, loading }) => {
+ if (loading) return <p>Loading...</p>;
+ if (error) return <p>Error: {error.message}</p>;
+ return (
+ <ItemsList>{data.items.map(item => <Item item={item} key={item.id} />)}</ItemsList>
+ );
+ }}
+ </Query>
+ <Pagination page={this.props.page} />
+ </Center>
+ );
+ }
+}
+
+export default Items;
+export { ALL_ITEMS_QUERY };