summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--backend/package.json26
-rw-r--r--backend/src/resolvers/Query.js3
-rw-r--r--frontend/components/CreateItem.js21
-rw-r--r--frontend/components/DeleteItem.js6
-rw-r--r--frontend/components/Item.js4
-rw-r--r--frontend/components/Items.js15
-rw-r--r--frontend/components/Nav.js4
-rw-r--r--frontend/components/Pagination.js2
-rw-r--r--frontend/components/Search.js118
-rw-r--r--frontend/components/Signin.js3
-rw-r--r--frontend/components/Signout.js1
-rw-r--r--frontend/package-lock.json386
-rw-r--r--frontend/package.json14
-rw-r--r--frontend/queries/index.js16
14 files changed, 226 insertions, 393 deletions
diff --git a/backend/package.json b/backend/package.json
index 1fdbc3a..a15f813 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -9,24 +9,24 @@
},
"dependencies": {
"bcryptjs": "2.4.3",
- "graphql": "^0.12.3",
- "graphql-yoga": "1.2.4",
- "jsonwebtoken": "8.1.1",
- "nodemailer": "^4.4.2",
- "prisma-binding": "1.5.7",
+ "graphql": "^0.13.2",
+ "graphql-yoga": "1.7.1",
+ "jsonwebtoken": "8.2.1",
+ "nodemailer": "^4.6.4",
+ "prisma-binding": "1.5.16",
"react-debounce-input": "^3.2.0",
- "stripe": "^5.4.0"
+ "stripe": "^5.8.0"
},
"devDependencies": {
"babel-preset-env": "^1.6.1",
- "chalk": "^2.3.0",
- "dotenv": "5.0.0",
- "graphql-cli": "2.14.0",
- "graphql-request": "^1.4.1",
- "jest-cli": "^22.1.4",
- "nodemon": "1.14.12",
+ "chalk": "^2.3.2",
+ "dotenv": "5.0.1",
+ "graphql-cli": "2.15.8",
+ "graphql-request": "^1.5.1",
+ "jest-cli": "^22.4.3",
+ "nodemon": "1.17.3",
"npm-run-all": "4.1.2",
- "prisma": "1.2.0"
+ "prisma": "1.5.3"
},
"license": "MIT",
"repository": {
diff --git a/backend/src/resolvers/Query.js b/backend/src/resolvers/Query.js
index e69a671..a34b484 100644
--- a/backend/src/resolvers/Query.js
+++ b/backend/src/resolvers/Query.js
@@ -3,6 +3,7 @@ const { forwardTo } = require('prisma-binding');
const Query = {
items(parent, args, ctx, info) {
+ console.log('ITEMS!');
// check auth
return ctx.db.query.items({ ...args }, info);
},
@@ -36,7 +37,7 @@ const Query = {
},
async users(parent, args, ctx, info) {
- console.log('TODO: check their permissions');
+ // TODO Permissions
const userId = getUserId(ctx);
return ctx.db.query.users({}, info);
},
diff --git a/frontend/components/CreateItem.js b/frontend/components/CreateItem.js
index 625bf89..49f2f8f 100644
--- a/frontend/components/CreateItem.js
+++ b/frontend/components/CreateItem.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { Mutation } from 'react-apollo';
-import { CREATE_ITEM_MUTATION } from '../queries';
+import { CREATE_ITEM_MUTATION, ALL_ITEMS_QUERY } from '../queries';
import Error from './ErrorMessage';
import Form from './styles/Form';
import PropTypes from 'prop-types';
@@ -42,9 +42,22 @@ class CreateItem extends Component {
});
};
+ // TODO: Problem here - if I refetch page 1, page 2 to infinity are still out of date. I need to refetch all the pages somehow? without @connection
render() {
return (
- <Mutation mutation={CREATE_ITEM_MUTATION} variables={this.state}>
+ <Mutation
+ mutation={CREATE_ITEM_MUTATION}
+ variables={this.state}
+ refetchQueries={[
+ {
+ query: ALL_ITEMS_QUERY,
+ variables: {
+ skip: 0,
+ first: 2,
+ },
+ },
+ ]}
+ >
{(createItem, { loading, error }) => (
<Form
onSubmit={async e => {
@@ -62,7 +75,9 @@ class CreateItem extends Component {
<label>
Image
<input required onChange={this.uploadFile} type="file" accept=".png, .jpg, .jpeg" />
- {this.state.image ? <img src={this.state.image} width="100" alt={this.state.title} /> : null}
+ {this.state.image ? (
+ <img src={this.state.image} width="100" alt={this.state.title} />
+ ) : null}
</label>
<label>
Title
diff --git a/frontend/components/DeleteItem.js b/frontend/components/DeleteItem.js
index 8609ca7..e854340 100644
--- a/frontend/components/DeleteItem.js
+++ b/frontend/components/DeleteItem.js
@@ -20,7 +20,11 @@ class DeleteItem extends React.Component {
render() {
return (
- <Mutation mutation={REMOVE_ITEM_MUTATION} variables={{ id: this.props.id }} update={this.update}>
+ <Mutation
+ mutation={REMOVE_ITEM_MUTATION}
+ variables={{ id: this.props.id }}
+ update={this.update}
+ >
{(removeItem, { error }) => (
<button
onClick={() => {
diff --git a/frontend/components/Item.js b/frontend/components/Item.js
index 050ec17..2ed5742 100644
--- a/frontend/components/Item.js
+++ b/frontend/components/Item.js
@@ -35,7 +35,6 @@ const Item = styled.div`
& > * {
background: white;
border: 0;
- text-align: center;
font-size: 1rem;
padding: 1rem;
}
@@ -44,10 +43,11 @@ const Item = styled.div`
const PriceTag = styled.span`
background: ${props => props.theme.red};
- transform: rotate(2deg);
+ transform: rotate(3deg);
color: white;
font-weight: 600;
padding: 5px;
+ line-height: 1;
font-size: 3rem;
display: inline-block;
position: absolute;
diff --git a/frontend/components/Items.js b/frontend/components/Items.js
index e26408e..6a5defa 100644
--- a/frontend/components/Items.js
+++ b/frontend/components/Items.js
@@ -23,28 +23,25 @@ class ItemList extends React.Component {
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() {
return (
<Center key={this.props.page}>
<Pagination page={this.props.page} />
<Query
query={ALL_ITEMS_QUERY}
- fetchPolicy="cache-and-network"
- ssr={false}
variables={{
skip: this.props.page * perPage - perPage,
first: perPage,
}}
>
- {({ data, error, loading, variables, refetch }) => {
+ {({ data, error, loading }) => {
if (loading) return <div>Loading</div>;
if (error) return <div>Error</div>;
- return <Items key={this.props.page}>{data.items.map(item => <Item key={item.id} item={item} />)}</Items>;
+ return (
+ <Items key={this.props.page}>
+ {data.items.map(item => <Item key={item.id} item={item} />)}
+ </Items>
+ );
}}
</Query>
<Pagination page={this.props.page} />
diff --git a/frontend/components/Nav.js b/frontend/components/Nav.js
index 34c00cf..80f91c6 100644
--- a/frontend/components/Nav.js
+++ b/frontend/components/Nav.js
@@ -25,6 +25,10 @@ const StyledUl = styled.ul`
background: none;
border: 0;
cursor: pointer;
+ @media (max-width: 700px) {
+ font-size: 10px;
+ padding: 0 10px;
+ }
&:before {
content: '';
width: 2px;
diff --git a/frontend/components/Pagination.js b/frontend/components/Pagination.js
index d42c807..64e749a 100644
--- a/frontend/components/Pagination.js
+++ b/frontend/components/Pagination.js
@@ -4,7 +4,7 @@ import styled from 'styled-components';
import Link from 'next/link';
import PropTypes from 'prop-types';
import { perPage } from '../config';
-import { ALL_ITEMS_QUERY } from '../queries/index';
+import { ALL_ITEMS_QUERY, ITEM_COUNT_QUERY } from '../queries/index';
const PaginationStyles = styled.div`
text-align: center;
diff --git a/frontend/components/Search.js b/frontend/components/Search.js
index b8816ec..49c5023 100644
--- a/frontend/components/Search.js
+++ b/frontend/components/Search.js
@@ -1,9 +1,8 @@
import Downshift from 'downshift';
-import { Query } from 'react-apollo';
import Router from 'next/router';
import styled from 'styled-components';
import debounce from 'lodash.debounce';
-
+import { client } from '../lib/withData';
import { SEARCH_ITEMS_QUERY } from '../queries';
function routeToItem(item) {
@@ -43,77 +42,72 @@ const SearchStyles = styled.div`
padding: 10px;
border: 0;
font-size: 2rem;
+ &.loading {
+ background: red;
+ }
}
`;
-function AutoComplete(props) {
- const { items, onChange, loading } = props;
- return (
- <Downshift onChange={routeToItem} itemToString={i => (i === null ? '' : i.title)}>
- {({ getInputProps, getItemProps, isOpen, inputValue, highlightedIndex }) => (
- <div>
- {/* This is the searchInput */}
- {loading && 'LOADING'}
- <input
- {...getInputProps({
- placeholder: 'Search For Item',
- id: 'search',
- onChange: e => {
- props.refetch({ searchTerm: e.target.value });
- },
- })}
- />
- {isOpen ? (
- <DropDown>
- {/* This is the Dropdown */}
- {items.map((item, index) => (
- <DropDownItem
- {...getItemProps({ item })}
- key={item.id}
- highlighted={highlightedIndex === index}
- >
- <img width="50" src={item.image} alt={item.title} />
- {item.title}
- </DropDownItem>
- ))}
- {!items.length && <DropDownItem>Nothing Found for {inputValue}...</DropDownItem>}
- </DropDown>
- ) : null}
- </div>
- )}
- </Downshift>
- );
-}
-
-// TODO: This should not fire a queryon page load
-class Search extends React.Component {
+class AutoComplete extends React.Component {
state = {
- skip: true,
+ items: [],
+ loading: false,
};
- componentDidMount() {
- this.setState({ skip: false });
- }
+ onChange = debounce(async e => {
+ if (!e.target.value) {
+ return this.setState({ items: [] });
+ }
+ this.setState({ loading: true });
+ const res = await client.query({
+ query: SEARCH_ITEMS_QUERY,
+ variables: { searchTerm: e.target.value },
+ });
+ this.setState({ items: res.data.items, loading: false });
+ }, 350);
+
render() {
return (
<SearchStyles>
- <Query
- skip={this.state.skip}
- query={SEARCH_ITEMS_QUERY}
- variables={{ searchTerm: '' }}
- fetchPolicy="network-only"
- >
- {({ data, error, loading, refetch }) =>
- console.log('QUERY', data.items) || (
- <AutoComplete
- loading={loading}
- items={data.items || []}
- refetch={debounce(refetch, 300)}
+ <Downshift onChange={routeToItem} itemToString={i => (i === null ? '' : i.title)}>
+ {({ getInputProps, getItemProps, isOpen, inputValue, highlightedIndex }) => (
+ <div>
+ {/* This is the searchInput */}
+ <input
+ {...getInputProps({
+ placeholder: 'Search For Item',
+ id: 'search',
+ className: this.state.loading ? 'loading' : '',
+ onChange: e => {
+ e.persist();
+ this.onChange(e);
+ },
+ })}
/>
- )}
- </Query>
+ {/* This is the Dropdown */}
+ {isOpen && (
+ <DropDown>
+ {this.state.items.map((item, index) => (
+ <DropDownItem
+ {...getItemProps({ item })}
+ key={item.id}
+ highlighted={highlightedIndex === index}
+ >
+ <img width="50" src={item.image} alt={item.title} />
+ {item.title}
+ </DropDownItem>
+ ))}
+ {/* Found Nothing State */}
+ {!this.state.items.length && (
+ <DropDownItem>Nothing Found for {inputValue}...</DropDownItem>
+ )}
+ </DropDown>
+ )}
+ </div>
+ )}
+ </Downshift>
</SearchStyles>
);
}
}
-export default Search;
+export default AutoComplete;
diff --git a/frontend/components/Signin.js b/frontend/components/Signin.js
index 238e167..e701e94 100644
--- a/frontend/components/Signin.js
+++ b/frontend/components/Signin.js
@@ -15,8 +15,7 @@ class Signin extends Component {
e.preventDefault();
const res = await signin();
localStorage.setItem('token', res.data.signin.token);
- // client.query({ query: CURRENT_USER_QUERY, fetchPolicy: 'network-only' });
- client.query({ query: CURRENT_USER_QUERY });
+ client.query({ query: CURRENT_USER_QUERY, fetchPolicy: 'network-only' });
};
saveToState = e => {
diff --git a/frontend/components/Signout.js b/frontend/components/Signout.js
index d7c7816..b2a7ad6 100644
--- a/frontend/components/Signout.js
+++ b/frontend/components/Signout.js
@@ -4,6 +4,7 @@ import { CURRENT_USER_QUERY } from '../queries';
class Signout extends Component {
signout = refetch => {
+ console.log(refetch);
console.log('Signing Out');
localStorage.removeItem('token');
refetch();
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 46aaf28..3ad143a 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -63,6 +63,11 @@
"to-fast-properties": "2.0.0"
}
},
+ "@emotion/is-prop-valid": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.5.2.tgz",
+ "integrity": "sha1-T0dxfCvM6HWeEZl1IOa8sUMm9Uo="
+ },
"@semantic-release/commit-analyzer": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-3.0.7.tgz",
@@ -292,11 +297,6 @@
"string-width": "2.1.1"
}
},
- "ansi-escapes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
- "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
- },
"ansi-html": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
@@ -875,14 +875,6 @@
"mkdirp": "0.5.1"
}
},
- "babel-macros": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-macros/-/babel-macros-1.2.0.tgz",
- "integrity": "sha512-/GIwkOeNHQU9R27Bkt0jHrJgaXBX5KLKrIH5h/iGebvKppvL9e4wKCgrl4qwUj0qssBHQFeSavk3lG2lQgdq8w==",
- "requires": {
- "cosmiconfig": "3.1.0"
- }
- },
"babel-messages": {
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
@@ -900,16 +892,17 @@
}
},
"babel-plugin-emotion": {
- "version": "8.0.12",
- "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-8.0.12.tgz",
- "integrity": "sha512-GVxl6Y86I2PPICtFqabf5qvcVc0MD8PJbLujJ9UV1tdC5QoKMe+dZD0DCpdTDEzlOJVwetMu7m+bg66NeGi49w==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.1.0.tgz",
+ "integrity": "sha512-p5WF1ZqYjtXfzi4FMTXftf8svRTrlZOwssYcoWdEXLY+cnxu9hzRk2eN3BAcgtvwPslj003hNKv3fwYeB9ycDA==",
"requires": {
"@babel/helper-module-imports": "7.0.0-beta.32",
- "babel-macros": "1.2.0",
+ "babel-plugin-macros": "2.2.0",
"babel-plugin-syntax-jsx": "6.18.0",
"convert-source-map": "1.5.1",
- "emotion-utils": "8.0.12",
+ "emotion-utils": "9.1.0",
"find-root": "1.1.0",
+ "mkdirp": "0.5.1",
"source-map": "0.5.7",
"touch": "1.0.0"
},
@@ -946,6 +939,14 @@
"integrity": "sha512-zhvv4f6OTWy2bYevcJftwGCWXMFe7pqoz41IhMi4xna7xNsX5NygdagsrE0y6kkfuXq8UalwvPwKTyAxME2E/g==",
"dev": true
},
+ "babel-plugin-macros": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.2.0.tgz",
+ "integrity": "sha512-HGdenPU9+WGhg++P65O+6aIdmXx99p58K7VtAtizC3eUHbO4FXfyfK9SCJubylcyKziEB3nMAUDFHeyDUj38eA==",
+ "requires": {
+ "cosmiconfig": "4.0.0"
+ }
+ },
"babel-plugin-module-resolver": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.1.tgz",
@@ -1344,23 +1345,6 @@
"babel-types": "6.26.0"
}
},
- "babel-polyfill": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
- "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
- "requires": {
- "babel-runtime": "6.26.0",
- "core-js": "2.5.4",
- "regenerator-runtime": "0.10.5"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
- "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
- }
- }
- },
"babel-preset-env": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.0.tgz",
@@ -1958,11 +1942,6 @@
"resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz",
"integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU="
},
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
- },
"cheerio": {
"version": "1.0.0-rc.2",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
@@ -2093,19 +2072,6 @@
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
"integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM="
},
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "2.0.0"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
- },
"cliui": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
@@ -2633,22 +2599,23 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cosmiconfig": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz",
- "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
+ "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
"requires": {
"is-directory": "0.3.1",
"js-yaml": "3.11.0",
- "parse-json": "3.0.0",
+ "parse-json": "4.0.0",
"require-from-string": "2.0.1"
},
"dependencies": {
"parse-json": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz",
- "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"requires": {
- "error-ex": "1.3.1"
+ "error-ex": "1.3.1",
+ "json-parse-better-errors": "1.0.1"
}
}
}
@@ -2662,6 +2629,32 @@
"elliptic": "6.4.0"
}
},
+ "create-emotion": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.1.1.tgz",
+ "integrity": "sha512-cXm9BJlgjZGOrSUjOvt7e9ac/UMdqNcwvAXk2CLaVNDyUbovyae0Cuws5cVtTC2qq0qeDIOfAf65pmHRpo2j4w==",
+ "requires": {
+ "emotion-utils": "9.1.0",
+ "stylis": "3.5.0",
+ "stylis-rule-sheet": "0.0.10"
+ },
+ "dependencies": {
+ "stylis-rule-sheet": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
+ "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw=="
+ }
+ }
+ },
+ "create-emotion-styled": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/create-emotion-styled/-/create-emotion-styled-9.1.1.tgz",
+ "integrity": "sha512-oadr4YK9+l3RyywjD3WGPekN3767E8FSRtVUyVK9iggmSKRyN69kmhNQ6F+06EbsDUZK+868gj6bTo5yePUQEQ==",
+ "requires": {
+ "@emotion/is-prop-valid": "0.5.2",
+ "emotion-utils": "9.1.0"
+ }
+ },
"create-error-class": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
@@ -3235,9 +3228,9 @@
"integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0="
},
"downshift": {
- "version": "1.31.2",
- "resolved": "https://registry.npmjs.org/downshift/-/downshift-1.31.2.tgz",
- "integrity": "sha512-z8by12jDYb8i/5vbDA3fH/dQMIUIGcb/tuijT5WTPnbL/51YUA0iaKkdJORhnp6SfeRt8briMpOcMGFRtoABzw=="
+ "version": "1.31.3",
+ "resolved": "https://registry.npmjs.org/downshift/-/downshift-1.31.3.tgz",
+ "integrity": "sha512-u5FWNxgEcE0GIp2dgPP7b7pLrjIPHEK/cgo5Rg8wPPvHKp+zhw9BwnXYksrtWkLCIxAe2AaZhcAVJdm0Ub9qBw=="
},
"duplexer3": {
"version": "0.1.4",
@@ -3299,27 +3292,18 @@
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
},
"emotion": {
- "version": "8.0.12",
- "resolved": "https://registry.npmjs.org/emotion/-/emotion-8.0.12.tgz",
- "integrity": "sha512-WwPA6wrFo/Rwkcmn3ptO8Bpjob1lgRtBl4KJxagfQ+ExwnIryql3JNNwQX6TvJvlLxQm5ByrG71PZbKode1hpw==",
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/emotion/-/emotion-9.1.1.tgz",
+ "integrity": "sha512-nWCO529SltskIdUf46J55Z5C/7FyiisatVVfbzYGthyfNwdxiC7LaHH9iAHPp2j7uo7AWe7jALdKsqPKdfk4KQ==",
"requires": {
- "babel-plugin-emotion": "8.0.12",
- "emotion-utils": "8.0.12",
- "stylis": "3.5.0",
- "stylis-rule-sheet": "0.0.5"
- },
- "dependencies": {
- "stylis-rule-sheet": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.5.tgz",
- "integrity": "sha512-d1i8CktqcZI8oR239dRh/tZmWRxje/WR8rTAiXcN+oJehNhSD8OIYObP34qPdlOn37iu1ysBEm186WIRKpUU2w=="
- }
+ "babel-plugin-emotion": "9.1.0",
+ "create-emotion": "9.1.1"
}
},
"emotion-utils": {
- "version": "8.0.12",
- "resolved": "https://registry.npmjs.org/emotion-utils/-/emotion-utils-8.0.12.tgz",
- "integrity": "sha512-rEW3CSWnSh+7yD9sF9aniSCQFVDGG+iW7vM/0LpaavmtK3by8hG7cAcr5cMISQf4MxAFwv0nijZMSR5Fftjw+A=="
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/emotion-utils/-/emotion-utils-9.1.0.tgz",
+ "integrity": "sha512-Zdy9TiZzMDRsCufivL/ZhQ0JdfGGSOc20opRjaBOemF5h2kYI/MD/bLcXfAZgzYVL12WNQegZIme6l+N/JFE4Q=="
},
"encodeurl": {
"version": "1.0.2",
@@ -3871,16 +3855,6 @@
}
}
},
- "external-editor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
- "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
- "requires": {
- "chardet": "0.4.2",
- "iconv-lite": "0.4.19",
- "tmp": "0.0.33"
- }
- },
"extglob": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
@@ -3964,14 +3938,6 @@
}
}
},
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "1.0.5"
- }
- },
"filename-regex": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
@@ -5910,50 +5876,6 @@
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
- "inquirer": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
- "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
- "requires": {
- "ansi-escapes": "1.4.0",
- "chalk": "1.1.3",
- "cli-cursor": "2.1.0",
- "cli-width": "2.2.0",
- "external-editor": "2.1.0",
- "figures": "2.0.0",
- "lodash": "4.17.5",
- "mute-stream": "0.0.7",
- "run-async": "2.3.0",
- "rx": "4.1.0",
- "string-width": "2.1.1",
- "strip-ansi": "3.0.1",
- "through": "2.3.8"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- }
- }
- },
"interpret": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
@@ -6259,11 +6181,6 @@
"integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
"dev": true
},
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
- },
"is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
@@ -8286,11 +8203,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
- },
"mv": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
@@ -8544,9 +8456,9 @@
"isomorphic-fetch": "2.2.1",
"lodash.isfunction": "3.0.9",
"next": "5.1.0",
- "react": "16.3.0",
- "react-apollo": "2.1.1",
- "react-dom": "16.3.0"
+ "react": "16.3.1",
+ "react-apollo": "2.1.2",
+ "react-dom": "16.3.1"
},
"dependencies": {
"graphql": {
@@ -8587,9 +8499,9 @@
"isomorphic-unfetch": "2.0.0",
"next": "4.2.3",
"prop-types": "15.6.1",
- "react": "16.3.0",
- "react-apollo": "2.1.1",
- "react-dom": "16.3.0"
+ "react": "16.3.1",
+ "react-apollo": "2.1.2",
+ "react-dom": "16.3.1"
},
"dependencies": {
"ajv": {
@@ -9281,69 +9193,6 @@
"wrappy": "1.0.2"
}
},
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "1.2.0"
- }
- },
- "opencollective": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
- "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
- "requires": {
- "babel-polyfill": "6.23.0",
- "chalk": "1.1.3",
- "inquirer": "3.0.6",
- "minimist": "1.2.0",
- "node-fetch": "1.6.3",
- "opn": "4.0.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
- "node-fetch": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
- "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
- "requires": {
- "encoding": "0.1.12",
- "is-stream": "1.1.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- }
- }
- },
- "opn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
- "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
- "requires": {
- "object-assign": "4.1.1",
- "pinkie-promise": "2.0.1"
- }
- },
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
@@ -10039,9 +9888,9 @@
}
},
"react": {
- "version": "16.3.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.3.0.tgz",
- "integrity": "sha512-Qh35tNbwY8SLFELkN3PCLO16EARV+lgcmNkQnoZXfzAF1ASRpeucZYUwBlBzsRAzTb7KyfBaLQ4/K/DLC6MYeA==",
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.3.1.tgz",
+ "integrity": "sha512-NbkxN9jsZ6+G+ICsLdC7/wUD26uNbvKU/RAxEWgc9kcdKvROt+5d5j2cNQm5PSFTQ4WNGsR3pa4qL2Q0/WSy1w==",
"requires": {
"fbjs": "0.8.16",
"loose-envify": "1.3.1",
@@ -10050,9 +9899,9 @@
}
},
"react-apollo": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.1.1.tgz",
- "integrity": "sha512-p8SkckP2naoVVmkDK9eWK8AXfU3ocBlc77pWUMeh5smilMY9a5FT/0QtxF3C9WnkQbMnrimRKKEpJUO8w2KJ9w==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.1.2.tgz",
+ "integrity": "sha512-d4OdB3sjvTUfYzXuRiiXnSckyBaZzdvFEZ9DrdoErqNGv3x+2+RhnEEJemlXDRve78Mf3cqkSeIhjSxMszrmPQ==",
"requires": {
"fbjs": "0.8.16",
"hoist-non-react-statics": "2.3.1",
@@ -10061,24 +9910,15 @@
"prop-types": "15.6.1"
}
},
- "react-debounce-input": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.2.0.tgz",
- "integrity": "sha1-aXjGBh2Jj1SfQEF/sNLrvs9Qqqo=",
- "requires": {
- "lodash.debounce": "4.0.8",
- "prop-types": "15.6.1"
- }
- },
"react-deep-force-update": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz",
"integrity": "sha1-jqQmPNZFWgULN0RbPwj9g52G6Qk="
},
"react-dom": {
- "version": "16.3.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.0.tgz",
- "integrity": "sha512-xT/FxawAurL6AV8YtAP7LkdDJFFX2vvv17AqFLQRF81ZtWLXkV/0dcAaiFIy0lmoQEFT931TU9aaH+5dBUxTcw==",
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.1.tgz",
+ "integrity": "sha512-2Infg89vzahq8nfVi1GkjPqq0vrBvf0f3T0+dTtyjq4f6HKOqKixAK25Vr593O3QTx4kw/vmUtAJwerlevNWOA==",
"requires": {
"fbjs": "0.8.16",
"loose-envify": "1.3.1",
@@ -10087,12 +9927,12 @@
}
},
"react-emotion": {
- "version": "8.0.12",
- "resolved": "https://registry.npmjs.org/react-emotion/-/react-emotion-8.0.12.tgz",
- "integrity": "sha512-shGa+uer+Ng1uRwqkdVIYW5zsxx4/kc5za8zRMhrTaGJCpU3uwQsdMpmX2kF4chJZvRsfxW+2cBue3EnJeX5zw==",
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/react-emotion/-/react-emotion-9.1.1.tgz",
+ "integrity": "sha512-ydM/USfC5vd0cuZ/Lc0kYoBp1kU8PZ4iqEHXgh2BgV2IWJGlOBibQgVfk69VyPSfToPcvywIARPDxJ7BqVLH+w==",
"requires": {
- "babel-plugin-emotion": "8.0.12",
- "emotion-utils": "8.0.12"
+ "babel-plugin-emotion": "9.1.0",
+ "create-emotion-styled": "9.1.1"
}
},
"react-hot-loader": {
@@ -10141,14 +9981,13 @@
}
},
"react-spinners": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.2.6.tgz",
- "integrity": "sha512-DBKmRpoQi0NpG4LcUMQw+DzN8fyHZApoJ2gwnwTRKyPOqlfncypUhI0Or77Ueur049t+A9QO/gBke9RQ++mEsw==",
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.3.1.tgz",
+ "integrity": "sha512-z3CY20uf6yodDU2LZ8d/jmNukHKQj2bjjzV7+HXhThkPj+2kRlUvIxa4/bTAsSIsCKnvRT7niJ/Xlo12WnIrrA==",
"requires": {
- "babel-plugin-emotion": "8.0.12",
- "emotion": "8.0.12",
+ "emotion": "9.1.1",
"prop-types": "15.6.1",
- "react-emotion": "8.0.12",
+ "react-emotion": "9.1.1",
"recompose": "0.26.0"
}
},
@@ -10554,15 +10393,6 @@
"lowercase-keys": "1.0.1"
}
},
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "2.0.1",
- "signal-exit": "3.0.2"
- }
- },
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@@ -10608,14 +10438,6 @@
"nearley": "2.13.0"
}
},
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "requires": {
- "is-promise": "2.1.0"
- }
- },
"run-queue": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
@@ -10624,11 +10446,6 @@
"aproba": "1.2.0"
}
},
- "rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
- },
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
@@ -11352,16 +11169,15 @@
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"styled-components": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.2.3.tgz",
- "integrity": "sha1-UPcSBzIO6x71Od7EY38h9ePJNrQ=",
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.2.5.tgz",
+ "integrity": "sha1-tdXX1hirJA/xBgK1yliGuNs9Cg0=",
"requires": {
"buffer": "5.1.0",
"css-to-react-native": "2.1.2",
"fbjs": "0.8.16",
- "hoist-non-react-statics": "1.2.0",
+ "hoist-non-react-statics": "2.5.0",
"is-plain-object": "2.0.4",
- "opencollective": "1.0.3",
"prop-types": "15.6.1",
"stylis": "3.5.0",
"stylis-rule-sheet": "0.0.10",
@@ -11383,9 +11199,9 @@
"integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
},
"hoist-non-react-statics": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
- "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz",
+ "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w=="
},
"stylis-rule-sheet": {
"version": "0.0.10",
@@ -11618,14 +11434,6 @@
"setimmediate": "1.0.5"
}
},
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "1.0.2"
- }
- },
"tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index e182ba9..ef7534f 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -22,7 +22,7 @@
"apollo-link-state": "^0.4.1",
"babel-plugin-styled-components": "^1.5.1",
"date-fns": "^2.0.0-alpha.7",
- "downshift": "^1.31.2",
+ "downshift": "^1.31.3",
"express": "^4.16.3",
"graphql": "^0.13.2",
"graphql-tag": "^2.8.0",
@@ -33,13 +33,13 @@
"next-with-apollo": "^1.0.6",
"nprogress": "^0.2.0",
"prop-types": "^15.6.1",
- "react": "^16.3.0-alpha.1",
- "react-apollo": "^2.1.0",
- "react-dom": "^16.3.0-alpha.1",
- "react-spinners": "^0.2.6",
+ "react": "^16.3.1",
+ "react-apollo": "^2.1.2",
+ "react-dom": "^16.3.1",
+ "react-spinners": "^0.3.1",
"react-stripe-checkout": "^2.6.3",
"react-transition-group": "^2.3.0",
- "styled-components": "^3.2.3"
+ "styled-components": "^3.2.5"
},
"devDependencies": {
"babel-plugin-module-resolver": "^3.1.1",
@@ -112,4 +112,4 @@
}
}
}
-} \ No newline at end of file
+}
diff --git a/frontend/queries/index.js b/frontend/queries/index.js
index 1080a2e..6b3dd2a 100644
--- a/frontend/queries/index.js
+++ b/frontend/queries/index.js
@@ -74,18 +74,28 @@ export const CREATE_ORDER_MUTATION = gql`
export const ALL_ITEMS_QUERY = gql`
# Import the Fragment
${itemDetails}
- query AllItemsQuery($skip: Int = 0, $first: Int = 3) {
- itemsConnection(orderBy: createdAt_DESC, first: $first, skip: $skip) @connection(key: "itemsConnection") {
+ query AllItemsQuery($skip: Int = 0, $first: Int = 2) {
+ itemsConnection {
aggregate {
count
}
}
- items(orderBy: createdAt_DESC, first: $first, skip: $skip) @connection(key: "items") {
+ items(orderBy: createdAt_DESC, first: $first, skip: $skip) {
...itemDetails
}
}
`;
+export const ITEM_COUNT_QUERY = gql`
+ query itemCountQuery {
+ itemsConnection {
+ aggregate {
+ count
+ }
+ }
+ }
+`;
+
export const SINGLE_ITEM_QUERY = gql`
${itemDetails}
query FindItem($id: ID!) {